news 2026/8/28 12:28:19

快速看懂 Hermes Agent 架构:一个对话循环如何撑起自学习 AI Agent

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
快速看懂 Hermes Agent 架构:一个对话循环如何撑起自学习 AI Agent

快速看懂 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 步走通代码:

  1. 入口:CLI 或网关把消息交给 Agent 实例,agent_init.py完成初始化,配置模型、工具集、最大轮次等参数。
  2. 构建请求:prompt_builder 拼好系统提示词加消息历史,transports 层再包成当前提供商认得的格式。
  3. 模型返回:响应若带工具调用,run_conversation把"模型想调工具 X"追加进历史。
  4. ⚡ 工具执行:tool_executor 验证工具名、解析参数,线程池执行,结果作为工具结果写回历史;失败时记录错误而不中断回合。
  5. 终止判断:模型不再返回工具调用,回合结束返回结果;触达最大轮次或时间预算则直接收尾。

另外,当上下文逼近上限时,循环会先压缩历史再问模型——这是唯一会改写历史的位置。

AGENTS.md 的 3 条设计红线:为什么提示词缓存被叫作"神圣"

📌 仓库根目录有一份近 1800 行的 AGENTS.md,改任何核心文件之前值得先读它。三条规则解释了项目的骨架:

  1. 按会话的提示词缓存神圣不可侵犯。改历史上下文、换工具集、中途重建系统提示词,都会让缓存失效、把用户成本乘上去,所以这些操作一律不做。
  2. 核心是"窄腰",能力长在边上。每个新增的核心工具都会随每一次 API 调用发给模型,成本由所有用户每轮分摊,所以新功能按"足迹阶梯"逐级往上加:扩展现有代码 → CLI 命令加技能 → 按服务开关的工具 → 插件 → MCP 服务器 → 新增核心工具(最后手段)。
  3. .env 只放密钥。所有行为配置——超时、阈值、功能开关——都进 config.yaml,要求用户往 .env 里写非密钥配置的改动会被直接拒掉。

这 3 条规则共同回答了一个问题:为什么项目选择用插件和技能成长,而不是让核心越写越厚——核心只留最稳定的部分,易变的全部放边上。

适合谁读,接下来看什么

想自建 Agent、或只用过"调一次模型加一次工具"的简单循环的开发者,可以从这份代码里看到重试、回退、压缩、缓存如何在同一条循环里共存。延伸方向:去skill_bundles.pymemory_manager.py里追它"用中学"的闭环,或看 acp_adapter/ 了解如何把同一个核心接进 IDE。

【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/28 12:28:10

TA101安全IC深度解析:从硬件根信任到安全启动落地

最近半导体圈子里关于“硬件安全”的讨论明显多了起来,Microchip 放出的 TrustAnchor TA101 安全IC 算是把这一轮的关注度推上了一个小高峰。做嵌入式的朋友应该都有感触:以前提到安全芯片,大家第一反应是 ATECC608 这类小封装认证芯片&#…

作者头像 李华
网站建设 2026/8/28 12:28:05

模拟退火算法原理与Matlab实现:从优化问题到TSP求解实战

1. 从“打铁淬火”到“寻优解”:模拟退火算法的直觉理解如果你在数学建模或者优化问题的世界里摸爬滚打过一阵子,大概率会听过“模拟退火”这个名字。它听起来有点玄乎,像是某种高深的物理化学过程,但实际上,它的核心思…

作者头像 李华
网站建设 2026/8/28 12:27:32

灰色关联分析:原理、实战与Python实现

1. 从“关系”说起:为什么我们需要灰色关联分析? 在数据分析的世界里,我们常常面临一个看似简单却极其复杂的问题:如何量化两个或多个因素之间的“关系”?比如,一个地区的经济发展水平,与它的教…

作者头像 李华
网站建设 2026/8/28 12:27:22

10 分钟让 Claude Code 在终端跑起来:安装、认证与首次对话

10 分钟让 Claude Code 在终端跑起来:安装、认证与首次对话 【免费下载链接】claude-code Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explaining co…

作者头像 李华
网站建设 2026/8/28 12:26:25

面向多语言视觉与地理空间理解的多模态数据集

摘要:面向多语言视觉理解、图像描述生成和地理空间视觉语言学习的多模态数据集,重点解决低资源印度语言在高质量图文数据方面的不足。数据集概述面向多语言视觉理解、图像描述生成和地理空间视觉语言学习的多模态数据集,重点解决低资源印度语…

作者头像 李华