Skip to content

Agent 主迴圈

源码版本v2026.7.20

職責

run_conversation 是 Hermes 的心臟:接收一條使用者訊息,反覆呼叫模型 + 工具,直到迭代預算耗盡或任務完成。它同時協調上下文建構、工具分發、停止條件判定,以及失敗時的回退。

檔案總長約 5800 行,邏輯密度很高——這一頁只看主線,細節拆到子頁。

關鍵檔案

資料流

  1. run_agent.py AIAgent 是瘦轉發器,實際依賴注入在 init_agent 完成。
  2. 呼叫方傳入 user_message,run_conversation 先走 build_turn_context 裝配本輪上下文(api_messages)。
  3. 進入 while 主迴圈:檢查中斷 → 遞減預算(iteration_budget.consume())→ 建構/消毒 api_messages → 預壓縮 → 排空 /steer 文字 → MoA 聚合 → 進入 API 呼叫重試子迴圈。
  4. 模型回傳後做回應校驗與 finish_reason 處理;失敗時走 agent._try_activate_fallback()
  5. 命中壓縮閾值時走 context_compressor 回收空間。
  6. 迴圈退出後(預算耗盡/任務完成/中斷)回傳最終訊息,由網關層投遞(見網關層)。

小結

主迴圈只負責編排:輪次驅動、預算管控、重試與回退。真正的能力來自能力層的工具與技能,多平台投遞交給網關層,自我進化由學習閉環驅動。

想對照官方中文介紹,看 README.zh-CNwebsite/i18n/zh-Hans/

非官方社群學習站,內容以 MIT 授權的 NousResearch/hermes-agent 原始碼為依據。