這個單元解決什麼問題prompt 不是許願,是把任務寫成模型可執行的規格。這個單元給你可操作的 prompt 設計法:用結構化骨架組裝角色、任務、約束、輸出格式、範例;用 XML 標籤把區塊切乾淨;用 Few-Shot 把抽象的風格與格式品質校準成模型能對齊的樣板;在手動調整效益遞減時,用 Automated Prompt Optimization(APO)以評估驅動自動迭代;最後用 Skill 把優化流程固化成可重複叫用的工具。
學習目標
讀完本單元,你應該能夠:- 能寫出結構化 prompt,包含角色、任務、約束、輸出格式、範例五個元件,並說明各元件的作用。
- 能用 XML 標籤把指令、待處理資料、範例切開,避免指令被資料污染。
- 能用 2 到 3 個 Few-Shot 範例把抽象的風格或格式要求轉成模型可對齊的樣板。
- 能判斷何時手動調整 prompt 已夠用,何時應改用 APO 自動優化。
- 能把「評估 prompt 並改寫」的流程封裝成可重複叫用的 Skill,減少每次重做的成本。
1. prompt 的本質:可執行規格而非許願池
prompt 不是對模型許願,是把任務的解空間縮到夠小,讓模型不必猜。你給的每一句約束,都是在替模型剪枝;規格越精確,模型要在多少種「合理但不是你要的」輸出之間徘徊就越少,輸出品質也越穩定。把這件事想成寫規格而非寫祈禱文,後面所有技巧才有著力點。 多數人對 prompt 不滿意,根因不是模型笨,是把一個需要約束的任務當成許願池在用。看一個真實對照。 Before / After:同一個任務,許願式對結構化規格 任務:請模型摘要一篇論文。 許願式 prompt:2. 結構化骨架:五元件組裝
一個可靠的 prompt 通常由五個元件組成。不是每個任務都五個都要,但缺哪個、為什麼缺,你要心裡有數。 角色(Role):設定任務視角與語氣基調,作用是把模型的輸出分布往某個專業子集偏移。它不是萬能咒。「你是一位頂尖專家」幾乎不帶資訊量,模型無從據此剪枝;「你是替審稿人準備 rebuttal 的第一作者」才真的限定了視角、語氣與該強調什麼。角色要具體到能改變模型該關注什麼,才有用。 任務(Task):一個明確的動詞,加上輸入描述,加上成功判準。「摘要這篇論文」是動詞加輸入,但缺成功判準;補上「供讀者三十秒內判斷是否值得精讀」,模型才知道要為誰、為什麼而寫。成功判準是五元件裡最常被漏掉、也最關鍵的一塊。 約束(Constraints):格式規範、禁止行為、長度限制。經驗法則是,「不要做 X」往往比「請做 Y」更難漏掉,因為你要的正向行為模型可能用各種方式達成,但你不要的負向行為(補充外部知識、加評論、改格式)一旦點名禁止,邊界就清楚了。把你最不希望出現的失敗模式,逐條寫成禁止項。 輸出格式(Output Format):Markdown 結構、JSON schema、表格骨架。能貼範本就直接貼空骨架讓模型填,別用文字描述格式。「請用條列」遠不如直接給它3. 用 XML 標籤把 prompt 結構化(Claude 尤其推薦)
當 prompt 同時包含指令、背景脈絡、範例、待處理資料時,模型可能把它們混在一起解讀,最典型的災難是「指令被資料污染」:你貼進去要處理的文件裡,剛好有一句看起來像指令的話,模型就照著做了。XML 標籤的用處,是把每一塊內容用各自的標籤框起來,讓邊界無歧義。 Anthropic 官方明確建議用 XML 標籤分隔 prompt 的不同組成,並指出當 prompt 含多種內容(context、instructions、examples、變數輸入)時,標籤能讓 Claude 更精準地解析,產出更高品質的輸出 [1](截至 2026-05)。Claude 對標籤邊界的遵從度高,常用標籤如<instructions>、<context>、<example>、<document>,標籤名沒有固定字典,任何具描述性的名稱(<customer_data>、<lameness_notes>)模型都讀得懂,重點是一致、語意清楚。
三個關鍵用法:
- 包資料:把長文本放進
<document>,與指令分離,降低指令被資料淹沒的機率。 - 框輸出:要求模型把答案放進
<answer>,便於程式擷取與後處理。 - 分層巢狀:
<examples>內含多個<example>,餵 Few-Shot;多份文件用<documents>包住、各自<document index="1">。
<comment> 裡的東西是資料不是命令,正確輸出「中性」或「正向」(取決於你怎麼界定)。這個隔離習慣,在處理使用者輸入、爬來的網頁、PDF 抽取的文字時是基本防線,也與 03-3 談的 prompt injection 直接相關。
和 Markdown、JSON 的取捨:三者可在一個 prompt 裡混用,各司其職。XML 適合分區塊與表達巢狀語意(哪段是指令、哪段是資料);JSON 適合要求模型輸出結構化資料(後面程式直接 parse);Markdown 適合人讀的格式(標題、條列)。常見組合是用 XML 切 prompt 的大區塊、要求模型在 <answer> 裡輸出一段 JSON。別糾結選哪一個,按「這塊內容是給人讀、給機器讀、還是要切邊界」來決定。
4. 用 Few-Shot 校準風格與格式(重點小節)
Few-Shot 是把抽象需求具體化的最強手段。「要台灣學術中文語氣」「要符合我們團隊的 commit 格式」這類要求,你用文字描述半天,模型還是抓不準;丟 2 到 3 個示範,模型直接對齊樣板。範例承載的資訊密度,遠高於同樣字數的描述。 核心作用:把你腦中那個說不清的「對的樣子」,外顯成模型能模仿的具體輸出。 選例策略:範例要覆蓋輸出變異度的關鍵邊界,不是隨便找幾個「看起來對」的例子。如果你的任務有幾種典型輸入(正常案例、邊界案例、該回「無法判斷」的案例),範例就該涵蓋這些代表性情況,否則模型遇到沒示範過的型態只能亂猜。覆蓋邊界比堆數量重要,2 到 3 個選得準的範例,勝過 10 個都長一樣的。 worked example:prompt 骨架加兩個示範,把雜亂筆記轉成固定 JSON 任務:把現場隨手記的觀察筆記,正規化成固定 schema 的 JSON。severity 填數字、一個填文字),模型不會挑一個遵守,而是兩者之間搖擺,產出你沒預期的混合體。範例之間的內部一致性,和範例選得準一樣重要。檢查 Few-Shot 時,先問「我這幾個範例彼此有沒有打架」。
5. Automated Prompt Optimization(APO):以評估驅動自動迭代
手動調 prompt 會遇到天花板:你憑直覺改一句、跑幾次、覺得好像好一點,但沒有量化依據,改到後面是玄學。APO 的核心思路是把這件事自動化,給定一個評估函數(eval),以最大化 eval 分數為目標自動修改 prompt,而不是靠人猜。 兩個有代表性的學術方法:- OPRO(Optimization by PROmpting):把 LLM 本身當優化器。每一步把「過去試過的 prompt 與它們的得分」餵回模型,要它生成更好的新 prompt,評估後再加入下一輪的脈絡。Yang, et al.(2023)在 GSM8K、Big-Bench Hard 等任務上,用 OPRO 找到的 prompt 勝過人工設計的 prompt 達 8% 到 50% [2]。
- DSPy:把 LLM pipeline 抽象成可程式化的模組,由 compiler 針對給定 metric 自動優化(自動產生並挑選 few-shot 示範、改寫指令)。Khattab, et al.(2023)展示幾行 DSPy 就能讓模型自助 bootstrap 出勝過標準 few-shot 的 pipeline [3]。實務上 DSPy 是目前把「prompt 當可優化參數」這個想法落地最成熟的框架之一(截至 2026-05)。
APO 是快速演進的領域,下面是可參考的方向(截至 2026-06)這塊技術更替很快,依「你願意投入多少評估成本」分三類挑:
- 追學術級準度:GEPA(Genetic-Pareto 反思式演化,ICLR 2026 Oral,多個 benchmark 上勝過 DSPy 既有的 MIPROv2 逾 10% [11])。
- 要實務平衡、能上線:DSPy 的 MIPROv2,效能、基礎設施與生產就緒度的折衷點 [3]。
- 要快、設定成本低:TextGrad(以文字版「自動微分」迭代,設定簡單,任務難度均勻時夠用;原始論文出處需確認),或各家一鍵優化(OpenAI Optimize [4]、Vertex AI Prompt Optimizer [5])。
6. 用 Skill 固化 prompt 優化流程
當你發現某一類任務的「評估加改寫」流程會重複出現,就該把它固化下來,而不是每次從頭調。概念是把「給 prompt 打分並改寫」封裝成一個 Skill,可重複叫用、可版本控管、可分享。 生態中已有現成的 prompt 優化能力可借力:OpenAI 把 Optimize 做成 Playground 內建按鈕 [4];Claude Code、Codex、Antigravity、Copilot CLI 這類 CLI 代理則可以把優化流程寫成 Skill(.claude/skills/ 下的 SKILL.md,搭配 references 與 scripts),讓「讀入 prompt 加 eval 集、跑評估、輸出改寫建議」變成一個指令就能觸發的工具。社群也有 prompt-optimizer 類 skill 流通(確切名稱與來源依你裝的 plugin 而定,使用前依 03-3 供應鏈原則 檢查)。
固化的好處很直接:相同任務類型不需每次重調,套 skill 就拿到改寫建議;流程進版控後,團隊成員拿到的是同一套優化邏輯,輸出可重現。Skill 的完整建立與設定方式(frontmatter、references、scripts、各家差異)見 04-4 Skill 單元,這裡你只需要記住一件事:重複三次以上的 prompt 調校流程,就是該封裝成 Skill 的訊號。
7. 概念階梯定位:prompt 是四層工程的最底層
prompt engineering 是 AI 工程的最底層,但不是全部。你寫的每一句 prompt,都在一個更大的脈絡設計裡運作。把工程心智模型攤成四層,由下到上:工具對照
同一套 prompt 概念,在各家工具落到哪裡(截至 2026-05,快變動項已標來源):| 概念 | Anthropic Claude(主範本) | OpenAI | GitHub Copilot | Cursor | |
|---|---|---|---|---|---|
| System prompt 位置 | system 參數(API);Claude.ai 的 Project Instructions;CLAUDE.md 與 .claude/rules/(屬 Claude Code) | system/developer role(API);Custom GPT 的 Instructions | systemInstruction(Gemini API [6]);Gems 的 instructions(需 Gemini Advanced [7]) | .github/copilot-instructions.md(repo 級);GitHub.com 個人設定的 personal instructions [8] | User Rules(設定 GUI,全域);Project Rules(.cursor/rules/*.mdc,進版控 [9]) |
| 結構化分隔 | XML 標籤(官方推薦,遵從度高 [1]) | Markdown 段落或 XML 皆可 | Markdown 或 XML | Markdown(instructions 檔) | Markdown(.mdc 含 frontmatter) |
| Few-Shot 寫法 | user/assistant 輪流示範,或 system 內附範例段落 | 同左,user/assistant turns | 同左 | 在 instructions 檔內附範例 | 在 rule 檔內附範例 |
| 內建 prompt 自動優化 | 無原生 APO;可串 DSPy [3]、OPRO [2] | Playground 的 Optimize 與 Generate(免費 [4]) | Vertex AI Prompt Optimizer(GA,資料驅動 [5]) | 需確認原始出處 | 需確認原始出處 |
| prompt 流程封裝 | Claude Code Skill(.claude/skills/,見 04-4) | Custom GPTs/GPT Actions | Gems [7] | Copilot prompt files(*.prompt.md,需確認版本) | .cursor/rules/ 規則檔 |
跨工具收斂的方向各家的 system prompt 機制正往
AGENTS.md 這個跨工具標準收斂(見 02-1 與 04-2)。各廠都有對應 Claude Code 的 CLI agent:OpenAI 的 Codex、Google 的 Antigravity(CLI 以 Go 寫成)、GitHub 的 Copilot CLI;Copilot 已把 AGENTS.md 納入指令層級 [8],Codex、Antigravity 也支援。實務上一個按 AGENTS.md 與 skill 慣例寫的優化流程,可跨這些 CLI agent 重用,遷移主要是換位置(截至 2026-06)。學會在 Claude 把 prompt 寫成規格,遷到別家核心方法不變。動手做
- 改寫你最常丟的任務:挑一個你每週都丟給 AI 的任務(寫 commit、整理會議記錄、改 SQL),把現在的 prompt 攤開,對照第 2 節五元件,補齊缺的(多半缺成功判準與輸出格式骨架)。跑前後各三次,比較輸出的一致性,不是比哪次最好,是比「穩不穩」。
- 加兩個 Few-Shot 範例:為同一任務補 2 個示範輸入輸出,一個正常、一個邊界(該回「無法判斷」的那種)。觀察模型在風格一致性與格式遵守上的變化,特別注意它遇到沒示範過的輸入時,會不會自己亂補。
- 做一次 XML 隔離:如果你的任務要餵進外部文字(貼網頁、貼別人的訊息),把指令和資料用 XML 標籤分開,故意在資料裡塞一句假指令,看隔離前後模型會不會上當。
常見誤區
自我檢核
問自己這幾題
- 你最近丟給 AI 的一個任務,它的 prompt 包含五元件裡的哪幾個?缺的那幾個,是不是正好對應到你覺得輸出不穩的地方?
- 如果你要讓同事接手你的 prompt,在相同任務上得到一致輸出,目前的 prompt 夠精確嗎?還是有一半靠你腦中的默契?
- 你的 Few-Shot 範例,彼此格式一致嗎?有沒有涵蓋「該回無法判斷」的邊界案例?
- 你最近一次對輸出不滿意,真的是 prompt 措辭問題,還是 context 塞太多、或任務本該拆成多步?
- 哪一類 prompt 調校你已經重複做了三次以上?那就是該封裝成 Skill 的訊號。
來源與延伸閱讀
- [1] Anthropic, “Use XML tags to structure your prompts,” Claude Docs. Accessed: 2026-05. [Online]. Available: https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/use-xml-tags
- [2] C. Yang, et al., “Large Language Models as Optimizers,” arXiv:2309.03409, 2023. [Online]. Available: https://arxiv.org/abs/2309.03409
- [3] O. Khattab, A. Singhvi, P. Maheshwari, Z. Zhang, et al., “DSPy: Compiling Declarative Language Model Calls into Self-Improving Pipelines,” arXiv:2310.03714, 2023. [Online]. Available: https://arxiv.org/abs/2310.03714
- [4] OpenAI, “Prompt management in Playground,” OpenAI Help Center. Accessed: 2026-05. [Online]. Available: https://help.openai.com/en/articles/9824968-prompt-management-in-playground
- [5] Google Cloud, “Data-driven prompt optimizer,” Generative AI on Vertex AI Documentation. Accessed: 2026-05. [Online]. Available: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/data-driven-optimizer
- [6] Google, “Gemini API: System instructions,” Gemini Cookbook. Accessed: 2026-05. [Online]. Available: https://github.com/google-gemini/cookbook/blob/main/quickstarts/System_instructions.ipynb
- [7] Google, “Gemini Gems.” Accessed: 2026-05. 需確認官方說明頁原始出處(功能與訂閱條件依 Gemini Advanced 方案,截至 2026-05)。
- [8] GitHub, “Adding repository custom instructions for GitHub Copilot,” GitHub Docs. Accessed: 2026-05. [Online]. Available: https://docs.github.com/copilot/customizing-copilot/adding-custom-instructions-for-github-copilot
- [9] Cursor, “Rules,” Cursor Docs. Accessed: 2026-05. [Online]. Available: https://cursor.com/docs/rules
- [10] Anthropic, “Adaptive thinking,” Claude Docs. Accessed: 2026-05. [Online]. Available: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking
- [11] “GEPA: Reflective Prompt Evolution Can Outperform Reinforcement Learning,” arXiv:2507.19457, 2025(ICLR 2026 Oral). Accessed: 2026-06. [Online]. Available: https://arxiv.org/abs/2507.19457
- DSPy 框架文件(Stanford NLP,含 MIPROv2、GEPA optimizer):https://dspy.ai/(截至 2026-06)
- 延伸:本 Playbook 01-4 上下文工程、01-5 Workflow Engineering、01-6 Harness Engineering、04-4 Skill