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 源码为依据。