Technical RFP Writing & Review技術 RFP 撰寫與審查

Draft and review technical RFPs from the issuer's side, cutting redundant sections, appendix bloat, and AI filler站在招標方立場撰寫與審查技術 RFP,砍掉重複章節、附錄灌水與 AI 填充語

繁中User-invoked使用者叫用
Read SKILL.md on GitHub在 GitHub 看 SKILL.md

This skill drafts and reviews technical RFPs (需求規格書 / 需求規劃書 / 招標規格) in Traditional Chinese, written from the issuer's perspective — the organization putting out the requirement, not the vendor bidding on it. It applies a fixed set of structural checks before touching language, then enforces a formal plain-language style so every requirement reads as a complete, verifiable sentence. Manual trigger only — invoke it by name rather than expecting it to fire automatically.

Install

npx skills add https://github.com/leoluyi/skills -g -a rfp-writing -y

Update later with:

npx skills update rfp-writing

Source

What it does

Reviewing an existing RFP or drafting a new section both run through the same structural audit before any language pass:

  • Redundancy elimination — cross-cutting concerns (signing, scanning, audit logging) belong in one general section, not repeated per domain. Cross-references are fine; restating the same requirement twice is not.
  • Appendix bloat control — an appendix earns its place only by adding concrete, quantifiable information not already in the main body. Appendices full of "由廠商提出" rows, or ones that just restate main-body requirements in table form, get deleted; any numbers worth keeping move into their parent section.
  • Thin-section consolidation — a section with only 1-2 bullets and no opening context gets merged into the nearest parent or sibling rather than standing alone.
  • Section justification — a section only survives if it has both a concrete current-or-next-phase use case and enough substance (opening context plus 3+ requirements) to warrant standalone treatment. Speculative "might need later" content gets demoted to a one-sentence remark.
  • Formal plain-language style — every bullet must be a complete sentence stating what and why, not a noun-phrase fragment:

BAD: - 持久卷(PV/PVC) GOOD: - 所有儲存須透過 CSI 驅動掛載為持久卷(PV/PVC),不依賴節點本地磁碟。

A fixed prohibited-pattern list catches AI filler (確保, 從而, 賦能), slash enumeration in Chinese (輸入/輸出 → 輸入、輸出), hedging (可能, 若), and other AI-writing tics, while an allowed-pattern list protects legitimate RFP notation (bold requirement labels, English term slashes like JWT / OAuth2, em dashes for technical explanation) from being flagged. - Section placement — content belonging to two or more owning sections (e.g., canary deployment strategy sitting under "service lifecycle" instead of "deployment & release") gets split and merged into the correct parent. - Reference integrity — after any structural edit (move, delete, renumber), it greps the full document for the old section number and updates every cross-reference — tables, footnotes, appendices.

When to use

Use it when you are drafting or reviewing a technical RFP, 需求規格書, 需求規劃書, or 招標規格書 — i.e., a vendor requirement specification being sent out for bidding, from the issuing side.

When not to

Skip it for anything adjacent but structurally different:

  • Migration plans, test plans, deployment plans
  • Runbooks, SOPs, operational procedures
  • ADR / ARB / architecture decision records
  • Internal design docs or technical specifications
  • Meeting minutes, decision memos, stakeholder pre-reads
  • General technical documentation (README, onboarding, API docs)
  • Vendor-side bid proposals or RFP responses (投標提案) — this skill is for the issuer, not the responder
  • General formal Chinese writing with no RFP-specific structure — RFP conventions (bullet-heavy, structured uniformity, no "rhythm variation") actively conflict with general formal-writing conventions

How it works

Two rules do most of the structural work. First, the thin-section test: if removing a section's header and indenting its content under a neighboring section loses zero information, the section should not exist independently — merge it. Second, the appendix bloat test: an appendix is boilerplate, not a real baseline, if most of its rows just say "由廠商提出" or restate numbers already implied by main-body sections (e.g., generic 99.9% uptime or RPO/RTO figures) — kill it and fold any genuinely new numbers into the section that owns them. Both tests exist to stop an RFP from accumulating sections that look thorough but add no verifiable requirement.

A related check, the infrastructure-standard-practice test, catches the opposite failure mode: if a section could appear verbatim in any cloud or Kubernetes RFP with zero modification (secret management, HA control plane, CPU sizing, backup/restore), it isn't a domain-specific requirement — delete it or fold it into the infrastructure layer rather than giving it a standalone section under the application.

Language cleanup runs only after structural changes are confirmed, using a grep-based audit of prohibited patterns (AI filler, contrarian structure, hedging, significance inflation) against an explicit allow-list, so legitimate RFP notation (bold labels, technical slashes, bullet-heavy formatting) survives untouched. Reviewing an existing document and drafting a new section both end the same way: a final grep pass to confirm zero prohibited patterns remain, with humanizer-zh offered — never run automatically — as an optional deeper de-AI pass on the finished draft.

Related skills

  • humanizer-zh — general Traditional Chinese de-AI language cleanup; use it for a deeper pass after this skill's structural and language rules are satisfied, or for any document that isn't an RFP. Its conventions apply broadly, while this skill's structural rules (bullet-heavy, uniform formatting) are RFP-specific and would conflict if merged into a general-purpose style guide.

這個 skill 用來撰寫或審查繁體中文的技術 RFP(需求規格書/需求規劃書/招標規格),站在招標方(發出需求的機構)的立場寫,而不是投標廠商的立場。它先跑一套固定的結構審查,再處理語言,確保每條需求都是完整、可驗證的句子。僅限手動叫用——需要指名啟動,不會自動觸發。

安裝

npx skills add https://github.com/leoluyi/skills -g -a rfp-writing -y

之後更新:

npx skills update rfp-writing

原始碼

它做什麼

無論是審查既有 RFP 還是撰寫新章節,都會先跑同一套結構審查,才進入語言修訂:

  • 消除重複——跨領域關注點(簽章、掃描、稽核日誌)應該只在一個通用的部署/發布章節裡講清楚,不要在各領域章節重複交代。交叉引用可以留,但同一條需求在兩處重複陳述就不行。
  • 附錄灌水控管——附錄要留下來,必須為主文加入具體、可量化、且尚未出現過的資訊。如果附錄大多寫「由廠商提出」,或只是把主文的需求用表格重述一遍,就該刪掉;真正值得留的數字,搬進對應的主文章節。
  • 薄弱章節合併——只有一兩個條列項目、又沒有開頭脈絡說明「為什麼重要」的章節,不該獨立存在,應併入最接近的上層或同層章節。
  • 章節存在的正當性——一個章節要同時滿足「有具體的現階段或下一階段使用情境」與「份量足夠(開頭脈絡加三條以上需求)」才值得獨立成節。只是「未來可能需要」的內容,降級成一句話的備註即可。
  • 正式白話文體——每個條列項目都必須是完整句子,說明 what 與 why,不能是名詞片語:

差:- 持久卷(PV/PVC) 好:- 所有儲存須透過 CSI 驅動掛載為持久卷(PV/PVC),不依賴節點本地磁碟。

有一份固定的禁用清單會抓出 AI 填充語(確保、從而、賦能)、中文斜線列舉(輸入/輸出 → 輸入、輸出)、模糊語氣(可能、若)等 AI 寫作習氣;同時有一份允許清單,保護正規 RFP 寫法(粗體需求標籤、JWT / OAuth2 這類英文術語斜線、技術說明用的破折號)不被誤判。 - 章節歸屬——內容同時涉及兩個以上章節的關注點(例如金絲雀部署策略被放在「服務生命週期」而非「部署與發布」下),要拆開後併入正確的上層章節。 - 參照完整性——任何結構性變動(搬移、刪除、重新編號)之後,都要對全文 grep 舊章節編號,更新所有交叉引用——表格、註腳、附錄都要一併更新。

何時使用

當你要以招標方身分撰寫或審查技術 RFP、需求規格書、需求規劃書、招標規格書——也就是準備發出去給廠商投標的需求規格文件時使用。

何時不要

以下是相鄰但結構不同的文件類型,不要用這個 skill:

  • 遷移計畫、測試計畫、部署計畫
  • Runbook、SOP、操作程序文件
  • ADR/ARB/架構決策紀錄
  • 內部設計文件、技術規格書
  • 會議紀錄、決策備忘、主管簡報前讀資料
  • 一般技術文件(README、上手指南、API 文件)
  • 廠商端的投標提案或 RFP 回覆(投標提案)——這個 skill 是給招標方用的,不是給投標方用的
  • 沒有 RFP 特定結構的一般正式中文寫作——RFP 的慣例(條列密集、結構一致、不刻意做「節奏變化」)跟一般正式寫作的慣例是衝突的

運作方式

有兩條規則決定了大部分的結構判斷。第一是薄弱章節測試:如果拿掉一個章節的標題、把內容縮排併入相鄰章節,完全不會遺失任何資訊,這個章節就不該獨立存在,應該合併。第二是附錄灌水測試:如果附錄裡大多數項目寫的是「由廠商提出」,或只是重述主文已經隱含的數字(例如通用的 99.9% 可用率、RPO/RTO 數值),這個附錄就是灌水而非真正的基準線——刪掉它,把真正新增的數字搬進對應的主文章節。這兩條測試的目的,是防止 RFP 累積出看起來完整、實際上沒有任何可驗證需求的章節。

還有一條相關檢查,基礎設施標準做法測試,抓的是相反的問題:如果一個章節原封不動放進任何雲端或 K8s RFP 都成立(密鑰管理、控制面高可用、CPU 規格、備份還原),它就不是領域專屬需求——應該刪掉,或併入基礎設施層,而不是在應用層底下獨立成節。

語言修訂只在結構性變動確認之後才進行,用 grep 比對禁用清單(AI 填充語、反轉句式、模糊語氣、意義誇大)與明確的允許清單,確保正規 RFP 寫法(粗體標籤、技術斜線、條列密集的格式)不會被誤改。無論是審查既有文件還是撰寫新章節,最後都會跑一次 grep 確認禁用模式已清零,並提供 humanizer-zh 作為選配的深層去 AI 味潤稿——不會自動執行,只在使用者同意時才跑。

相關技能

  • humanizer-zh——通用的繁體中文去 AI 味語言潤稿。等這個 skill 的結構與語言規則都跑完之後,可以再用它做更深一層的潤稿;或是遇到非 RFP 文件時直接用它。它的規則適用範圍很廣,而這個 skill 的結構規則(條列密集、格式一致)是 RFP 專屬的,硬併進通用文風指南反而會互相衝突。