Agent 主迴圈
源码版本v2026.7.20
職責
run_conversation 是 Hermes 的心臟:接收一條使用者訊息,反覆呼叫模型 + 工具,直到迭代預算耗盡或任務完成。它同時協調上下文建構、工具分發、停止條件判定,以及失敗時的回退。
檔案總長約 5800 行,邏輯密度很高——這一頁只看主線,細節拆到子頁。
關鍵檔案
run_conversation 入口:588-720— 函式簽名、初始化與迴圈前準備while 主迴圈:721-760— 條件api_call_count < agent.max_iterations and agent.iteration_budget.remaining > 0,含 grace callAPI 呼叫重試子迴圈:1227-1280—while retry_count < max_retriesbuild_turn_context— 每輪上下文裝配prompt_builder— 系統提示組裝moa_loop— Mixture-of-Agents 聚合路徑context_compressor— 命中閾值時壓縮歷史IterationBudget— 預算計數核心
資料流
run_agent.py AIAgent是瘦轉發器,實際依賴注入在init_agent完成。- 呼叫方傳入
user_message,run_conversation先走build_turn_context裝配本輪上下文(api_messages)。 - 進入
while主迴圈:檢查中斷 → 遞減預算(iteration_budget.consume())→ 建構/消毒api_messages→ 預壓縮 → 排空/steer文字 → MoA 聚合 → 進入 API 呼叫重試子迴圈。 - 模型回傳後做回應校驗與
finish_reason處理;失敗時走agent._try_activate_fallback()。 - 命中壓縮閾值時走
context_compressor回收空間。 - 迴圈退出後(預算耗盡/任務完成/中斷)回傳最終訊息,由網關層投遞(見網關層)。
小結
主迴圈只負責編排:輪次驅動、預算管控、重試與回退。真正的能力來自能力層的工具與技能,多平台投遞交給網關層,自我進化由學習閉環驅動。
想對照官方中文介紹,看 README.zh-CN 與 website/i18n/zh-Hans/。