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/。