快速看懂 Hermes Agent 架构:一个对话循环如何撑起自学习 AI Agent
【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent
Hermes Agent 是 Nous Research 出品的自学习 AI Agent 框架,它的架构围绕一条"对话循环"展开:核心不断调用模型、派发工具直到任务完成,上下文压缩、提示词缓存、重试回退都围着这一条循环转。同一个 Agent 核心同时跑在终端 CLI、消息网关(Telegram、Discord 等)和桌面端上,还能从完成过的任务里自动沉淀技能、在使用中迭代它们。
拆 Hermes Agent 的 4 个核心模块:从对话循环到提示词缓存
agent/ 目录是核心所在,其中 4 个模块最值得先读。
conversation_loop.py:把"问模型、跑工具"变成一个函数
结论:用户的一轮对话由run_conversation一个函数驱动,文件头部注释写清了它的职责——模型调用、工具派发、重试、回退、上下文压缩、回合后钩子触发都在里面。这个文件有 8000 行,但主流程一句话就能说完:不断问模型,它要调什么工具就执行什么,把结果写回对话历史,直到模型不再请求工具为止。
一句话:它是 Agent 的总控,决定每一轮从哪里开始、在哪里结束。核心循环见 agent/conversation_loop.py。
tool_executor.py 与 transports/:工具并行跑、模型多接一家
结论:工具不在主流程里跑。tool_executor.py负责验证工具名、解析参数、丢进线程池执行,并统一捕获异常——某个工具再慢再错,也不会卡死主循环。模型侧的差异则藏在transports/目录里:Anthropic、Bedrock、OpenAI Chat Completions、Codex 等每家提供商一个适配器,上层循环只看到一个统一的调用接口,换提供商不用改循环代码。
一句话:它把"工具怎么跑""模型怎么连"从主流程里剥离出去,循环代码不感知任何差异。执行器见 agent/tool_executor.py,各提供商适配见 agent/transports/。
prompt_builder.py:系统提示词在整个会话中一个字节都不变
结论:这是最反直觉的模块。它负责组装系统提示词,而项目对它有硬性要求:系统提示词在整个会话生命周期内保持字节级稳定,历史上下文不许中途改动,工具集不许中途换。原因在按会话维度的提示词缓存——长对话每一轮都在复用缓存前缀,任何一次失效都意味着重新为完整上下文付费。上下文压缩是改历史唯一的例外场景。
一句话:它用提示词的"灵活性"换缓存命中率,直接收益是成本。组装逻辑见 agent/prompt_builder.py。
5 步追踪一次完整调用:用户消息如何变成执行结果
以从 CLI 发出的一条消息为例,可以按 5 步走通代码:
- 入口:CLI 或网关把消息交给 Agent 实例,
agent_init.py完成初始化,配置模型、工具集、最大轮次等参数。 - 构建请求:prompt_builder 拼好系统提示词加消息历史,transports 层再包成当前提供商认得的格式。
- 模型返回:响应若带工具调用,
run_conversation把"模型想调工具 X"追加进历史。 - ⚡ 工具执行:tool_executor 验证工具名、解析参数,线程池执行,结果作为工具结果写回历史;失败时记录错误而不中断回合。
- 终止判断:模型不再返回工具调用,回合结束返回结果;触达最大轮次或时间预算则直接收尾。
另外,当上下文逼近上限时,循环会先压缩历史再问模型——这是唯一会改写历史的位置。
AGENTS.md 的 3 条设计红线:为什么提示词缓存被叫作"神圣"
📌 仓库根目录有一份近 1800 行的 AGENTS.md,改任何核心文件之前值得先读它。三条规则解释了项目的骨架:
- 按会话的提示词缓存神圣不可侵犯。改历史上下文、换工具集、中途重建系统提示词,都会让缓存失效、把用户成本乘上去,所以这些操作一律不做。
- 核心是"窄腰",能力长在边上。每个新增的核心工具都会随每一次 API 调用发给模型,成本由所有用户每轮分摊,所以新功能按"足迹阶梯"逐级往上加:扩展现有代码 → CLI 命令加技能 → 按服务开关的工具 → 插件 → MCP 服务器 → 新增核心工具(最后手段)。
- .env 只放密钥。所有行为配置——超时、阈值、功能开关——都进 config.yaml,要求用户往 .env 里写非密钥配置的改动会被直接拒掉。
这 3 条规则共同回答了一个问题:为什么项目选择用插件和技能成长,而不是让核心越写越厚——核心只留最稳定的部分,易变的全部放边上。
适合谁读,接下来看什么
想自建 Agent、或只用过"调一次模型加一次工具"的简单循环的开发者,可以从这份代码里看到重试、回退、压缩、缓存如何在同一条循环里共存。延伸方向:去skill_bundles.py、memory_manager.py里追它"用中学"的闭环,或看 acp_adapter/ 了解如何把同一个核心接进 IDE。
【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考