smolagents 文件
多步代理(multi-step agent)是如何工作的?
加入 Hugging Face 社群
並獲得增強的文件體驗
開始使用
多步代理是如何工作的?
ReAct 框架(Yao et al., 2022)是目前構建代理的主要方法。
這個名字基於兩個詞的拼接:“Reason”(推理)和“Act”(行動)。的確,遵循此架構的代理將根據需要透過多個步驟來解決任務,每個步驟都包含一個推理步驟,然後是一個行動步驟,在其中它會規劃工具呼叫,從而使其更接近解決手頭的任務。
smolagents
中的所有代理都基於單一的 MultiStepAgent
類,它是 ReAct 框架的抽象。
在基礎層面上,該類按照以下步驟迴圈執行操作,其中現有的變數和知識被整合到代理日誌中,如下所示
初始化:系統提示被儲存在 SystemPromptStep
中,使用者查詢被記錄到 TaskStep
中。
While 迴圈 (ReAct 迴圈)
- 使用
agent.write_memory_to_messages()
將代理日誌寫入一個 LLM 可讀的聊天訊息列表。 - 將這些訊息傳送給一個
Model
物件以獲取其補全結果。解析該補全結果以獲得行動(對於ToolCallingAgent
是一個 JSON blob,對於CodeAgent
是一個程式碼片段)。 - 執行該行動並將結果記錄到記憶體中(一個
ActionStep
)。 - 在每個步驟結束時,我們執行所有在
agent.step_callbacks
中定義的回撥函式。
可選地,當規劃被啟用時,可以定期修訂一個計劃並將其儲存在 PlanningStep
中。這包括將有關手頭任務的事實反饋到記憶體中。
對於一個 CodeAgent
,它看起來如下圖所示。

以下是其工作原理的影片概述


我們實現了兩個版本的代理
- CodeAgent 將其工具呼叫生成為 Python 程式碼片段。
- ToolCallingAgent 將其工具呼叫寫為 JSON,這在許多框架中很常見。根據您的需求,可以使用任何一種方法。例如,網頁瀏覽通常需要在每次頁面互動後等待,因此 JSON 工具呼叫可能非常適合。
閱讀 將開源 LLM 作為 LangChain 代理這篇博文,以瞭解更多關於多步代理的資訊。