AI · 提示詞寫作
提示詞工程入門:怎麼寫好 AI 提示詞
簡答
提示詞工程(prompt engineering)就是把指令寫清楚,讓語言模型第一次就給出你要的結果,之後每次也都穩定。好的提示詞會說明任務、提供必要的背景與輸入資料、指出輸出給誰看、示範格式,並設下限制。遇到棘手的情況再加一兩個範例,最後用幾筆真實輸入測試。
為什麼提示詞的寫法很重要
語言模型不知道你的處境,它只看得到你送出的文字。提示詞含糊時,模型會用最典型的答案填補空白,通常就是千篇一律、太長,或是對錯了讀者。提示詞工程的工作,大部分就是消除猜測。
有個好用的檢驗方法:一位從沒見過你的聰明新同事,只看你這則訊息,能把事情做好嗎?如果他得先問你三個問題,模型也需要這三個問題的答案。OpenAI、Anthropic 和 Google 的官方指南,用不同的說法給了相同的核心建議:清楚、具體,提供背景,給範例,說明你要的格式。
好提示詞的六個要素
不是每個提示詞都需要這六項,但對照這份清單,就能修好大多數寫得不好的提示詞。
| 要素 | 回答的問題 | 範例片段 |
|---|---|---|
| 任務 | 模型要做什麼? | 請回覆這封客戶來信。 |
| 背景 | 它需要哪些背景資訊? | 我們賣手工陶瓷馬克杯,出貨需要 5 到 7 天。 |
| 輸入 | 它要處理什麼素材? | 客戶的來信,清楚地分隔開來。 |
| 讀者與語氣 | 誰會讀這份輸出? | 一位第一次購物、感到不滿的客人。語氣友善,不要過度道歉。 |
| 格式 | 輸出應該是什麼形式? | 三小段,120 字以內,不要主旨。 |
| 限制 | 必須做到或避免什麼? | 不要承諾退款。提供物流追蹤連結。 |
較長的輸入素材,請放在清楚的標記之間,例如 XML 風格的標籤或三個引號,讓模型分得出哪些是你的指令,哪些是要處理的文字。這也能降低一種風險:輸入內容(例如貼上的網頁)裡藏著的指令,被誤當成命令執行。
改寫前後的對照
這是一個典型寫得不好的提示詞:
Summarize this article.模型會寫出摘要,但長度是多少、給誰看、什麼形式?下面是補上這些空白之後的同一個請求:
You are helping a busy product manager decide whether to read a research article.
Summarize the article below for that reader.
- Start with one sentence: the main finding.
- Then 3 bullet points: method, key number, main limitation.
- Use plain English. Explain any technical term in a few words.
- Under 100 words in total.
- If the article does not state a limitation, write "No limitation stated".
<article>
{paste the article here}
</article>各個部分的作用:
- 第一行設定了讀者與目的。模型現在知道摘要為何而寫,所以懂得取捨。
- 項目符號的結構固定了格式,每份摘要看起來都一樣,也方便比較。
- 字數限制避免模型灌水。
- 針對「沒有提到限制」的規則,告訴模型在邊緣情況該怎麼辦,而不是讓它編造一個。
- 標籤把文章與指令隔開。
文字說不清楚時,就給範例
有些要求很難用文字描述,卻很容易示範:說話的語氣、標記的分類方式、特定的輸出風格。加入幾個示範範例,稱為少樣本提示(few-shot prompting)。一個範例(one-shot)往往就有很大的幫助,兩到五個各不相同的範例,通常就能涵蓋主要情況。
Classify each support message as BILLING, SHIPPING, PRODUCT or OTHER.
Reply with the label only.
Message: I was charged twice for order 5521.
Label: BILLING
Message: The handle on my mug cracked after one week.
Label: PRODUCT
Message: Do you have a shop in Osaka?
Label: OTHER
Message: {new message}
Label:讓範例彼此之間有差異。如果每個範例都又短又有禮貌,模型碰到又長又憤怒的訊息,可能就處理不好。也要確認範例與規則一致:模型對範例的模仿,比對文字指令的遵循更強烈。
針對特定情況的技巧
- 先要步驟,再要答案。數學、邏輯或多部分的決策,請模型先逐步推演,再給最終答案,可以提高準確度,這稱為思維鏈提示(chain-of-thought prompting)。許多現行的模型會在內部這樣做(常稱為推理或思考模式),所以只要求「仔細作答」可能就夠了。
- 拆分大任務。與其用一個提示詞要求「研究、列大綱再寫報告」,不如分成三個提示詞,逐一檢查每個輸出,這稱為提示詞串接(prompt chaining)。
- 角色設定要有資訊量才加。「你是越南的稅務會計師」會改變用詞與預設假設,「你是世界級天才」則什麼都沒增加。
- 說明要做什麼,而不只是要避免什麼。「用短句寫」比「不要囉嗦」有效。
- 允許說「我不知道」。告訴模型可以回答資料不足,能減少捏造的事實,雖然無法完全消除。
- 若輸出要交給程式讀取,就要求機器可讀的格式,例如帶有具名欄位的 JSON。多數 API 也能直接強制套用 JSON schema。
像測試程式碼一樣測試提示詞
在一個範例上有效的提示詞,可能在下一個就失敗。如果這個提示詞會重複使用,或要給別人用,就要測試:
- 寫下好的輸出應有的樣子:長度、格式、必須正確的事實。
- 收集 10 到 20 筆真實輸入,包含困難的:極短、極長、離題、另一種語言。
- 對全部輸入執行提示詞,並閱讀每一份輸出。
- 一次只改一個地方,然後整組重跑,才知道是哪項修改有幫助。
- 把最終的提示詞和測試集放在一起。當你換模型,或模型更新時,重新跑一遍測試集。
最後一步很重要,因為同一個提示詞在不同模型、甚至同一模型的新版本上,表現可能不一樣。模型開發商的提示詞工程指南會隨時間改變,也是這個原因。
常見的錯誤
- 一個提示詞塞了太多目標。十條同等重要的規則,會有一部分被忽略。把最重要的規則放前面,清單保持簡短。
- 自相矛盾,例如「要詳細」又要「50 字以內」。模型會滿足其中一項,違反另一項。
- 靠大寫字母或威脅語氣(「你必須」)而不是清楚的理由。簡短說明規則為何存在,通常效果更好。
- 沒有把輸入與指令分開,結果模型把你文件的一部分當成命令。
- 盲目相信輸出中的事實。寫得再好的提示詞,仍會產生信心十足的錯誤。人名、數字、引述和連結都要查證。
常見問題
有了更新的 AI 模型,還需要提示詞工程嗎?
需要的小技巧變少了,但清楚的任務、背景、格式與測試仍然帶來很大的差別。新模型更貼近字面地遵循指令,所以措辭精確甚至更重要。
系統提示詞和使用者提示詞有什麼不同?
系統提示詞(有些 API 稱為開發者指令)為整段對話設定規則與行為,使用者提示詞則是這一輪的請求。在應用程式中,系統提示詞通常由開發者撰寫。
提示詞要用英文寫嗎?
多數大型模型在許多語言上都表現良好。複雜的指令用英文可能稍微更可靠,但用輸出語言寫指令,往往能得到更自然的結果。請針對你的任務兩種都測試看看。
提示詞應該寫多長?
長到足以消除猜測就好,不必更長。簡單的任務,一行提示詞就夠了;產品中重複使用的提示詞,可能長達一頁甚至更多。
提示詞能阻止 AI 幻覺嗎?
沒有任何提示詞能完全消除幻覺。提供原文、要求模型引用原文,並允許它回答「文中沒有這個資訊」,都能減少捏造的事實。