對話循環
這是什麼
這個執行階段元件會在一次使用者訊息的處理期間協調模型回覆、工具執行與停止條件。
白話解釋
可以把它想成記者持續追問消息來源,直到取得足以結案的答案。一次使用者輪次可能經過多次模型與工具往返:模型先要求搜尋,搜尋結果加入訊息後再判斷下一步,直到回傳不含工具呼叫的最終內容。
為什麼重要
run_conversation 掌管單一使用者輪次中的模型與工具迭代,並在進入迴圈前只呼叫一次 build_turn_context。這條路徑會組合目前的 prompt、歷史、工具、記憶與執行階段狀態。選用的 BOOT.md gateway 啟動掛鉤是另一種生命週期模式;對話循環不會在每輪載入 BOOT.md。
運作方式
agent/conversation_loop.py 的 run_conversation 原先是從 run_agent.py 抽出的約 3,900 行主體;後來又把每輪只執行一次的設定拆到 turn_context.py。函式先呼叫一次 build_turn_context,再進入 while 迴圈,以 api_call_count 對照 agent.max_iterations 與 agent.iteration_budget 的剩餘額度。每次模型呼叫後會檢查 assistant_message.tool_calls:若清單非空,agent._execute_tool_calls(agent/tool_executor.py)會執行這批工具,結果加入 messages 後再呼叫模型;若清單為空,assistant_message.content 就成為最終答案並結束迴圈。若額度先耗盡,迴圈外的步驟會再要求模型產生一次不使用工具的最終摘要。
具體範例
使用者要求 Hermes 找出今天最重要的 AI 新聞並發布到 Slack,會經過三次迭代:
- 第一次,模型回傳
web_search工具呼叫;迴圈執行搜尋、加入結果,再呼叫模型。 - 第二次,模型根據搜尋結果回傳 Slack 工具呼叫;迴圈執行並加入發布結果。
- 第三次,模型用純文字確認已發布,且沒有附帶
tool_calls,因此迴圈停止並回傳該文字。
如何連結
「對話循環」屬於「執行期」系列,最直接相關的概念包括「對話輪次上下文」、「工具執行器」與「個人作業系統」。
來源證據
agent/conversation_loop.py#agent.conversation_loop.run_conversation— 已驗證的精確符號對應;run_conversation會將目前 prompt 與暫時性 prompt 注入第一則系統訊息,從api_messages建立 provider 請求的kwargs,並讓代表性的串流分支透過 LLM 執行middleware呼叫_interruptible_streaming_api_call。
工作流程
- 目前尚無第一輪工作流程對應;此概念仍透過文章與來源證據出現在知識庫圖譜中。
相關文章
- 目前沒有文章以足夠頻率直接提及此概念名稱或別名,尚未達到提及探勘門檻。
