当我们谈论 AI Agent 的进化能力时,往往容易陷入两个极端:要么将其视为简单的工具调用链,要么把它想成过于遥远的通用人工智能愿景。NousResearch 推出的 Hermes-Agent 恰好走了一条务实的中间路线 —— 它不追求一次性解决所有问题,而是构建了一套可持续运行的闭环学习系统,让 Agent 能够在与用户的交互中不断积累经验、提炼技能,并将这些经验固化为可复用的知识单元。本文将从架构设计、核心组件、工程参数三个维度,系统解析这一「会成长的 Agent」的实现逻辑。
持续学习的架构基础:闭环从何而来
Hermes-Agent 的核心定位是「The agent that grows with you」,这意味着它并非一个静态的工具集合,而是一个拥有内置学习循环的动态系统。传统的 Agent 架构通常遵循「感知 — 决策 — 执行」的单次循环模式,每次交互都是独立的上下文窗口,处理完即释放。Hermes-Agent 则在此基础上增加了记忆层与反思层,使得每一次交互的结果都能被沉淀下来,形成可供后续复用的知识资产。
从代码组织来看,项目的架构设计采用了典型的子系统模块化思路。核心的 Agent 循环位于 run_agent.py 中的 AIAgent 类,负责 provider 选择、prompt 构建、工具执行、重试与回退、回调处理,以及上下文压缩与持久化。记忆系统则由 hermes_state.py 中的 SQLite 会话存储与专门的记忆子系统共同支撑。技能系统作为最重要的知识沉淀单元,被放置在 skills/ 目录下,支持从交互经验中自动生成新的技能。
这种架构设计体现了一个关键工程理念:prompt 的稳定性很重要,工具执行必须可观测且可中断,会话持久化需要能够支撑长期运行,而平台前端应当共享同一个 Agent 核心。这四个设计主题贯穿了整个系统的实现,也是理解其持续学习能力的关键线索。
技能自创建机制:从经验到可复用单元
Hermes-Agent 最具创新性的特性之一,是它能够在完成复杂任务后自主创建新技能。这一机制被称为「程序化记忆」,其核心逻辑是:当 Agent 成功完成一个涉及五个以上工具调用的复杂任务时,它会主动将这一工作流沉淀为一个可复用的技能文档。
技能创建并非简单的日志记录,而是结构化的知识封装。每个技能都遵循 SKILL.md 格式,包含元数据块与内容块两个部分。元数据块采用 YAML 格式声明技能名称、描述、版本、适用平台以及条件激活规则。内容块则详细描述技能的触发条件、操作步骤、常见陷阱与验证方法。这种结构既便于人类阅读理解,也便于 Agent 在后续交互中快速加载和执行。
技能创建的具体时机包括四种场景:完成复杂任务后、遭遇错误或死胡同后找到可行路径、用户纠正了 Agent 的方法、以及发现值得复用的非平凡工作流。每一项都指向一个核心工程原则 ——Agent 应当从「结果」中学习,而不仅仅是从「指令」中执行。
创建后的技能通过 skill_manage 工具进行管理,支持 create、patch、edit、delete、write_file、remove_file 六种操作。其中 patch 操作被推荐为首选更新方式,因为它只传输变更的文本片段,比完整的 edit 更加 token 高效。
渐进式披露:解决知识膨胀的工程策略
随着 Agent 不断创建新技能,一个工程挑战随之浮现:如何避免系统提示词随着技能数量的增长而膨胀到无法处理的规模?Hermes-Agent 的解决方案是渐进式披露,这一机制借鉴了 UI 设计中的同类概念,将技能的加载过程分为三个层级。
Level 0 是技能列表查询,通过 skills_list() 工具返回所有已安装技能的名称、描述和分类信息。这一层级的输出经过优化,控制在约三千个 token 以内,足以让 Agent 了解自己拥有哪些能力,但不包含具体实现细节。Level 1 是技能内容加载,当 Agent 决定使用某个技能时,通过 skill_view(name) 加载完整的 SKILL.md 内容,包括所有步骤、陷阱说明和验证方法。Level 2 是特定引用文件访问,当技能包含 references、templates、scripts 等辅助目录时,Agent 可以按需加载具体的参考文档。
这种分层策略的工程价值在于,它将知识获取的决策权交给了 Agent 本身。系统不再需要预先加载所有可能用到的知识,而是在运行时根据任务需求动态拉取。这与传统的 RAG 架构有本质区别 —— 后者是被动的检索式获取,而前者是主动的、按需的、按层级的渐进加载。
跨会话记忆:FTS5 与 LLM 摘要的协同
持续学习的另一个关键维度是跨会话信息检索。Hermes-Agent 使用 SQLite 的 FTS5 全文搜索索引来存储和查询历史会话,并通过 LLM 对检索结果进行摘要压缩,形成可供当前上下文使用的记忆片段。
这一机制的工作流程可以概括为三个步骤。首先,历史会话数据被写入带有 FTS5 索引的 SQLite 表中,支持按关键词、时间范围和会话标签进行高效检索。其次,当 Agent 需要召回历史信息时,它使用语义查询而非简单的字面匹配,这意味着用户可以用不同的表达方式询问同一件事,Agent 仍能找到相关的历史记录。最后,检索到的原始会话内容会经过 LLM 摘要处理,提取出与当前任务相关的关键信息,剔除冗余细节,从而在有限的上下文窗口内最大化信息密度。
这种设计的工程参数值得注意。FTS5 索引的维护成本与数据量呈线性关系,但查询速度可以维持在毫秒级别。LLM 摘要的 token 消耗则取决于检索结果的数量和原始长度,需要在召回率与上下文成本之间找到平衡点。实践中,建议将单个摘要的输出控制在五百个 token 以内,并在系统配置中设置合理的检索窗口 —— 例如只回溯过去三十天的会话记录。
用户建模:Honcho 集成的个性化记忆
除了技能和会话,Hermes-Agent 还通过与 Honcho 的集成实现了用户建模能力。Honcho 是一个专注于对话式用户画像的开源项目,它能够从多轮对话中提炼出用户的偏好、习惯和工作方式,并将这些信息以结构化的方式持久化。
在 Hermes-Agent 中,用户建模的结果会被纳入每次对话的上下文提示中,使得 Agent 能够记住用户的身份特征。例如,如果用户经常在下午时段请求数据分析,Agent 可能会主动在相应时段准备好相关的工具集。如果用户偏好某种代码风格,Agent 会在生成代码时自动遵循这一偏好。这种个性化不是通过硬编码实现的,而是通过持续观察对话模式动态学习得到的。
从工程实现角度看,用户建模模块采用了 dialectic 方法 —— 即通过对话辩证的方式逐步深化对用户的理解。它不是一次性生成的静态画像,而是随着交互的深入不断迭代更新的动态模型。这与技能系统的设计理念一脉相承:知识应当被组织成可成长的单元,而非一次性填充的静态数据。
技能系统的条件激活与信任分级
在企业级应用场景中,技能的安全性是一个不可回避的问题。Hermes-Agent 为此设计了一套完整的条件激活机制与信任分级体系。
条件激活允许技能根据当前环境状态动态决定是否显示自己。关键配置字段包括:fallback_for_toolsets 用于指定当某些工具集可用时隐藏该技能,通常用于免费替代方案;requires_toolsets 用于指定只有当某些工具集存在时才显示该技能;以及对应的 fallback_for_tools 和 requires_tools 字段用于细粒度控制。一个典型例子是内置的 duckduckgo-search 技能,它配置了 fallback_for_toolsets: [web],这意味着当用户配置了 FIRECRAWL_API_KEY 并启用 web 工具集时,该技能会自动隐藏 —— 因为有了更强大的替代方案。
信任分级则将技能来源划分为四个层级。builtin 层级代表随 Hermes 一起发布的内置技能,永远可信。official 层级对应 repo 中 optional-skills/ 目录下的官方可选技能,同样享有内置信任。trusted 层级涵盖 openai/skills、anthropics/skills 等官方认可的注册表,享有比社区来源更宽松的策略。community 层级则涵盖 skills.sh、well-known 端点、自定义 GitHub 仓库等第三方来源,其非危险级别的发现可以通过 --force 参数覆盖,但危险级别的阻断不可绕过。
所有通过 Hub 安装的技能都会经过安全扫描,检查内容包括数据外泄、提示词注入、破坏性命令和供应链风险等维度。
可复用的成长框架:工程参数与实践建议
基于上述分析,我们可以提炼出一套可复用的 Agent 成长框架工程参数。
在技能创建层面,建议设置自动化触发的最小任务复杂度阈值为五个工具调用,这既能避免创建过于简单的技能导致知识库膨胀,又能确保沉淀下来的都是有价值的可复用单元。技能的版本号遵循语义化版本规范,便于后续的更新管理和依赖追踪。
在记忆检索层面,FTS5 索引建议按月份分表,以平衡查询性能与存储成本。LLM 摘要的生成频率可以设置为每次会话结束时自动触发,但仅对包含有效知识沉淀的会话生成摘要。检索窗口的默认值建议设为三十天,超出此范围的历史信息需要显式请求才会召回。
在用户建模层面,建议为每个用户维护独立的画像文件,存储路径为 ~/.hermes/users/{user_id}/profile.md。画像的更新频率可以设置为每十次对话后进行一次增量更新,而非每次对话都重新生成,以控制 token 消耗。
在安全策略层面,所有第三方技能在安装时必须经过安全扫描,不建议绕过这一检查。对于企业内部部署的场景,可以通过配置 ~/.hermes/config.yaml 中的 skills.trusted_sources 字段来限定允许安装的技能来源范围。
写在最后
Hermes-Agent 的持续学习架构之所以值得关注,不仅因为它提供了一套完整的技术方案,更因为它展示了一种务实的 Agent 进化思路:不追求一次性构建完美系统,而是通过闭环反馈机制让系统在与环境的交互中持续改进。技能自创建解决了知识沉淀问题,渐进式披露解决了上下文膨胀问题,跨会话检索解决了经验复用问题,用户建模解决了个性化问题。这四个子系统的协同工作,构成了一个真正意义上的「会成长的 Agent」。
对于希望在自有系统中复用这一思路的工程师而言,关键不在于照搬每一行代码,而在于理解其背后的工程哲学:让 Agent 从自己的结果中学习,让知识以结构化、可版本化的方式沉淀,让获取知识的决策权交给运行时而非预加载。当这些原则被正确落地时,我们才能说真正构建出了具备持续进化能力的 AI Agent。
资料来源:Hermes-Agent 项目由 Nous Research 开发,采用 MIT 许可证,核心架构与技能系统文档分别见于 GitHub 仓库与官方文档站点。