開源大型語言模型 (LLMS) 現在已經達到了一定的效能水平,使其適合作為推理引擎來驅動代理工作流:在我們的基準測試中,Mixtral 甚至超過了 GPT-35.通過微調,可以很容易地進一步提高其效能。
為因果語言建模訓練的大型語言模型 (LLMS) 可以處理各種任務,但它們通常難以完成邏輯、計算和搜尋等基本任務。 最壞的情況是,他們在某個領域(如數學)做得不好,但仍然試圖自己處理所有計算。
為了克服這個弱點,LLM可以整合到乙個系統中,在該系統中可以呼叫工具:這樣的系統稱為LLM代理。
在這篇文章中,我們將解釋 React 代理的內部工作原理,然後展示如何使用最近整合到 Langchain 中的代理chathuggingface
類來構建它們。 最後,我們將採用幾個帶有 GPT-3 的開源 LLM5 和 GPT-4 用於基準測試。
LLM 代理的定義非常廣泛:它們指的是所有以 LLMS 為核心引擎並能夠根據觀察對其環境施加影響的系統。 這些系統能夠通過“感知、思考、行動”迴圈的多次迭代來實現給定的任務,並且通常被整合到規劃或知識管理系統中以提高其效能。 你可以在習等人那裡找到它,2023 年研究,以找到對代理領域概述的精彩回顧。
今天,我們專注於:反應代理以上。 React 使用基於“.推理(推理)“和”。行動(代理)“來建立代理。 在提示中,我們解釋了模型可以使用哪些工具,並指導它“一步一步”地思考(也稱為思維鏈行為),以便計畫和實施其下一步行動以達到最終目標。
雖然上面的**看起來有點抽象,但其核心原理其實挺直截了當的。
請參閱此筆記本:我們展示了乙個借助 transformers 庫呼叫工具的基本示例。
從本質上講,LLM 是通過乙個迴圈呼叫的,其中提示包含以下內容:
這裡有乙個問題:“.
您可以使用以下工具:.
首先,你需要“思考”:“接下來你可以:
以正確的 JSON 格式啟動工具呼叫,或輸出帶有字首“Final Answer:”的答案。
接下來,您需要解析 LLM 的輸出:
如果包含在輸出中“最終答案:”
string,迴圈結束,輸出答案; 如果沒有包含,則表示 LLM 進行了一次工具呼叫:您需要解析此輸出以獲取工具的名稱及其引數,然後根據這些引數執行相應工具的呼叫。 此工具呼叫的結果將附加到提示中,然後再次將包含新資訊的提示傳遞給 LLM,直到它有足夠的資訊來給出問題的最終答案。 例如,llm 的輸出回答了以下問題:1:23:45 是多少秒?
當它可能看起來像這樣時:
想一想:我需要將一串時間轉換為秒。
行動:"action": "convert_time","action_input":
鑑於此輸出不包括在內“最終答案:”
字串,表示進行的工具呼叫。 因此,我們解析該輸出並獲取該工具呼叫的引數: 到引數
叫convert_time
工具,呼叫工具後返回
因此,我們將整個資訊塊附加到提示中。
更新後的提示現在是(更詳細的版本):
這裡有乙個問題:“1:23:45 包含多少秒? ”
您可以使用以下工具:
轉換時間:將以小時、分鐘和秒為單位的時間轉換為秒。
首先,“想一想:”在那之後,你可以:
以正確的 json 格式呼叫該工具,或使用“final answer:”字首輸出答案。
想一想:我需要將一串時間轉換為秒。
行動"action": "convert_time","action_input":
觀察:
我們使用這個新提示再次呼叫 llm,因為它可以訪問工具呼叫結果觀察:
,llm 現在最有可能輸出:
想一想:我現在有了回答問題所需的資訊。
最終答案:23:45:5025 中有 1 秒。
就是這樣!
一般來說,執行 LLM 引擎的代理系統的困難包括:
選擇提供的幫助您實現目標的工具之一:例如,當詢問時“大於 30,000 的最小素數是多少? ”
,代理可以呼叫“K2的高度是多少? ”
之search
工具,但這無濟於事。 以嚴格的引數格式呼叫工具:例如,在嘗試計算汽車在 10 分鐘內行駛 3 公里的速度時,您必須呼叫calculator
工具, 通過distance
除以time
計算:即使您的計算器工具接受 JSON 格式的呼叫還存在許多陷阱,例如: 工具名稱拼寫錯誤:
“calculator”
或“compute”
無效,並且提供引數名稱而不是其值:“args”: distance/time”
格式非標準化:“args": "3km in 10minutes”
有效地吸收和利用過去觀察的資訊,無論是在初始上下文中還是在使用工具後的觀察中。 那麼,完整的代理設定會是什麼樣子呢?
我們剛剛進入