譯者 | 李睿
審校 | 重樓
本文通過四個階段過程來系統(tǒng)地理解和修復(fù)LLM應(yīng)用程序中的錯誤。
大型語言模型(LLM)為機器學(xué)習(xí)的應(yīng)用創(chuàng)造了一個新的范式。一方面,用戶有一個機器學(xué)習(xí)模型,可以根據(jù)自己的需求和任務(wù)進行定制。另一方面,可能無法訪問模型的權(quán)重和超參數(shù)。用戶可以通過調(diào)整提示和提供給模型的信息來控制模型的行為。
這對于那些習(xí)慣于開發(fā)傳統(tǒng)機器學(xué)習(xí)應(yīng)用程序的人來說帶來了難題。如果沒有一種系統(tǒng)的方法來分析錯誤并進行更正,那么可能會陷入混亂的境地——隨機更改提示,但又無法衡量每次修改的影響。
本文通過以下四個階段過程來系統(tǒng)地理解和修復(fù)LLM應(yīng)用程序中的錯誤。
第一階段:準備
在修正錯誤之前,應(yīng)該能夠衡量它們。在這個階段,將以允許用戶跟蹤模型性能的方式制定目標任務(wù)。
(1)創(chuàng)建數(shù)據(jù)集:創(chuàng)建50~100個示例,這些示例代表目標任務(wù)以及應(yīng)用程序用戶將發(fā)送的請求類型和預(yù)期響應(yīng)。每個示例都應(yīng)該包括請求和響應(yīng)。如果希望響應(yīng)包含推理鏈等其他信息,需要確保將其包含在示例中。如果響應(yīng)必須以特定格式(例如JSON或鍵值對)返回,需要確保所有示例的格式都正確無誤。
(2)開發(fā)評估方法:需要找出一種方法來比較模型的響應(yīng)與數(shù)據(jù)集中的實際情況。對于數(shù)字任務(wù)和問答,評估就像創(chuàng)建一個比較回答的函數(shù)一樣簡單。
對于生成性任務(wù)(例如生成摘要)需要采用更復(fù)雜的方法,如單獨的LLM提示。例如,首先人工審查和糾正一些模型響應(yīng),并開發(fā)一小部分寫入和錯誤的答案。然后,創(chuàng)建了單獨的LLM-as-a-Jjudge提示,其中包含對新模型答案進行評分的示例。
(3)指定目標接受標準:并非所有任務(wù)都需要完美的輸出。例如,在許多應(yīng)用中,總是會采用人工參與的循環(huán)方式,并且僅將LLM作為執(zhí)行部分基礎(chǔ)工作的輔助工具。在這種情況下,可以指定一個準確度級別,以使LLM應(yīng)用達到可發(fā)布的標準。然后,可以收集更多數(shù)據(jù)來優(yōu)化提示,并逐漸提高其準確度。例如,曾經(jīng)幫助一個團隊翻譯需要精心設(shè)計提示的特殊文本。首先從簡單的提示開始,該提示將他們的翻譯速度提高了25%。雖然不完美,但這個應(yīng)用卻非常有價值,節(jié)省了大量時間。隨后,根據(jù)反饋和示例逐步完善提示,使其能夠完成他們80%的工作。
第二階段:評估
這個階段的目標是以一種可以系統(tǒng)地處理的方式來識別和分類模型所產(chǎn)生的錯誤。
(1)跟蹤數(shù)據(jù)集上的錯誤:在數(shù)據(jù)集上運行提示,將模型的響應(yīng)與實際情況進行比較,并將模型產(chǎn)生錯誤的示例分開。對于這一步,將需要使用在上一階段開發(fā)的評估函數(shù)。
(2)對錯誤進行分類:創(chuàng)建一個電子表格,其中包含模型犯錯誤的示例、模型的響應(yīng)以及正確的響應(yīng)。將錯誤分為幾個常見的原因和類別。一些原因示例可以是“缺乏知識”、 “推理不正確”、“計算錯誤”和“輸出格式不正確”。(提示:可以使用前沿模型來幫助發(fā)現(xiàn)錯誤中的模式。為模型提供正確和錯誤的答案,并指導(dǎo)它將它們分為幾個類別。雖然它可能不會提供完美的結(jié)果,但將會提供一個很好的起點。)
第三階段:糾正
這一階段的目標是修改提示,以糾正在前一階段中發(fā)現(xiàn)的常見錯誤。在這一階段的每個步驟中,對提示符進行一次修改,并重新運行模型出錯的示例。如果錯誤沒有解決,可以進入下一階段,嘗試采用更復(fù)雜的解決方案。
(1)修正提示:根據(jù)在前一階段發(fā)現(xiàn)的錯誤類別,對提示進行修正。從非常簡單的修改開始,例如添加或更改說明(例如,“只輸出答案,不輸出額外的細節(jié)”,“只輸出JSON”,“在回答問題之前,逐步思考并寫下推理”)。
(2)在提示中添加知識:有時,問題是模型沒有關(guān)于任務(wù)的基本知識。在提示中創(chuàng)建一個“知識”部分,可以在其中包含任何有助于模型的事實或額外信息。
這一部分可以包括任何與任務(wù)相關(guān)的內(nèi)容,包括文檔、代碼和文章。 (在這個階段不要擔心提示的長度,只關(guān)注錯誤分析。以后可以考慮優(yōu)化提示的成本和規(guī)模。)
(3)使用小樣本示例:如果簡單的說明和額外的知識不能解決問題,嘗試在提示中添加少量示例。在提示中添加一個“示例”部分,其中包括問答對,并演示模型應(yīng)該如何解決問題。從兩到三個例子開始,使提示保持簡短。如果錯誤仍未解決,則逐漸添加更多示例。由于當今的前沿模型支持很長的提示,因此可以添加數(shù)百個示例。而嘗試使用Claude、Gemini和ChatGPT,使用正確的場景示例格式,可以獲得令人印象深刻的結(jié)果。
(4)將提示分解成幾個步驟:有時候,在一個提示中要求太多了。如果任務(wù)可以分解成單獨的步驟,嘗試為每個步驟創(chuàng)建一個單獨的提示。當被要求完成一項任務(wù)時,模型更有可能很好地執(zhí)行。然后,可以創(chuàng)建一個提示管道,將每個步驟的輸出作為下一個提示的輸入文本。更高級的管道可能包括使用不同提示序列的額外邏輯。例如,第一步可能是確定請求是否需要外部信息的提示。如果需要,請求將被傳送到一個RAG提示符。否則,它將被傳遞給使用模型的內(nèi)存知識的另一個提示符。
第四階段:最終確定
這一階段的目標是確保修正不會導(dǎo)致其他問題,也不會破壞模型在目標任務(wù)上的一般能力。
(1)重新評估整個數(shù)據(jù)集:一旦將模型的錯誤糾正到可接受的水平,通過糾正提示重新運行所有示例,以確保一切正常工作。如果遇到新的錯誤,重復(fù)評估和糾正階段。
(2)保留一個單獨的驗證數(shù)據(jù)集:為了確保提示不會過擬合到數(shù)據(jù)集,為最終評估保留一個保留集。這將確保提示超越訓(xùn)練示例。這類似于經(jīng)典的機器學(xué)習(xí),有單獨的測試和驗證集。如果模型在驗證集上表現(xiàn)不佳,則必須重復(fù)評估和糾正錯誤的階段。之后,需要創(chuàng)建新的驗證示例。(提示:可以使用前沿模型生成新的示例,其方法是為它提供一些以前的示例,并要求它生成不同但相似的示例。)
如上所示,機器學(xué)習(xí)錯誤分析的基本原則也適用于LLM應(yīng)用程序。只需要從正確的角度思考問題及其解決方案。
原文標題:How to analyze and fix errors in LLM applications,作者:Ben Dickson
鏈接:https://bdtechtalks.com/2024/09/20/llm-application-error-analysis/。