← 返回上一页

tech

Hermes Agent:真正值得关注的不是工具,而是学习闭环

理解 Hermes 的核心特性,以及它如何通过后台复盘,把用户信息沉淀为记忆、把解决问题的方法沉淀为技能。

现在的 Agent 已经很会“做事”了:调用终端、修改文件、浏览网页、连接外部服务,甚至把任务分给多个子 Agent 并行完成。

但这也暴露出一个更根本的问题:如果一次任务中形成的经验不能进入下一次任务,那么 Agent 无论完成过多少工作,下次仍然可能从头摸索。

Hermes 真正想解决的,正是这件事。

Hermes 首先是一个长期运行的 Agent

Hermes 的 README 把自己定义为 self-improving AI agent。不过,自我改进并不是它唯一的组成部分。README 首屏列出的重点能力还包括:

  • 跨入口持续对话:支持 CLI、Telegram、Discord、WhatsApp、微信等入口
  • 无人值守运行:使用内置 Cron 执行定时任务
  • 并行处理任务:创建隔离的子 Agent,拆分多个工作流
  • 跨环境执行:可在 Local、Docker、SSH、Singularity、Modal、Daytona 和 Vercel Sandbox 等环境中执行命令
  • 模型供应商无关:可在 Nous Portal、OpenRouter、OpenAI 和自建模型接口之间切换

这些能力共同构成了 Hermes 的底座:它不是一个只在当前窗口中回答问题的聊天应用,而是一个可以长期驻留、跨入口工作并持续保存状态的 Agent runtime。

可真正让这个运行时形成长期价值的,则是下一层——学习闭环。

所谓“学习”,不是训练模型权重

Hermes 不会因为完成一次任务,就自动微调底层大模型。 它的学习发生在模型之外,主要沉淀为两类可持久化信息:

  • Memory:用户是谁、喜欢什么、当前处于什么状态
  • Skill:以后遇到这一类任务,应该按照什么方法完成

例如,用户说“分析源码时必须讲证据”,可以被拆成两种知识:

  • 记忆:这个用户重视有出处的结论
  • 技能:分析项目时,应引用具体文件和实现位置,并区分 README 宣传、代码注释和真实运行路径

两者看起来接近,作用却不同。Memory 描述的是人与状态,Skill 保存的是可复用的做事方式。

对话之后,另一个 Agent 开始复盘

Hermes 的核心流程可以简化为:

正常对话与工具调用
        ↓
回答先交付给用户
        ↓
复制当前会话快照
        ↓
后台启动受限的 Agent fork
        ↓
判断哪些内容值得长期保存
        ├─ 用户、偏好、状态 → Memory
        ├─ 方法、纠正、工作流 → Skill
        └─ 没有长期价值 → Nothing to save
        ↓
写入记忆或技能库,供后续会话复用

源码中的 agent/background_review.py 对这个机制给出了直接说明:一轮对话完成后,系统可以启动 daemon thread,重放会话快照,并询问一个派生出来的 Agent:“是否应该保存或更新某项记忆与技能?”

这意味着学习过程具有几个特点:

  • 回答后运行:它发生在主回答交付之后,不阻塞用户当前任务
  • 上下文隔离:它阅读的是会话快照,不直接修改正在进行的聊天上下文
  • 模型语义判断:它不是依靠关键词或固定正则抽取
  • 受控工具写入:它通过 memory 和 skill_manage 完成持久化
  • 允许不写入:如果没有值得长期保存的内容,可以选择 Nothing to save

于是问题自然变成:它会不会每聊一句就启动一次昂贵的后台模型?

学习不是每轮无条件执行

Hermes 为记忆和技能设置了不同的触发节奏。

Memory 按用户对话轮数累计

内置记忆默认每 10 个用户回合触发一次复盘。 计数会随着会话历史恢复,因此恢复旧 Session 后不会完全重新计算。

适合进入 Memory 的内容包括:

  • 用户身份与长期目标
  • 稳定的表达和格式偏好
  • 用户期望 Agent 遵循的协作方式
  • 值得跨会话保留的项目或运行状态

此外,Hermes 还支持插件式外部 Memory provider。外部后端可以在每个完成的回合后同步信息,这与周期性的内置 Memory 复盘是两条不同路径。

Skill 按工具循环次数累计

技能复盘默认也以 10 为阈值,但计数单位不是用户说了多少句话,而是 Agent 经历了多少次工具调用循环。

这个设计让触发概率与任务复杂度更接近:

  • 普通闲聊很少形成新技能
  • 一次复杂排障可能在一个用户回合内调用十几次工具
  • 只要达到阈值,本轮结束后就能立即进入技能复盘

因此,Hermes 并不是定时把全部聊天机械地改写成 Skill,而是优先在真正经历了复杂执行过程之后复盘。

一个 Skill 是怎样形成的

后台 Agent 会寻找几类明确的学习信号:

  • 用户纠正了回答风格、格式或详略程度
  • 用户纠正了工作流程、判断方式或步骤顺序
  • 任务中出现了可复用的调试方法、修复技巧或工具组合
  • 本次加载的已有 Skill 被证明缺少步骤或已经过时
  • 用户明确要求记住一种以后仍应遵循的做法

但发现信号不代表立即创建一个新文件。Hermes 规定了优先顺序:

  • 优先更新本次实际使用过的相关 Skill
  • 其次补充已有的同类“伞状技能”
  • 再次沉淀具体案例到现有 Skill 的 references/、templates/ 或 scripts/
  • 最后才新建类别级 Skill,而且仅限现有技能都无法覆盖时

这项规则决定了技能库能否长期使用。 否则每次任务都创建一个技能,最终得到的只会是一堆诸如“修复今天这个错误”“分析某个 PR”的一次性文件,而不是能在未来复用的方法库。

自动改进不等于可以随意改写

后台复盘 Agent 的权限受到严格限制。 它默认只能读取技能、搜索相关文件,以及使用 Memory 和 Skill 管理工具,不能借学习之名随意执行终端命令或修改项目源码。

技能本身也有所有权边界。后台机制默认不能修改:

  • Hermes 随项目提供的内置技能
  • 从 Skills Hub 安装的技能
  • 外部目录中的技能
  • 用户手工编写、尚未交给 Curator 管理的技能
  • 用户明确固定的 pinned 技能

修改已有 Skill 前,后台 Agent 还必须在当前复盘中重新读取它。这条 read-before-write 规则可以避免模型凭借会话中的旧版本直接覆盖文件。

用户还可以开启技能写入审批。开启后,自动修改只会生成待审变更,用户查看 diff 后再批准或拒绝。技能变更默认还会记录修改前后的哈希,并保存可供回滚的内容。

这就引出了另一个容易被忽略的问题:如果模型把一次偶发失败当成永久规律,学习本身是否会变成污染?

Hermes 刻意不学习什么

后台复盘提示明确排除了一些内容:

  • 当前机器缺少依赖或尚未配置凭证
  • “某工具不能使用”之类可能很快过时的负面判断
  • 重试后已经消失的临时故障
  • 只适用于当天任务的一次性叙述
  • 最终没有找到有效方法的失败尝试

尤其是最后一点:如果任务并未解决,就不能把一串失败步骤包装成“可靠工作流”。 真正应该保存的是经过验证的方法,而不是听起来像经验的猜测。

为什么要派生 Agent,而不是直接改主对话

后台复盘使用独立 Agent fork,还有两个重要原因。

  • 隔离上下文:复盘提示和模型输出不会写进用户的真实 Session,避免下一轮把“请检查并更新技能”误认为用户的持续要求
  • 复用缓存:使用相同模型时,fork 会尽量保持 system prompt、工具定义和推理配置一致,从而复用主会话已经建立的 prompt cache

如果用户为后台复盘指定了另一个更便宜的模型,Hermes 则会生成会话摘要交给它,而不是把完整冷上下文全部重新发送。

因此,这个学习闭环并不是简单地“再请求一次模型”。它同时处理了:

  • 触发时机
  • 对话隔离
  • 工具权限
  • 写入所有权
  • Prompt Cache 成本
  • 变更审批与回滚
  • 后续技能维护

这是不是 Hermes 最核心的特性

如果把“核心”理解为最有辨识度的产品能力,答案是肯定的。README 也把 self-improving 和 closed learning loop 放在最前面。

但如果把“核心”理解为完整系统,就不能只看后台学习。Hermes 的整体结构更接近:

  • Agent runtime 负责模型循环、工具调用与上下文管理
  • Gateway 让同一个 Agent 出现在不同聊天入口
  • Session 与 Memory 负责跨会话连续性
  • Cron 负责无人值守运行
  • 子 Agent 负责隔离与并行执行
  • Skill 负责沉淀可复用的方法
  • Background Review 把一次任务的经验送入下一次任务

学习闭环之所以重要,正是因为其他部分让它有地方发挥作用。 没有长期会话和持续运行环境,沉淀的经验很难形成复利;没有技能加载和权限边界,所谓学习又很容易变成上下文污染。

最后:Hermes 学到的究竟是什么

Hermes 的底层模型没有因此改变。发生变化的是模型下一次工作时能够读取的外部状态。

它所建立的不是新的神经网络参数,而是一个逐渐丰富的个人知识与方法层:

  • Memory 让 Agent 更了解用户
  • Session Search 让 Agent 找回过去发生过什么
  • Skill 让 Agent 记住以后应该怎样做
  • Curator 继续整理、归并和淘汰自动生成的技能

所以,对 Hermes 最准确的概括并不是“一个会自动写 Skill 的聊天机器人”,而是:

一个长期运行的 Agent,在完成现实任务的同时,通过受控的后台复盘,把对用户的理解沉淀为记忆,把解决问题的方法沉淀为技能,并在后续会话中继续复用。

这也是它区别于一次性 Agent 的地方:任务结束了,但经验没有跟着会话一起消失。