原文章地址:https://platform.openai.com/docs/guides/gpt-best-practices/strategy-test-changes-systematically
本指南分享了從GPT中獲得更好結果的戰略和策略,這里描述的方法有時可以結合起來使用,以獲得更大的效果,我們鼓勵大家通過實驗來找到最適合自己的方法,
這里演示的一些例子目前只適用于我們能力最強的模型,gpt-4,如果你還沒有機會使用gpt-4,可以考慮加入等待名單,一般來說,如果你發現一個GPT模型在某項任務中失敗了,而有一個能力更強的模型可用,通常值得用能力更強的模型再試一次,
獲得更好結果的六種策略
寫清楚說明
GPT不能讀懂你的想法,如果產出太長,要求簡短的答復,如果產出太簡單,就要求專家級的寫作,如果你不喜歡這種格式,就展示你希望看到的格式,GPT越是不需要猜測你想要什么,你就越有可能得到它,
方法:
- 在你的詢問中包括細節,以獲得更多相關的答案
- 要求模型扮演一個角色
- 使用分隔符來清楚地表明輸入的不同部分
- 具體說明完成一項任務所需的步驟
- 提供例子
- 指定所需的輸出長度
提供參考文本
GPT可以自信地編造虛假的答案,特別是當被問及深奧的話題或參考和URL時,就像一張筆記可以幫助學生在考試中做得更好一樣,為GPT提供參考文本可以幫助他們在回答問題時減少捏造,
方法:
- 指導模型使用參考文本進行回答
- 指導模型使用參考文本中的引文進行回答
將復雜的任務拆分為更簡單的子任務
正如在軟體工程中,將一個復雜的系統分解成一系列的模塊化組件是一個很好的做法,提交給GPT的任務也是如此,復雜的任務往往比簡單的任務有更高的錯誤率,此外,復雜的任務通常可以被重新定義為較簡單的任務的作業流程,其中早期任務的輸出被用來構建后面任務的輸入,
方法:
- 使用意圖分類來確定與用戶查詢最相關的指令
- 對于需要很長對話的對話應用,總結或過濾以前的對話
- 對長的檔案進行逐條總結,并遞回地構建一個完整的總結
給GPT時間“思考”
如果讓你用17乘以28,你可能不會馬上知道,但還是可以通過時間計算出來,同樣地,當GPT試圖立即回答,而不是花時間來計算答案時,他們會犯更多的推理錯誤,在回答之前要求有一連串的推理,可以幫助GPT們更可靠地推理出正確的答案,
方法:
- 指示模型在匆忙得出結論之前,先找出自己的解決方案
- 使用內心獨白或一連串的詢問來隱藏模型的推理程序
- 詢問模型在之前的程序中是否遺漏了什么
使用外部工具
通過向GPT提供其他工具的輸出來彌補GPT的弱點,例如,一個文本檢索系統可以告訴GPT有關的檔案,一個代碼執行引擎可以幫助GPT進行數學運算和運行代碼,如果一項任務可以由一個工具而不是GPT更可靠或更有效地完成,那么就把它卸載掉,以獲得兩者的優點,
方法:
- 使用基于嵌入的搜索來實作高效的知識檢索
- 使用代碼執行來進行更精確的計算或呼叫外部API
系統地測驗變更
如果你能測量它,提高性能就更容易了,在某些情況下,對一個提示的修改會在一些孤立的例子上實作更好的性能,但在更有代表性的例子上會導致更差的整體性能,因此,為了確定一個變化對性能是積極的,可能需要定義一個全面的測驗套件(也稱為 "評估"),
方法:
- 參斬訓金標準答案評估模型輸出
方法
上面列出的每個策略都可以用具體的戰術來實體化,這些戰術是為了提供一些可以嘗試的想法,它們決不是完全全面的,你應該自由地嘗試這里沒有代表的創造性想法,
策略:撰寫清晰的說明
方法:在你的詢問中包括細節,以獲得更多相關的答案
為了得到高度相關的回應,請確保請求提供任何重要的細節或背景關系,否則,你就得讓模型來猜測你的意思了,
| 糟糕 | 更棒 |
|---|---|
| 如何在Excel中添加數字? | 如何在Excel中將一行美元金額相加?我想對一整排行自動執行此操作,所有的總計都在右邊的一列中,名為“總計”, |
| 誰是總統? | 誰是2021年的墨西哥總統,選舉頻率有多高? |
| 撰寫代碼來計算斐波那契數列, | 撰寫一個TypeScript函式來有效計算斐波那契數列,大量注釋代碼以解釋每一部分的作用以及為什么這樣寫, |
| 對會議記錄進行總結, | 將會議記錄總結成一段話,然后,寫一份發言者和他們每個人的關鍵觀點的標記清單,最后,列出發言者建議的下一步行動或行動專案(如果有的話), |
方法:要求模型扮演一個角色
系統訊息可用于指定模型在回復中使用的角色,
| 角色 | Prompt |
|---|---|
| SYSTEM | 當我請求幫助寫東西時,你會回復一份檔案,其中每段至少包含一個笑話或有趣的評論, |
| USER | 寫一封感謝信給我的鋼制螺栓供應商,感謝他在短時間內準時交貨,這使我們有可能交付一份重要的訂單, |
方法:使用分隔符清楚地指示輸入的不同部分
三引號、XML標記、節標題等分隔符可以幫助劃分要區別對待的文本節,
| 角色 | Prompt |
|---|---|
| USER | 用一個俳句來概括由三引號劃定的文字, """ 此處放置需要概括的文字 """ |
| 角色 | Prompt |
|---|---|
| SYSTEM | 您將獲得一對關于同一主題的文章(用XML標記分隔),首先總結每一篇文章的論點,然后指出他們中哪一個更有說服力,并解釋原因, |
| USER | <article> 此處放置第一篇文文章 </article> <article> 此處放置另外一篇文文章 </article> |
| 角色 | Prompt |
|---|---|
| SYSTEM | 你將得到一份論文摘要和一個建議的標題,論文標題應該讓讀者對論文的主題有一個很好的概念,但也應該是醒目的,如果標題不符合這些標準,請提出5個備選方案, |
| USER | 摘要:在此插入摘要 標題:在此插入標題 |
對于像這樣簡單的任務,使用分隔符可能不會對輸出質量產生影響,然而,任務越復雜,消除任務細節的歧義就越重要,不要讓GPT努力去理解你對他們的要求,
方法:指定完成任務所需的步驟
某些任務最好指定為一系列步驟,明確地寫出步驟可以使模型更容易地遵循它們,
| 角色 | Prompt |
|---|---|
| SYSTEM | 使用以下分步說明對用戶輸入做出回應, 步驟1:用戶將為您提供三個引號中的文本,用一個前綴寫著“總結:”的句子來總結這篇文章, 步驟2:將步驟1中的摘要翻譯成西班牙語,前綴為“翻譯:”, |
| USER | """此處放置需要的文字""" |
方法:提供示例
提供適用于所有例子的一般指示,通常比通過例子演示任務的所有變化更有效,但在某些情況下,提供例子可能更容易,例如,如果你打算讓模型復制一種難以明確描述的回應用戶查詢的特定風格,這就是所謂的 "幾句話 "提示,
| 角色 | Prompt |
|---|---|
| SYSTEM | 以一致的風格回答, |
| USER | 教我如何忍耐 |
| ASSISTANT | 雕刻最深山谷的河流來自一個溫和的泉水; 最偉大的交響樂源于一個音符; 最復雜的掛毯是從一根孤零零的線開始的, |
| USER | 教我有關海洋的知識, |
方法:指定所需的輸出長度
您可以要求模型生成具有給定目標長度的輸出,目標輸出長度可以根據單詞、句子、段落、專案符號等的數量來指定,然而,請注意,指示模型生成特定數量的單詞并不具有高精度,該模型可以更可靠地生成具有特定數量的段落或專案符號的輸出,
| 角色 | Prompt |
|---|---|
| USER | 用大約50個單詞總結由三個引號分隔的文本, """ 在此處插入文本 """ |
| USER | 用兩段話概括由三個引號分隔的文本, """ 在此處插入文本 """ |
| USER | 用3個要點概括由三個引號分隔的文本, """ 在此處插入文本 """ |
策略:提供參考文本
方法:指導模型使用參考文本進行回答
如果我們可以為模型提供與當前查詢相關的可信資訊,那么我們可以指示模型使用所提供的資訊來組成其答案,
| 角色 | Prompt |
|---|---|
| SYSTEM | 使用所提供的由三個引號分隔的文章來回答問題,如果在文章中找不到答案,就寫 "我找不到答案", |
| USER | <插入文章,每個文章由三個引號分隔> 問題:<在此處插入問題> |
鑒于GPT的背景關系視窗有限,為了應用這種策略,我們需要某種方式來動態查找與所問問題相關的資訊,Embeddings可以用來實作高效的知識檢索,有關如何實作這一點的更多詳細資訊,請參閱策略“使用基于嵌入的搜索來實作高效的知識檢索”,
方法:指導模型用參考文本中的引文進行回答
如果輸入中已經用相關知識進行了補充,那么可以直接要求模型通過參考所提供檔案中的段落來在其答案中添加參考,請注意,輸出中的參考可以通過所提供檔案中的字串匹配以編程方式進行驗證,
| 角色 | Prompt |
|---|---|
| SYSTEM | 您將收到一份由三個引號和一個問題分隔的檔案,你的任務是只使用提供的檔案回答問題,并參考用于回答問題的檔案的段落,如果檔案中沒有包含回答這個問題所需的資訊,那么只需寫下:“資訊不足,”如果提供了問題的答案,則必須用引文進行注釋,使用以下格式參考相關段落({“引文”:…}), |
| USER | """<在此處插入檔案>""" Question: <在此處插入問題> |
策略:將復雜的任務拆分為更簡單的子任務
方法:使用意圖分類來確定與用戶查詢最相關的指令
對于需要大量獨立指令集來處理不同情況的任務,首先對查詢型別進行分類并使用該分類來確定需要哪些指令可能是有益的,這可以通過定義與處理給定類別中的任務相關的固定類別和硬編碼指令來實作,這個程序也可以遞回地應用于將任務分解為一系列階段,這種方法的優點是,每個查詢將僅包含執行任務的下一階段所需的那些指令,與使用單個查詢來執行整個任務相比,這些指令可以導致更低的錯誤率,這也可以降低成本,因為更大的提示運行成本更高(請參閱定價資訊),
例如,假設對于客戶服務應用程式,查詢可以有效地分類如下:
| 角色 | Prompt |
|---|---|
| SYSTEM | 您將收到客戶服務查詢,將每個查詢分類為主要類別和次要類別,以json格式提供帶有關鍵字的輸出:primary和secondary, 主要類別:帳單、技術支持、帳戶管理或一般查詢, 計費次要類別: - 取消訂閱或升級 - 添加付款方式 - 收費說明 - 對指控提出異議 技術支持二級分類: - 故障排除 - 設備兼容性 - 軟體更新 帳戶管理次要類別: - 密碼重置 - 更新個人資訊 - 關閉帳戶 - 賬戶安全 一般查詢次要類別: - 產品資訊 - 定價 - 反饋 - 與人交談 |
| USER | 我需要讓我的互聯網重新運轉起來, |
基于客戶查詢的分類,可以向GPT模型提供一組更具體的指令,以處理接下來的步驟,例如,假設客戶需要“故障排除”方面的幫助,
| 角色 | Prompt |
|---|---|
| SYSTEM | 將向您提供需要在技術支持環境中進行故障排除的客戶服務咨詢,通過以下方式幫助用戶: - 請他們檢查所有連接路由器的電纜是否已連接,請注意,隨著時間的推移,電纜松動是很常見的, - 如果所有電纜都已連接,但問題仍然存在,請詢問他們使用的是哪種路由器型號 - 現在,您將建議他們如何重新啟動設備: -- 如果型號為MTD-327J,建議他們按下紅色按鈕并保持5秒鐘,然后等待5分鐘再測驗連接, -- 如果型號是MTD-327S,建議他們拔下插頭并重新安裝,然后等待5分鐘再測驗連接, - 如果客戶的問題在重新啟動設備并等待5分鐘后仍然存在,請通過輸出{“請求的IT支持”}將他們連接到IT支持, - 如果用戶開始詢問與此主題無關的問題,請確認他們是否希望結束當前關于故障排除的聊天,并根據以下方案對他們的請求進行分類: 您將收到客戶服務查詢,將每個查詢分類為主要類別和次要類別,以json格式提供帶有關鍵字的輸出:primary和secondary, 主要類別:帳單、技術支持、帳戶管理或一般查詢, 計費次要類別: - 取消訂閱或升級 - 添加付款方式 - 收費說明 - 對指控提出異議 技術支持二級分類: - 故障排除 - 設備兼容性 - 軟體更新 帳戶管理次要類別: - 密碼重置 - 更新個人資訊 - 關閉帳戶 - 賬戶安全 一般查詢次要類別: - 產品資訊 - 定價 - 反饋 - 與人交談 |
| USER | 我需要讓我的互聯網重新運轉起來, |

請注意,該模型已被指示發出特殊的字串,以指示對話的狀態何時改變,這使我們能夠把我們的系統變成一個狀態機,狀態決定了哪些指令被注入,通過跟蹤狀態,哪些指令在該狀態下是相關的,以及允許從該狀態下進行哪些狀態轉換,我們可以在用戶體驗周圍設定護欄,這在結構化程度較低的方法中是難以實作的,
方法:對于需要很長對話的對話應用,總結或過濾以前的對話
由于GPT具有固定的背景關系長度,用戶和助手之間的對話(其中整個對話都包含在背景關系視窗中)不能無限期地繼續,
這個問題有各種各樣的解決方法,其中之一就是總結之前的談話,一旦輸入的大小達到預定的閾值長度,這可以觸發對會話的一部分進行總結的查詢,并且先前會話的總結可以被包括作為系統訊息的一部分,或者,可以在整個會話的后臺異步總結先前的會話,
另一種解決方案是動態選擇對話中與當前查詢最相關的先前部分,請參閱策略“使用基于嵌入的搜索來實作高效的知識檢索”,
方法:對長的檔案進行逐條總結,并遞回地構建一個完整的總結
由于GPT具有固定的背景關系長度,因此不能在單個查詢中使用GPT來匯總超過背景關系長度減去生成的摘要長度的文本,
要總結一個很長的檔案,例如一本書,我們可以使用一系列查詢來總結檔案的每個部分,章節摘要可以連接和匯總,從而生成摘要的摘要,這個程序可以遞回地進行,直到整個檔案被總結出來,如果有必要使用有關前幾節的資訊來理解后幾節,那么另一個有用的技巧是在總結書中任何給定點之前的文本時,包括對該點內容的連續摘要,OpenAI使用GPT-3的變體在之前的研究中已經研究了這種總結書籍的程式的有效性,
策略:給GPT時間“思考”
方法:指示模型在匆忙得出結論之前,先找出自己的解決方案
有時,當我們明確指示模型在得出結論之前從第一原理進行推理時,我們會得到更好的結果,例如,假設我們想要一個模型來評估一個學生對數學問題的解決方案,最明顯的方法是簡單地問模型,學生的解決方案是否正確,
| 角色 | Prompt |
|---|---|
| SYSTEM | 確定學生的解決方案是否正確, |
| USER | 問題陳述:我正在建造一個太陽能裝置,我需要幫助解決財務問題, - 土地價格為100美元/平方英尺 - 我可以花250美元/平方英尺買太陽能電池板 - 我協商了一份維護合同,每年將花費10萬美元,每平方英尺額外花費10美元 作為平方英尺數量的函式,運營第一年的總成本是多少, 學生解決方案:設x為裝置的大小,單位為平方英尺, 1.土地成本:100x 2.太陽能電池板成本:250x 3.維修費用:100000+100x 總成本:100x+250x+100000+100x=450x+100000 |
| ASSISTANT | 這個學生的答案是正確的, |
但是學生的解決方案實際上是不正確的!我們可以通過提示模型首先生成自己的解決方案來讓模型成功地注意到這一點,
| 角色 | Prompt |
|---|---|
| SYSTEM | 首先找出你自己解決這個問題的辦法,然后將你的解決方案與學生的解決方案進行比較,并評估學生的解決方法是否正確,在你自己做了題之前,不要決定學生的答案是否正確, |
| USER | 問題陳述:我正在建造一個太陽能裝置,我需要幫助解決財務問題, - 土地價格為100美元/平方英尺 - 我可以花250美元/平方英尺買太陽能電池板 - 我協商了一份維護合同,每年將花費10萬美元,每平方英尺額外花費10美元 作為平方英尺數量的函式,運營第一年的總成本是多少, 學生解決方案:設x為裝置的大小,單位為平方英尺, 1.土地成本:100x 2.太陽能電池板成本:250x 3.維修費用:100000+100x 總成本:100x+250x+100000+100x=450x+100000 |
| ASSISTANT | 設x是安裝的尺寸,單位是平方英尺, 1. 土地成本:100x 2. 太陽能電池板成本:250x 3. 維護費用:100,000 + 10x 總成本:100x + 250x + 100,000 + 10x = 360x + 100,000 學生的解決方案不正確,他們在計算維護成本時犯了一個錯誤,用了100倍而不是10倍,運營第一年的正確總成本為360x+100000, |
方法:使用內心獨白或一連串的詢問來隱藏模型的推理程序
前面的策略表明,在回答特定問題之前,模型對問題進行詳細推理有時很重要,對于某些應用程式,模型用于得出最終答案的推理程序不適合與用戶共享,例如,在輔導應用程式中,我們可能希望鼓勵學生自己找出答案,但模型對學生解決方案的推理程序可能會向學生揭示答案,
內心獨白是一種可以用來緩解這種情況的策略,內心獨白的想法是指示模型將原本要對用戶隱藏的輸出部分放入結構化格式中,使決議它們變得容易,然后,在向用戶呈現輸出之前,對輸出進行決議,并且僅使輸出的一部分可見,
| 角色 | Prompt |
|---|---|
| SYSTEM | 按照以下步驟回答用戶查詢, 步驟1-首先找出你自己的問題解決方案,不要依賴學生的解決方案,因為它可能是不正確的,將您為此步驟所做的所有作業用三個引號(“”)括起來, 第2步-將你的解決方案與學生的解決方案進行比較,并評估學生的解決方法是否正確,將您為此步驟所做的所有作業用三個引號(“”)括起來, 第3步-如果學生犯了錯誤,確定你可以在不泄露答案的情況下給學生什么提示,將您為此步驟所做的所有作業用三個引號(“”)括起來, 第4步-如果學生犯了錯誤,向學生提供上一步的提示(三引號之外),不要寫“步驟4-…”,而是寫“提示:”, |
| USER | 問題陳述:<插入問題陳述> 學生解決方案:<插入學生解決方案> |
或者,這可以通過一系列查詢來實作,在這些查詢中,除最后一個查詢外,所有查詢的輸出都對最終用戶隱藏,
首先,我們可以要求模型自己解決問題,由于這個初始查詢不需要學生的解決方案,因此可以省略它,這提供了額外的優勢,即模型的解決方案不會因學生嘗試的解決方案而產生偏差,
| 角色 | Prompt |
|---|---|
| USER | <插入問題陳述> |
| ASSISTANT | xxxxxxxxxxxxx(模型生成的解決方案) |
接下來,我們可以讓模型使用所有可用的資訊來評估學生的解決方案是否正確,
| 角色 | Prompt |
|---|---|
| SYSTEM | 將你的解決方案與學生的解決方案進行比較,并評估學生的解決方法是否正確, |
| USER | 問題陳述:“”“<插入問題陳述>”“” 你的解決方案:“”“<插入模型生成的解決方案>”“” 學生解決方案:“”“<插入學生解決方案>”“” |
最后,我們可以讓模型使用自己的分析,以一個樂于助人的導師的身份構建一個回復,
| 角色 | Prompt |
|---|---|
| SYSTEM | 你是一個數學輔導員,如果學生犯了錯誤,以不透露答案的方式向學生提供提示,如果學生沒有犯錯,只需給他們一個鼓勵性的評論, |
| USER | 問題陳述:“”“<插入問題陳述>”“” 你的解決方案:“”“<插入模型生成的解決方案>”“” 學生解決方案:“”“<插入學生解決方案>”“” 分析:“”“<插入上一步中生成的模型分析>”“” |
方法:詢問模型在之前的程序中是否遺漏了什么
假設我們正在使用一個模型來列出與某個特定問題相關的來源的摘錄,在列出每個摘錄之后,模型需要確定它是否應該開始寫另一個摘錄,或者是否應該停止,如果源檔案很大,模型通常會過早停止,而無法列出所有相關的節選,在這種情況下,通常可以通過提示模型進行后續查詢,以找到它在前幾次查詢中遺漏的任何節選內容,從而獲得更好的性能,
| 角色 | Prompt |
|---|---|
| SYSTEM | 你將得到一份由三個引號分隔的檔案,你的任務是選擇與以下問題有關的節選: "在人工智能的歷史上發生了哪些重大的范式轉變," 確保節選內容包含解釋它們所需的所有相關背景--換句話說,不要提取缺少重要背景的小片段,提供JSON格式的輸出,如下所示: [{"excerpt": "..."}, ... {"excerpt": "..."}] |
| USER | """<在此處插入檔案>""" |
| ASSISTANT | [{"excerpt": "一段摘錄"}, ... {"excerpt": "另一段摘錄"}] |
| USER | 是否有更多相關的摘錄?注意不要重復摘錄,還要確保摘錄的內容包含解釋它們所需的所有相關背景--換句話說,不要摘取缺少重要背景的小片段, |
使用外部工具
方法:使用基于嵌入的搜索來實作高效的知識檢索
如果作為輸入的一部分提供,模型可以利用外部資訊源,這可以幫助模型生成更知情和最新的回應,例如,如果用戶詢問關于特定電影的問題,則將關于電影的高質量資訊(例如,演員、導演等)添加到模型的輸入中可能是有用的,嵌入可以用于實作高效的知識檢索,從而可以在運行時將相關資訊動態添加到模型輸入中,
文本嵌入是一種可以測量文本字串之間相關性的向量,相似或相關的字串將比不相關的字串更緊密地連接在一起,這一事實,加上快速矢量搜索演算法的存在,意味著嵌入可以用于實作高效的知識檢索,特別地,文本語料庫可以被分成塊,并且每個塊都可以被嵌入和存盤,然后,可以嵌入給定的查詢,并且可以執行向量搜索以從語料庫中找到與查詢最相關的嵌入的文本塊(即,在嵌入空間中最接近的文本塊),
示例實作可以在OpenAI Cookbook中找到,請參閱策略“指導模型使用檢索到的知識來回答查詢”,以了解如何使用知識檢索來最大限度地減少模型編造錯誤事實的可能性,
方法:使用代碼執行來進行更精確的計算或呼叫外部API
不能依靠GPT自己準確地進行算識訓長時間的計算,在需要的情況下,可以指示一個模型撰寫和運行代碼,而不是自己進行計算,特別是,一個模型可以被指示把要運行的代碼放到一個指定的格式中,如三重回溯,在產生輸出后,代碼可以被提取并運行,最后,如果有必要,代碼執行引擎(即Python解釋器)的輸出可以提供給模型,作為下一次查詢的輸入,
| 角色 | Prompt |
|---|---|
| SYSTEM | 你可以通過將Python代碼用三個反斜線括起來來撰寫和執行,例如:代碼在這里,用這個來進行計算, |
| USER | 找到以下多項式的所有實值根:3*x**5 - 5*x**4 - 3*x**3 - 7*x - 10. |
代碼執行的另一個好用例是呼叫外部API,如果指示模型正確使用API,它可以撰寫使用它的代碼,可以通過向模型提供說明如何使用API的檔案和/或代碼示例來指示模型如何使用API,
| 角色 | Prompt |
|---|---|
| SYSTEM | 你可以通過將Python代碼用三個反斜線括起來來撰寫和執行,例如:代碼在這里,用這個來進行計算,``` python import message message.write(to="John", message="Hey, want to meetup after work?") ``` |
警告:執行由模型生成的代碼本質上是不安全的,在任何試圖執行此操作的應用程式中都應該采取預防措施,特別是,需要一個沙盒代碼執行環境來限制不受信任的代碼可能造成的危害,
系統地測驗變更
有時很難判斷一個變化——例如,一條新指令或一個新設計——是讓你的系統變得更好還是更糟,看看幾個例子可能會暗示哪一個更好,但由于樣本量較小,很難區分真正的改進還是隨機的運氣,也許更改有助于某些輸入的性能,但會損害其他輸入的性能,
評估程式(或“evals”)有助于優化系統設計,好的evals是:
- 代表真實世界的使用(或至少多樣化)
- 包含許多測驗用例以獲得更大的統計能力(有關指南,請參閱下表)
- 易于自動化或重復
| 要檢測的差異 | 95%置信度所需的樣本量 |
|---|---|
| 30% | ~10 |
| 10% | ~100 |
| 3% | ~1,000 |
| 1% | ~10,000 |
輸出的評估可以由計算機、人工或混合進行,計算機可以使用客觀標準(例如,具有單一正確答案的問題)以及一些主觀或模糊標準來自動評估,其中模型輸出由其他模型查詢來評估,OpenAI Evals是一個開源軟體框架,提供創建自動化評估的工具,
當存在一系列可能的輸出時,基于模型的評估可能會很有用,這些輸出被認為質量同樣高(例如,對于答案很長的問題),基于模型的評估可以實際評估的內容和需要人類評估的內容之間的界限是模糊的,并且隨著模型變得更有能力,界限不斷變化,我們鼓勵進行實驗,以了解基于模型的評估在多大程度上適用于您的用例,
方法:參斬訓金標準答案評估模型輸出
假設一個問題的正確答案應該參考一組特定的已知事實,然后,我們可以使用模型查詢來計算答案中包含了多少所需事實,
例如,使用以下系統訊息:
| 角色 | Prompt |
|---|---|
| SYSTEM | 您將獲得由三個引號分隔的文本,這應該是問題的答案,檢查答案中是否直接包含以下資訊: -尼爾·阿姆斯特朗是第一個在月球上行走的人, -尼爾·阿姆斯特朗第一次登上月球的日期是1969年7月21日, 對于這些點中的每一個,執行以下步驟: 1-重述要點, 2-提供最接近這一點的答案的引文, 3-考慮一下,閱讀引文但不了解主題的人是否可以直接推斷出要點,在下定決心之前解釋一下為什么或為什么不這樣做, 4-如果3的答案是肯定的,則寫“是”,否則寫“否”, 最后,統計一下有多少“是”的答案,將此計數提供為{“count”:<在此處插入計數>}, |
以下是一個同時滿足這兩點的示例輸入:
| 角色 | Prompt |
|---|---|
| SYSTEM | <插入上面的系統資訊> |
| USER | “”“尼爾·阿姆斯特朗走出登月艙,成為第一個登上月球的人,創造了歷史,”“” |
以下是一個沒有得到滿足的示例輸入:
| 角色 | Prompt |
|---|---|
| SYSTEM | <插入上面的系統資訊> |
| USER | “”“69年夏天,一次盛大的航行, 阿波羅11號,大膽如傳奇之手, 阿姆斯特朗邁出了一步,歷史展現了出來, “我的一小步,人類的一大步”他說,”“” |
這種基于模型的eval有很多可能的變體,考慮以下變化,它跟蹤候選答案和金標準答案之間的重疊型別,并跟蹤候選答案是否與金標準答案的任何部分相矛盾,
| 角色 | Prompt |
|---|---|
| SYSTEM | 使用以下步驟來回應用戶輸入,在繼續之前充分重述每一步,即“第1步:理由…”, 步驟1:逐步判斷提交的答案中的資訊與專家答案相比是否是:不相交、相等、子集、超集或重疊(即某些交集,但不是子集/超集), 第二步:逐步判斷提交的答案是否與專家答案的任何方面相矛盾, 第3步:輸出一個JSON物件,其結構如下:{“type_of_doverlap”:“dissection”或“equal”或“subset”或“superset”或“overlapping”,“conflict”:true或false} |
以下是一個輸入不合格答案的示例,但與專家答案并不矛盾:
| 角色 | Prompt |
|---|---|
| SYSTEM | <插入上面的系統資訊> |
| USER | 問題:“”“尼爾·阿姆斯特朗最著名的事件是什么?發生在什么日期?假定UTC時間,”“” 提交的答案:“”“他不是在月球上行走嗎?”“” 專家回答:“尼爾·阿姆斯特朗最著名的是他是第一個登上月球的人,這一歷史性事件發生在1969年7月21日,” |
以下是一個與專家答案直接矛盾的輸入示例:
| 角色 | Prompt |
|---|---|
| SYSTEM | <插入上面的系統資訊> |
| USER | 問題:“”“尼爾·阿姆斯特朗最著名的事件是什么?發生在什么日期?假定UTC時間,”“” 提交的答案:“1969年7月21日,尼爾·阿姆斯特朗成為繼巴茲·奧爾德林之后第二個登上月球的人,” 專家回答:“尼爾·阿姆斯特朗最著名的是他是第一個登上月球的人,這一歷史性事件發生在1969年7月21日,” |
以下是一個帶有正確答案的示例輸入,它還提供了比所需更多的細節:
| 角色 | Prompt |
|---|---|
| SYSTEM | <插入上面的系統資訊> |
| USER | 問題:“”“尼爾·阿姆斯特朗最著名的事件是什么?發生在什么日期?假定UTC時間,”“” 提交的答案:“”1969年7月21日UTC(世界協調時)大概02:56左右,尼爾·阿姆斯特朗成為第一個踏上月球表面的人類,這標志著人類歷史上的一項重大成就,“” 專家回答:“尼爾·阿姆斯特朗最著名的是他是第一個登上月球的人,這一歷史性事件發生在1969年7月21日,” |
其他資源
要獲得更多靈感,請訪問OpenAI Cookbook,其中包含示例代碼,還鏈接到第三方資源,如:
- 提示庫和工具
- 提示性指南
- 視頻課程
- 關于改進推理的高級提示的論文
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/556232.html
標籤:其他
上一篇:不糾結語法(田靜)
下一篇:返回列表
