上一篇那句反例「幫我整理重點,寫專業一點」,問題不只在模糊。更麻煩的是所有東西都擠在同一句裡:要做什麼、給誰看、不能做什麼、要交出什麼形狀,全部黏成一團。
寫 Prompt 其實比較像填一張工作委託單。委託單好用的原因很單純:欄位已經分好了。工作項目、使用對象、限制條件、交付格式,各有各的格子。你不必把它們壓成一句話,對方也不必猜哪一句是要求、哪一句只是背景。
複雜一點的時候,可以用 XML 標籤把欄位標出來:
<task>整理重點</task>
<context>讀者是大學生</context>
<constraints>300 字內、不新增原文沒有的資訊</constraints>
<input>原始文章</input>
<output_format>三段摘要,每段附原文依據</output_format>
標籤的作用很單純:讓規則、資料和你的輸入不會黏成一團。Anthropic 的官方文件也建議在複雜 Prompt 中用 XML 區隔不同類型的內容,並且特別說明沒有哪一組標籤經過特別訓練、比較靈驗。真正起作用的是名稱貼合它包住的內容,而且整份 Prompt 前後用同一套命名。
欄位分好之後,還有順序的問題。這就回到 Day 03:內容短的時候怎麼排都還好;一旦 <input> 裝的是一整篇長文,就該把它往後挪,讓任務與限制留在開頭、具體要求貼在文件之後,別讓關鍵條件被長文件夾在中間。格子分好了,東西還是要擺在找得到的位置。
範例是另一格欄位,教的是「照哪個樣子做」。Zero-shot 不給範例;One-shot 給一個示範;Few-shot 給數個示範,讓模型抓到語氣、格式與判斷標準。Brown 等人的 GPT-3 研究之所以是里程碑,關鍵在於這些示範直接寫在 Prompt 裡,不必重新訓練、也不更新任何參數,模型就能接手新任務。既然範例也是一種內容,它同樣該有自己的格子,裝進 <examples> 裡,而不是散落在指令中間。
但範例也像字帖:字帖寫歪,照著臨摹只會越寫越歪。
最後一件事要講清楚。結構化 Prompt 提升的是可讀性與一致性,它不是安全邊界。標籤終究只是文字,使用者貼進來的內容如果自己也含有 </input>,隔板當場就被撐開。惡意輸入、權限控管與資料隔離,得靠系統本身處理——也就是 Day 01 那個問題:你讓 Claude 看到什麼,又讓它能動到什麼。
所以我現在寫長一點的 Prompt,會先花一分鐘決定這幾格各要裝什麼、哪一格排在前面,再回頭琢磨措辭。