Netflix 機器學習科學家的提示詞優化經驗分享 原創 精華
編者按: 如何充分發揮大模型的潛能,用好大模型,關鍵在于如何優化向它們發送的提示詞(prompt),是為提示詞工程(prompt engineering)。
本文Netflix 機器學習科學家Cameron R. Wolfe的提示詞優化經驗分享,闡述了目前提示詞的主要構成要素,介紹了與提示詞相關的上下文窗口相關信息,并總結了一些行之有效的優化策略,如實事求是,實證為本、先從簡單著手、若無必要,盡量簡單明了、使用示例等,這些策略應能為在實踐中優化提示詞提供參考思路。
作者 | Cameron R. Wolfe, Ph.D.
編譯 | 岳揚
本文將介紹一些提示詞工程(prompt engineering)的基本概念,以及如何應用這些概念來提升大語言模型(LLM)的性能。
1. LLM 的界面極其簡便易用
LLMs 如此受歡迎的主要原因之一是它們采用了 text-to-text 的輸入輸出界面(譯者注:用戶只需要在Web或客戶端界面上輸入文本提示詞,模型就能根據輸入的文本生成相應的文本輸出。),使得使用起來非常簡單直觀。在之前,使用深度學習解決一項任務至少需要我們通過一些數據對模型進行微調,以教會模型如何解決這項任務。此外,大多數此類模型都是專門解決單一任務的專家模型。由于 LLMs 具有一種新出現的上下文學習(in-context learning)能力,我們可以通過文本提示詞解決各種問題。以往復雜的問題解決過程現在已經被簡化為通過自然語言描述解決問題!
“prompt工程作為一個相對新興的學科領域,其目標是開發和改進優化提示詞(prompt),使大模型(LMs)能基于這些提示詞充分發揮潛力,高效地被用于各項應用方向和研究領域。” ------ 摘自文獻 [1]
2. 什么是提示詞工程?
得益于大語言模型基于文本對話的簡單交互界面,使用它們已不再是專業人士(數據科學家或機器學習工程師(MLE))的"私房菜"。普通大眾只要掌握一定的語言能力,就可以直接與這些模型對話交互,借助它們的能力解決較為復雜的問題。不過,在使用 LLM 解決問題時,我們得到的結果很大程度上取決于提供給模型的文本提示詞。由于這個原因,提示詞工程(通過大量的實證試驗和反復優化,指導如何為特定任務設計高質量的prompt)變得極其受歡迎和具有影響力,行業目前已經積累了諸多有效的技術手段和優秀的實踐方法。
3. 提示詞的主要構成要素
為大語言模型設計 prompt,有多種不同的方法。但是,大多數 prompt 設計策略通常會包含以下幾個共同的組成要素:
- 要處理的輸入數據(Input Data): 大模型需要處理的輸入數據,比如待翻譯或分類的句子、待總結的文檔等。
- 具體的示例(Exemplars):在 prompt 中介紹輸入數據和期望輸出之間的對應關系,明確地指導模型產生所需的輸出形式,提高任務完成的準確性,使得大模型完成預期的文本輸入到模型輸出的映射轉換。
- 指令型文本(Instruction):使用自然語言文字對期望的模型輸出的性質、格式等進行描述和指導。
- 結構化和格式化的元素或標簽(Indicators):通過標簽、格式化元素( tags、formatting elements)等方式在 prompt 中引入一些人工結構,使其不只是簡單的自然語言文本,而是帶有一些額外的語義信息和視覺提示,從而指導模型的輸出更契合要求。
- 上下文(Context):prompt 中提供給大模型的一些背景信息、情況說明、限制條件等內容,有助于模型更好地把握語境,理解 prompt 的全部含義,從而生成更準確、更符合預期的輸出結果。
在下圖中展示了一個真實的 prompt 實例,它將上述所有提示詞的主要構成要素都整合到了一個句子分類任務的提示詞中。

4. 上下文窗口(The context window)
在預訓練階段,模型有一個固定的最大輸入長度,如果輸入的內容超過這個長度,模型的輸出就可能失常。這個預訓練時設定的序列長度限制,就決定了模型實際運行時能夠一次性處理的最大文本長度,被稱為上下文窗口(The context window)。如果文本序列的長度大大超過了這一預設的上下文長度,那么模型的行為就可能無法預測,并產生錯誤的輸出。不過,有一些方法可以用來擴展模型的上下文窗口,例如 Self-Extend [2] 或位置插值法(positional interpolation)[3]。

近期關于 LLMs 的最新研究強調了創建長上下文窗口(long context windows)的重要性,從而使得模型能夠在每個提示詞(prompt)中處理更多的信息(例如,更多的示例對(Exemplars)或更多的上下文內容)。然而,并非所有的 LLM 都能完美地利用上下文 !通常通過 “大海撈針測試”(needle in the haystack test) [4] 來評估 LLM 利用長上下文窗口信息的能力,這項測試具體包括:
- 在上下文中嵌入一個隨機 fact(譯者注:獨立存在、真實無誤但與上下文無關的陳述性信息,可以檢驗模型在真實應用場景中對關鍵信息的識別和提取能力。)。
- 要求模型檢索這個 fact。
- 反復地改變上下文長度以及 fact 在上下文中的位置,并在各種上下文配置下反復測試。
這項測試會生成如下圖所示的測試結果(摘自文獻 [4]),我們可以很容易地發現上下文窗口的不足之處。

5. 我的提示詞(prompt)工程策略
針對不同的大型語言模型,提示詞工程的具體細節會有很大區別。但是,有一些通用的原則是非常有用的,可以用來指導如何設計提示詞:
- 實事求是,實證為本:提示詞工程的首要步驟是建立一個可靠的評估機制(例如通過測試用例評估、人工評估或讓大模型進行評估),從而輕松地評估或測量提示詞工程中 prompt 的優化效果。
- 先從簡單著手:剛開始接觸提示詞工程時,不應當直接嘗試 “chain-of-thought prompt” 這種復雜技術,而應先從最簡單的形式著手,然后逐步添加復雜元素,同時根據提示詞的性能變化(見上文)來判斷是否有必要繼續增加提示詞的復雜度。
- 追求明確具體而直接:盡可能消除 prompt 中的任何歧義,盡量使用簡潔、明確、直接和具體的自然語言來描述期望大模型輸出的內容。
- 使用一些具體的示例(exemplars):如果很難具體描述期望的理想輸出,可以嘗試在提示詞中添加一些具體的示例,通過具體實例消除歧義,明確期望輸出的形式。
- 若無必要,盡量簡單明了:有些情況下確實需要使用很多復雜的 Prompt 策略(如解決多步推理問題),但我們在使用這些方法之前應三思而后行。要根據經驗,通過判斷實踐效果和采用評估方法來確定是否必須引入復雜提示詞策略。
綜上所述,本文介紹的提示詞工程策略主要是:i) 先加大投入構建一個非常好的評估框架 ;ii) 從簡單的 Prompt 形式入手 ;iii) 根據實際需求,逐步適度引入復雜提示詞策略,以便盡可能達到理想的性能水平。

Thanks for reading!
Cameron R. Wolfe, Ph.D.
I’m a researcher with an interest in deep learning and a passion for explaining scientific concepts to others.
END
參考資料
[1]https://www.promptingguide.ai/zh
[2]https://arxiv.org/abs/2401.01325
[3]https://arxiv.org/abs/2306.15595
[4]https://github.com/gkamradt/LLMTest_NeedleInAHaystack
本文經原作者授權,由 Baihai IDP 編譯。如需轉載譯文,請聯系獲取授權。
原文鏈接:

















