微軟官方親自出教程,拿捏「Prompt工程」高級玩法
幾個月來,ChatGPT、GPT-4 等大模型陸續發布。這些模型表現出了強大的涌現能力,但模型生成的結果是隨機的,時好時壞,部分原因與 Prompt 的設計密切相關。
很多人將 Prompt 比喻為大模型的咒語,在引導模型生成內容方面影響很大,如何選擇 Prompt 成了每個 AI 研究者關注的問題。最近微軟官方出了一份教程,該教程介紹了 Prompt 設計和工程中的一些高級玩法,涵蓋系統消息、少樣本學習、非聊天場景等內容。
每部分內容都有技術介紹和示例展示,下面我們看看具體內容有哪些。
關于 Prompt,你應該了解這些
系統消息
系統消息包含在 Prompt 的開頭,用于為模型提供上下文、說明或與用例相關的其他信息。用戶可以通過系統消息描述模型應該回答什么、不應該回答什么,以及定義模型回復的格式。
下圖示例展示了系統消息和模型生成的回復:
通常,系統消息還可以是這樣的:
- 上表中 Assistant 是一個由 OpenAI 訓練的大語言模型。
- Assistant 是一個智能聊天機器人,旨在幫助用戶回答問題。要求模型只能使用給定的上下文來回答問題,如果不確定答案,你可以說「我不知道」。
- Assistant 是一個智能聊天機器人,例如其能幫助用戶回答稅務相關問題。
- 又比如你是一個 Assistant,旨在從文本中提取實體。用戶將粘貼一串文本,你將以 JSON 對象的形式回應你從文本中提取的實體。
這是輸出格式的示例:
{
"name": "",
"company": "",
"phone_number": ""
}
上面就是關于系統消息的介紹,不過一個重要的細節是,即使是設計良好的系統消息,模型仍有可能生成與系統消息指令相矛盾的錯誤回復。
小樣本學習
讓語言模型適應新任務的一種常見方法是使用小樣本學習。小樣本學習提供了一組訓練樣本作為 Prompt 的一部分,以便為模型提供額外的上下文信息。
用戶和 Assistant 之間的一系列信息(以新的 Prompt 格式編寫)可以作為小樣本學習的示例。這些示例可用于引導模型以某種方式做出響應、模擬特定行為并為常見問題提供種子答案。
Prompt 的基本結構。
非對話場景
雖然當前大模型的主要應用場景是對話生成場景,但也可以用在非對話場景。例如,對于情感分析場景,你可能會使用以下 Prompt:
使用明確的指令
一般來講,信息在 Prompt 中出現的順序很重要。由于 GPT 類模型是以特定方式構建的,該構建過程定義了模型對輸入的處理方式。研究表明,在 Prompt 開始時告訴模型你希望它執行的任務,然后再共享其他上下文信息或示例,可以幫助模型產生更高質量的輸出。
最后重復一遍指令
模型容易受到最新偏差的影響,在這種情況下,末尾 Prompt 信息可能比開頭 Prompt 信息對輸出的影響更大。因此,在 Prompt 末尾重復指令值得一試。
對輸出的操作
這種情況是指在 Prompt 末尾包含幾個單詞或短語以獲得符合所需形式的模型響應。例如,使用諸如「Here’s a bulleted list of key points:\n- 」之類的 Prompt 可以幫助確保輸出格式為項目符號列表。
添加語法
為 Prompt 添加語法,例如標點符號、標題等,這樣做使輸出更容易解析。
下面示例中,不同的信息源或 step 之間添加了分隔符(在本例中為 ---)。這種操作允許使用 --- 作為生成的停止條件。此外,部分標題或特殊變量以大寫形式出現以進行區分。
把任務分解
如果將任務分解為更小的 step,大型語言模型 (LLM) 通常會表現得更好。
注意,這里使用了語法來區分各個部分并對輸出進行初始化。在這個簡單的例子中,將任務從一個 step 分解為兩個 step 結果并不很明顯,但是當試圖對包含許多事實聲明的大塊文本進行此操作時,將任務分解會產生顯著的差異。
思維鏈提示
這是分解任務技術的一種變體。在這種方法中,不是將任務拆分為更小的 step,而是指示模型響應逐步進行并呈現所有涉及的 step。這樣做可以減少結果不準確,并使評估模型響應更加容易。
提供真實上下文
在該方法下,本文建議提供給模型真實數據。一般來講,原始數據越接近最終答案,模型需要做的工作就越少,這意味著模型出錯的機會就越少。在下面示例中,系統消息提供了最新的文章,然后要求模型給出一些早期客戶,模型準確的給出了答案。
除此以外,微軟在這份指南中還介紹了關于 Prompt 其他技巧,大家可以前去原文查看,獲取更多信息。