Close-up of hands typing on a laptop keyboard

大部分人寫提示(prompt)的方式,就像發訊息給朋友一樣——隨口一問,沒有任何背景資訊,然後對得到的籠統答案感到失望。普通AI回答與真正有用的答案之間的差距,通常不在於模型本身,而在於提示。少數幾個技巧——每一個都有公開研究支持,或是由開發這些模型的實驗室親自記錄下來——能可靠地改變輸出內容的具體程度、準確度和格式。以下就是這些技巧的來源,以及它們在實際操作中的樣子。

Close-up of hands typing on a laptop keyboard
一個寫得好的提示,本身就是作品的草稿,而不是事後才想到的補充。圖片來源:Burst,via Unsplash。

給模型一個角色和任務,而不只是一個問題

Anthropic官方為Claude撰寫的文件建議,把角色描述放在系統提示(system prompt)裡,而不是埋在第一句對話中——清楚告訴模型它是誰、可以做什麼、以及預設該用什麼格式輸出。OpenAI的提示工程指引也提出同樣的觀點:一個具體的角色設定,能在模型寫下第一個字之前,先收窄它對讀者和語氣的假設。

之前: 「寫一篇關於冬天去日本打包行李的文章。」
結果:一篇清單式的答案——保暖衣、雨傘、轉接頭——讀起來跟網上其他打包文章一模一樣。

之後: 「你是一位旅行裝備編輯,曾經為阿爾卑斯山和北海道之旅測試過各種防寒分層系統。請為一個從未在雪地打包過行李的人,寫一份為期10天、2月前往東京和北海道的行李清單。並指出大家最常忘記帶的兩件物品。」
結果:具體而不偏向任何品牌的建議(例如整天步行用的發熱鞋墊、在防風外殼下加一層可摺疊羽絨,而不是一件厚重大衣),以及真正的「常被忘記的物品」提醒——因為這個角色設定,限制了什麼才算是一個完整的答案。

用例子示範,而不是描述規則

這就是「少樣本提示」(few-shot prompting),由OpenAI在2020年發表的論文《Language Models are Few-Shot Learners》(Brown等,arXiv:2005.14165)正式提出,也就是推出GPT-3的那篇研究。論文的核心發現是:在提示中加入少量「輸入—輸出」範例——完全不需要重新訓練模型——就能讓模型推斷出其中的模式,並應用到新的情況,有時甚至能媲美專門為該任務微調過的模型。

之前: 「把這段文字改寫成一句吸引人的Instagram標題:我們去了清邁的夜市,還試了芒果糯米飯。」
結果:內容籠統,文字略嫌生硬。

之後: 先給兩個例子——
「輸入:我們在台北象山看日落。輸出:101的view,零後悔。🌇
輸入:我們吃路邊小籠包吃到走不動。輸出:為風景而來,為小籠包留下。🥟
輸入:我們去了清邁的夜市,還試了芒果糯米飯。輸出:」
結果:模型現在會配合你的節奏、長度和用表情符號的習慣,而不是用它自己預設的風格——因為它是在對照你給的例子來配對模式,而不是憑空猜測什麼叫「Instagram語氣」。

先讓它推理,再給答案

「思維鏈提示」(chain-of-thought prompting)出自Google Brain在2022年發表的論文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》(Wei等,arXiv:2201.11903,後來發表於NeurIPS 2022)。這個技巧是在提示的範例中,加入完整的推理步驟。論文指出,一個包含8個思維鏈範例的提示,把一個5400億參數模型在GSM8K數學應用題基準測試上的準確率,從約18%推高到57%。後來Kojima等人的研究發現更簡單的做法:根本不需要範例——只需在提示後面加一句「讓我們一步一步來想」(Let's think step by step),這種「零樣本思維鏈」就能在推理任務上帶來顯著提升。

之前: 「我在里斯本有3天時間,扣除機票後預算600美元,想安排一天的近郊一日遊,應該怎麼安排?」
結果:一個聽起來合理,但沒有實際驗算過的計劃,可能根本不符合預算。

之後: 加上一句:「請一步一步思考:先把預算分配到住宿、餐飲、一日遊和應急金額上,並列出計算過程,再根據剩下的金額安排行程。」
結果:模型會先列出運算過程,然後才給出計劃,這樣就更容易發現預算根本算不攏的問題——而且得出的行程安排,也會更貼近實際數字,而不是把預算晾在一邊。

要求具體的結構,而不只是「排版好看」

如果你需要的是能直接解析、或貼進試算表的輸出,模糊的格式要求是行不通的。OpenAI在2024年為其API新增的Structured Outputs功能,讓開發者可以提供一個精確的JSON結構(schema),要求模型的回應必須完全符合——這是舊版「JSON模式」的更嚴格升級版,因為JSON模式只保證輸出是合法的JSON,卻不保證格式正確。在Claude方面,Anthropic記錄的做法則不同,但解決的是同一個問題:把指示和範例包在類似XML的標籤裡,並預先填寫模型回覆的開頭,例如直接以 { ,或以像 <itinerary>這樣的標籤開頭)它就會順著這個格式繼續寫下去,而不會寫成一般段落。

之前: 「給我比較一下曼谷三間青年旅館。」
結果:三段文字,你還要自己手動整理成表格。

之後: 「請以JSON陣列(array)格式,回傳曼谷三間青年旅館的比較。每個物件必須剛好包含以下欄位:name、neighborhood、price_per_night_usd、nearest_bts_station、best_for。只需回傳JSON,不要任何說明文字。」
結果:輸出可以直接貼進程式碼或試算表,完全不用再整理。

把這些技巧疊加起來用

這些技巧是會疊加的。一個真正有效的提示,往往會同時用上全部四種:一個角色設定(「你是一位簽證顧問」)、幾個你想要的答案格式範例、一個要求先推理再下結論的指示,以及一個明確的輸出結構。這一切都不需要付費工具,也不需要上什麼提示工程課程——只需要把提示本身當成作品的第一份草稿,而不是在拿到真正答案之前,隨手打幾個字的前奏。