不會讀心術
大型語言模型很強大,但可惜的是,它不會讀心術。
當我們想要什麼,就要盡量清楚地告訴它,不要讓模型猜我們心裡到底在想什麼。
猜得越少,結果越有可能接近我們的要求。
下面是六個簡單但常用的方法。
1. 撰寫清楚的說明
為了得到想要的回覆,需要提供真正重要的細節和上下文。否則,模型只能猜。
| 模糊的說法 | 更清楚的說法 |
|---|---|
| 如何在 Excel 中加入數字? | 如何在 Excel 中把一列美元金額相加,並把結果自動放在右側的「總計」欄? |
| 誰是總統? | 2021 年的美國總統是誰?美國總統選舉通常多久舉行一次? |
| 寫一個費波那契數列的方法 | 使用 Python 寫一個計算費波那契數列的方法,並用註解說明每個部分的作用。 |
| 寫一段會議記錄並摘要 | 寫一段虛構會議記錄,用 Markdown 列出發言者、要點和明確出現的待辦事項。 |
Prompt 不是越長越好。關鍵是:會影響結果的資訊有沒有說清楚。
2. 指定風格、讀者和角色
如果我們希望輸出有特定語氣,可以直接說。
指定風格
當我請你幫忙寫東西時,你的回答內容每一段至少包含一個笑話或俏皮話。
替我的同學張三寫一封感謝信,感謝在他的介紹下,我成功找到了一份工作。
同一封感謝信,寫成嚴肅公文或輕鬆聊天,讀起來會完全不同。與其等模型猜,不如把想要的風格直接寫出來。
當然,「每段一個笑話」只是一個很鮮明的示範。真正使用時,也可以寫成「真誠、自然,不要使用誇張的讚美」。
指定角色
如果任務需要一個明確視角,也可以指定角色:
你現在是一位「大學國文教授」,需要從國文課講解的角度回答我的問題。
解釋李白寫「天生我材必有用,千金散盡還復來」時,內心的情感變化和想表達的思想感情。
把角色和讀者放在一起
那如果面對同一個知識點,我們還希望十歲的孩子也能聽懂呢?
你現在是一位「獲得諾貝爾物理學獎的天體物理學家」,需要從天體物理科普的角度回答我的問題。
回答是給 10 歲的孩子看的,要讓他們能夠看懂,而且充滿想像力。
解釋黑洞的形成原理,以及黑洞的特性。
這裡同時寫清楚了回答視角、目標讀者和表達風格,比只寫「解釋一下黑洞」多了三層資訊。
角色描述的作用,是幫助模型理解視角、讀者和標準。它不會讓模型真的獲得某個頭銜,也不能證明答案一定專業。
與其說「你是世界上最厲害的專家」,不如把真正需要的判斷標準寫出來。
3. 用分隔符號區分不同內容
當 Prompt 裡同時有任務說明、原始材料和輸出格式時,可以使用三引號、Markdown 標題或 XML 標籤把它們分開。
請用一首短詩概括三引號中的文字。
"""
在蒼茫的大海上,狂風捲集著烏雲。海燕像黑色的閃電,在高傲地飛翔。
"""
也可以這樣寫:
<task>比較兩首與黃鶴樓有關的詩,並說明理由。</task>
<article>昔人已乘黃鶴去,此地空餘黃鶴樓……</article>
<article>故人西辭黃鶴樓,煙花三月下揚州……</article>
還可以直接使用欄位名稱,把摘要和標題分開:
我將為你提供一篇文章的摘要和標題。
請判斷標題能否準確概括摘要,同時要讓讀者看懂文章主題。
如果不符合這兩個標準,請提供 5 個備選標題。
摘要:一場持續性強降雨影響多個北方地區,降雨持續時間較長、影響範圍較廣,部分地區可能出現大暴雨。
標題:北方多地遭遇強降雨,部分地區需注意大暴雨
這裡的「摘要:」和「標題:」也是分隔符號。它們沒有使用特殊符號,卻仍然清楚告訴模型:哪一段是摘要,哪一段是標題。
對簡單任務來說,使用分隔符號前後可能看不出明顯差別。任務越複雜,材料越長,清楚的邊界就越重要。
分隔符號不會讓模型突然變聰明,它只是幫助我們把「指令是什麼、材料是什麼、格式是什麼」標示清楚。
4. 指定完成任務的步驟
許多任務本來就需要分幾步完成。把這些步驟寫出來,模型會更容易跟上我們的思路。
請按照下面的順序完成任務:
1. 用一句話概括三引號中的文字,前綴寫「摘要:」。
2. 把這句摘要翻譯成英文,前綴寫「翻譯:」。
"""
{{需要處理的文字}}
"""
需要注意,步驟不是越多越好。先寫真正影響結果的步驟,不要為了看起來專業,把簡單任務拆成幾十步。
5. 舉例說明
有時候,我們想要的風格或格式很難用一句規則講清楚。
這時可以直接提供範例。
你是「神奇動物命名器」,根據範例的風格替動物取名字。
動物:貓
名稱:暗夜特工
動物:狗
名稱:超能閃電
現在替「馬」取一個名字。
一到三個高品質範例,通常就能讓模型看出我們想要的對應關係。
但模型也會模仿範例裡的問題,所以範例不能只挑最理想的情況,還要涵蓋真實任務會遇到的邊界。
6. 指定輸出長度
我們可以用大約多少字、多少句話、多少段或多少個要點來限制輸出。
但這幾種要求,模型遵守起來並不完全相同。
我們繼續使用同一段材料,連續試三輪。為了方便對照,下面三個 Prompt 中的原文完全相同。
第一輪:大約 50 個字
使用大約 50 個字,概括三引號包裹的內容。
"""
在蒼茫的大海上,狂風捲集著烏雲。在烏雲和大海之間,海燕像黑色的閃電,在高傲地飛翔。
一會兒翅膀碰著波浪,一會兒像箭一般直衝烏雲。牠叫喊著,在叫喊聲裡充滿著對暴風雨的渴望。
"""
「大約 50 個字」看起來很明確,但模型是按照 Token 生成文字,不是每寫一個字就同步數一次字元。結果可能接近 50 個字,也可能明顯超出。
第二輪:兩個段落
使用兩個段落,概括三引號包裹的內容。
"""
在蒼茫的大海上,狂風捲集著烏雲。在烏雲和大海之間,海燕像黑色的閃電,在高傲地飛翔。
一會兒翅膀碰著波浪,一會兒像箭一般直衝烏雲。牠叫喊著,在叫喊聲裡充滿著對暴風雨的渴望。
"""
這一次,結果是不是有兩個段落,一眼就能看出來。和精確字數相比,段落數通常更容易觀察。
第三輪:三個要點
使用三個要點,概括三引號包裹的內容。
"""
在蒼茫的大海上,狂風捲集著烏雲。在烏雲和大海之間,海燕像黑色的閃電,在高傲地飛翔。
一會兒翅膀碰著波浪,一會兒像箭一般直衝烏雲。牠叫喊著,在叫喊聲裡充滿著對暴風雨的渴望。
"""
要點數也很直觀,我們可以立刻檢查結果是不是三條。
這三輪處理的是同一段文字,改變的只有長度表達方式。可以看到,「大約 50 個字」控制的是字元範圍,「兩個段落」和「三個要點」控制的是結構,它們不是同一種要求。
段落數和要點數通常更容易觀察,但也不能因此省略檢查。如果業務必須嚴格符合字元數、段落數或要點數,應在模型生成後用程式或編輯流程再次驗證。
最後再看一遍
這六個技巧並不是每條 Prompt 都必須全部使用。
簡單任務,直接說清楚就夠了。複雜任務,再逐步增加上下文、分隔符號、步驟和範例。
真正的目標不是把 Prompt 寫得很長,而是讓模型少猜一點,讓我們更容易檢查結果。
上一章: 機率、取樣與 Temperature
下一章: 結構化 Prompt 範本與技巧