Hotdry.

Article

Hermes-Agent 持续学习机制:从经验累积到能力演进的技术路径

解析 NousResearch 的 Hermes-Agent 如何通过记忆系统、技能系统和会话搜索三大机制构建闭合学习环,实现智能体随使用而增长的工程化路径。

2026-05-11ai-systems

在当前大语言模型智能体(Agent)的发展浪潮中,多数框架仍停留在 “单次会话即结束” 的交互模式。 NousResearch 推出的 Hermes-Agent 反其道而行之,提出了 “The agent that grows with you” 的核心理念,其本质是一套可随使用时长持续进化的智能体架构。本文将从工程实现层面解析其持续学习机制,聚焦记忆系统、技能系统和会话搜索三大核心组件的设计逻辑与可落地参数。

闭合学习环的整体架构

Hermes-Agent 的持续学习并非依赖单一技术栈实现,而是由多个相互配合的子系统共同构建。官方将这一机制称为 “闭合学习环”(Closed Learning Loop),其核心思想是:智能体不仅需要完成当前任务,还应在任务完成后主动提取有价值的信息并持久化,以便在未来场景中复用。

从架构层面看,这一学习环由以下几层组成:第一层是短期会话层,记录当前对话的完整上下文;第二层是程序化记忆层,即 Skills 系统,用于保存可复用的工作流程;第三层是陈述性记忆层,包含 MEMORY.md 和 USER.md 两个文件,分别存储环境事实和用户画像;第四层是跨会话检索层,通过 FTS5 全文索引和 LLM 摘要实现历史对话的按需召回。最外层是外部记忆提供者,包括 Honcho、Mem0、Holographic 等插件,进一步扩展记忆容量和语义理解能力。

这种分层设计的核心优势在于各层职责清晰、 Token 消耗可控。短期会话层随对话结束而释放,程序化和陈述性记忆以固定开销持续累积,而跨会话检索则是按需触发,不会产生固定的上下文膨胀。

记忆系统的工程实现

MEMORY.md 与 USER.md 的分工

Hermes-Agent 将持久化记忆拆解为两个独立的存储文件,各自承担不同的认知职能。MEMORY.md 定位为 “智能体的个人笔记”,用于记录环境事实、工作流约定和从经验中总结的教训。其容量上限为 2,200 字符,约合 800 个 Token。USER.md 则专注于用户画像,存储用户的沟通偏好、技术水平、身份信息和习惯性要求,容量上限为 1,375 字符,约合 500 个 Token。

这种严格容量限制的设计并非约束,而是有意为之的工程决策。官方文档明确指出,字符上限的作用是 “保持记忆聚焦”—— 当记忆条目接近饱和时,智能体必须主动进行合并或替换,而非无限堆积。这一机制迫使 Agent 在每个新记忆加入前评估其相对于现有记忆的优先级,长期来看形成了自然的信息过滤和精华提炼能力。

在实际使用中,MEMORY.md 的典型条目包括:项目使用的技术栈("Project ~/code/api uses Go 1.22, sqlc for DB queries, chi router")、环境配置("This machine runs Ubuntu 22.04, has Docker and Podman installed")、以及经验教训("The staging server needs SSH port 2222, not 22")。USER.md 则记录用户的沟通风格("User prefers concise responses")、工具偏好("Prefers TypeScript over JavaScript")和流程习惯("User always wants PR review before merge")。

冻结快照模式与容量管理

记忆注入系统提示的时机是一个容易被忽视但至关重要的细节。Hermes-Agent 采用 “冻结快照” 模式:记忆内容在会话启动时读取一次并渲染到系统提示中,此后该快照在当前会话内保持不变。这意味着 Agent 在一次会话中对记忆的增删改操作会立即写入磁盘,但这些变更要等到下一会话才会生效到系统提示中。

这一设计的动机是性能优化:冻结快照允许对系统提示前缀进行缓存(Prefix Caching),避免每次模型推理都重新处理记忆内容。对于需要频繁交互的智能体场景,这种优化可显著降低 Token 消耗和推理延迟。

容量管理方面,当用户尝试添加超过容量上限的条目时,系统会返回错误并列出当前所有条目,要求 Agent 先进行整合或删除。这一机制确保 Agent 必须定期审视记忆内容的时效性和相关性。官方建议当记忆使用率超过 80% 时主动进行整合,合并多个相关条目为更紧凑的单一条目。

外部记忆提供者

除内置的记忆系统外,Hermes-Agent 还支持接入外部记忆提供者,以满足更深层、更大规模的记忆需求。目前集成的提供者包括 Honcho、OpenViking、Mem0、Hindsight、Holographic、RetainDB、ByteRover 和 Supermemory。

这些外部提供者运行在内置记忆 “之上” 而非 “替代” 内置记忆,其作用是提供语义搜索、知识图谱构建和跨会话用户建模等高级能力。配置外部提供者后,Agent 可以通过自然语言查询过去任意会话中讨论过的内容,而不仅限于主动写入 MEMORY.md 的显式条目。切换提供者的操作通过 hermes memory setup 命令交互式完成,hermes memory status 则用于查看当前激活的提供者及其状态。

技能系统:程序化记忆的构建

技能作为可复用工作流

Skills 系统是 Hermes-Agent 实现 “随使用增长” 的另一核心组件。与陈述性记忆不同,技能代表的是 “如何做” 的过程性知识,而非 “是什么” 的事实性描述。当 Agent 完成一个需要多次工具调用(5 次以上)的复杂任务后,它会主动将这一工作流程提炼为可复用的技能。

技能的存储位置为 ~/.hermes/skills/,每个技能对应一个独立目录,其中必须包含一个 SKILL.md 文件作为主指令文档。技能目录还可以包含 references/(补充文档)、templates/(输出格式模板)、scripts/(可调用的辅助脚本)和 assets/(辅助资源)等子目录。

技能通过 skill_manage 工具进行管理,支持创建(create)、补丁式修改(patch)、全量编辑(edit)、删除(delete)和文件操作(write_file、remove_file)等动作。文档建议优先使用 patch 而非 edit,因为前者只需要在工具调用中包含变化的文本部分,Token 消耗更低。

渐进式披露与 Token 优化

技能系统采用了巧妙的渐进式披露(Progressive Disclosure)机制来控制 Token 开销。技能加载分为三个层级:Level 0 是技能列表,仅包含名称和描述元数据,约消耗 3k Token;Level 1 是完整技能内容,包含全部指令和流程描述;Level 2 则是针对特定参考文件的精确加载。

这种设计的精妙之处在于:Agent 在规划阶段只需要知道有哪些技能可用(Level 0),在决定使用某一技能时才加载其完整内容(Level 1),在执行具体步骤时若需要查看参考文档才进一步加载(Level 2)。整个过程中,不存在无意义的完整技能内容注入,除非 Agent 确实需要该技能的具体指导。

技能中心与多源集成

Hermes-Agent 的 Skills Hub 整合了八个以上的技能来源,形成了开放的技能生态系统。这些来源包括:官方可选技能(official,与 Hermes 源码同仓库维护)、Vercel 的 skills.sh 社区目录、支持 .well-known/skills 约定的任意网站、直接 GitHub 仓库路径、以及 ClawHub、LobeHub 等第三方市场。

每个来源根据其可信度被分配不同的信任级别:builtin 和 official 来源被视为完全可信,trusted 来源(如 OpenAI 和 Anthropic 的官方技能库)享有较宽松的安全策略,而 community 来源则需要经过安全扫描,非危险级别的警告可被 --force 参数覆盖,但危险级别的判定不可绕过。

技能发布者可以通过 GitHub 仓库创建自定义的技能源(Tap),只需将技能目录组织为标准的 skills/ 布局并推送到仓库,任何 Hermes 用户即可通过 hermes skills tap add 订阅并安装其中的技能。发布者还可以在技能 SKILL.md 的 frontmatter 中声明所需的配置项和环境变量,这些配置会在技能加载时自动注入到 Agent 的上下文中。

跨会话搜索与会话管理

FTS5 与 LLM 摘要的结合

记忆系统只能存储 Agent 主动提炼的精华信息,但真实的交互中还有大量未被显式记录的有价值对话。Hermes-Agent 通过会话搜索机制弥补这一空白:所有 CLI 和消息平台的会话都会被持久化到 SQLite 数据库(~/.hermes/state.db),并启用 FTS5 全文索引支持高效检索。

当 Agent 需要查找历史会话时,它向 session_search 工具提供自然语言查询,FTS5 首先定位相关会话片段,随后这些片段由 Gemini Flash 模型进行摘要压缩后返回给 Agent 使用。这一设计确保 Agent 可以在数周前的对话中定位特定讨论内容,同时不会产生大量无关上下文注入。

会话搜索与前述的 MEMORY.md/USER.md 记忆形成了功能互补:记忆系统存储必须始终可用的关键事实(固定 Token 开销),而会话搜索则提供按需查询的无限容量后备。对于 “上周我们讨论过 X 吗?” 这类问题,Agent 应使用会话搜索;对于 “这个项目的技术栈是什么?” 这类问题,Agent 应查询记忆。

子字符串匹配的记忆操作

在记忆编辑方面,MEMORY.md 和 USER.md 的条目支持通过子字符串匹配进行定位和操作。例如,若要将 “User prefers dark mode in all editors” 修改为 “User prefers light mode in VS Code, dark mode in terminal”,只需要在 old_text 参数中提供唯一可识别的子字符串(如 "dark mode"),系统会验证该子字符串仅匹配一个条目后执行替换。

这种设计降低了记忆维护的认知负担:用户无需记住完整的原始条目内容,只需提供足以唯一标识的片段即可完成编辑操作。若提供的子字符串匹配了多个条目,系统会返回错误并要求提供更具体的匹配文本。

能力演进的关键触发条件

理解 Hermes-Agent 如何判断 “何时学习” 与 “学习什么” 是把握其持续学习机制的关键。根据官方文档,Agent 会在以下场景触发技能创建:当任务需要超过 5 次工具调用才能完成时,Agent 认为这是一个值得提炼为可复用流程的复杂任务;当任务执行过程中遇到错误或死胡同并找到替代路径时,Agent 会将这一 “试错经验” 记录下来;当用户明确纠正了 Agent 的方法时,Agent 会将正确方法固化为技能。

这些触发条件的设计逻辑是:复杂性(工具调用数量)、鲁棒性(错误恢复经验)和反馈响应(用户纠正)三者共同构成 “值得学习” 的信号。过短的简单任务不值得固化为技能,因为未来遇到类似任务的概率低且复用的 Token 成本不划算。

对于记忆层面的学习,触发条件则更加灵活。Agent 被期望主动保存用户偏好、环境事实、工作流约定和经验教训。这意味着 Agent 需要在交互中持续评估当前信息是否具有持久价值,并将判断结果通过 memory 工具的 addreplaceremove 操作反映到持久存储中。

部署架构与成本考量

Hermes-Agent 的另一差异化定位是 “随处运行,不绑笔记本”。它支持七种终端后端:本地、Docker、SSH、Singularity、Modal、Daytona 和 Vercel Sandbox。其中 Daytona 和 Modal 提供 “服务器 less 持久化” 能力:Agent 的运行环境在空闲时休眠,按需唤醒,几乎不在会话间隙产生计算成本。

这一特性与持续学习机制形成了有趣的协同:用户可以在便宜的 5 美元 VPS 上运行 Hermes,享受完整的记忆和技能系统,而无需为 GPU 推理支付额外成本。模型推理本身可以通过 OpenRouter(支持 200+ 模型)、OpenAI、Anthropic、自定义端点等多种渠道完成,Agent 与模型供应商之间通过 hermes model 命令灵活切换。

对于组织内部署的场景,Hermes-Agent 的 Skills Hub 支持通过私有 GitHub 仓库发布内部技能库,团队成员只需添加 Tap 即可同步更新。记忆存储完全在本地文件系统,敏感信息不经过第三方服务。这种架构在满足隐私合规要求的同时,仍保留了跨设备和跨会话的连续学习能力。

工程化落地的关键参数

若要将 Hermes-Agent 的持续学习机制工程化落地,以下参数值得关注。MEMORY.md 容量建议控制在 2,000 字符以内(约 73% 使用率),保留 200 字符的缓冲空间用于紧急记忆写入,同时建议在容量超过 1,760 字符时主动进行整合。USER.md 容量建议控制在 1,200 字符以内,重点记录高频变化的偏好信息而非静态身份信息。

技能创建阈值建议保持默认值(5 次工具调用),但可以通过自定义 Agent 的系统提示调整这一阈值 —— 对于高频短任务场景可适度降低,对于低频长任务场景可适度提高。技能数量方面,建议单个智能体的活跃技能控制在 20 个以内以便于管理,超出此数量应考虑按类别拆分为多个技能目录。

会话搜索的 LLM 摘要模型默认为 Gemini Flash,在精度要求更高的场景可配置为更强大的模型,但需权衡 Token 成本。会话历史保留策略建议结合存储空间和检索需求进行配置:若本地存储宽裕,可保留更长时间段以支持更远期的跨会话检索;若存储紧张,可配置定期归档或截断旧会话。

总结

Hermes-Agent 的持续学习机制并非单一的技术创新,而是一套精心设计的工程架构。其核心洞察在于:智能体的 “成长” 不是模型的参数更新,而是记忆、技能和检索能力的分层累积。通过严格容量控制的陈述性记忆、按需加载的程序化技能、以及 FTS5 加速的跨会话搜索,Hermes-Agent 在保持固定 Token 开销的前提下,实现了随使用时长持续进化的智能体能力。

资料来源:Hermes-Agent GitHub 仓库及其官方文档(hermes-agent.nousresearch.com/docs/)

ai-systems

内容声明:本文无广告投放、无付费植入。

如有事实性问题,欢迎发送勘误至 i@hotdrydog.com