当我们谈论 AI Agent 的能力边界时,一个核心命题始终存在:代理能否像人类一样「学以致用」,在完成任务的过程中不断沉淀经验、扩展能力?大多数现有框架将代理定位为静态工具 —— 给定一组工具,代理调用它们执行任务,完成后状态归零。Hermes Agent 打破了这个范式,它构建了一个完整的自主成长闭环:从经验中提取技能、在使用中优化技能、通过记忆持久化知识、跨会话检索积累的洞见。这篇文章将聚焦其工程实现细节,解析技能系统、记忆机制和会话搜索如何协同工作,使代理真正具备「自我进化」的能力。
技能系统:从经验中萃取可复用能力
Hermes Agent 的技能系统(Skills System)是其自我进化的核心载体。与其将技能理解为静态的指令集,不如将其视为代理的程序化记忆—— 当代理完成一个非平凡的工作流时,它有能力将这套方法论固化为一个可复用的技能,供将来类似场景直接调用。这种设计借鉴了 progressive disclosure(渐进式披露)模式,旨在平衡能力丰富性与 token 消耗:代理只需要知道有哪些技能可用(Level 0,约 3k tokens),在真正需要时才加载完整技能内容(Level 1),甚至可以只加载某个具体参考文件(Level 2)。
技能以 Markdown 格式存储在 ~/.hermes/skills/ 目录下,每个技能一个子目录,必含 SKILL.md 作为主指令入口,可选包含 references/(额外文档)、templates/(输出格式)和 scripts/(可调用的辅助脚本)。技能的元数据在文件头部声明,包括名称、描述、版本、支持的平台(macos/linux/windows),以及两个关键的条件激活字段:fallback_for_toolsets 和 requires_toolsets。前者使得技能在特定工具集不可用时才显现(典型的 fallback 模式,如当没有 Firecrawl API 时自动启用 DuckDuckGo 搜索技能),后者则限制技能仅在指定工具集可用时展示。这种条件激活机制避免了无关技能的噪声干扰,让代理在正确的上下文中加载正确的技能。
代理创建技能的触发条件经过精心设计:完成超过 5 次工具调用的复杂任务后、成功解决错误或死胡同后、用户纠正了代理的执行方式后、发现非平凡工作流时。这些时机确保只有经过验证的有效经验才会被沉淀,避免代理将错误的方法论固化为技能。创建技能的动作通过 skill_manage 工具完成,支持 create(从零创建)、patch(修补式更新,推荐做法,更节省 token)、edit(整体替换)和 delete(删除)等操作。值得注意的是,patch 是更新的首选方式,因为它只需要在工具调用中包含变更的文本片段,而非完整的技能内容,这在长上下文场景下有显著的 token 效率优势。
技能的来源远不止代理自主创建。Hermes Agent 集成了多个外部技能仓库,形成了一个开放的技能生态:官方可选技能(official/ 前缀,与 Hermes 源码一同发布, builtin trust)、skills.sh(Vercel 的公共技能目录)、well-known 端点(通过 /.well-known/skills/index.json 发现的技能)、直接 GitHub 安装(支持任意公开仓库),以及 ClawHub、LobeHub、Claude MarketPlace 等第三方市场。所有从外部安装的技能都会经过安全扫描,检查数据泄露、提示注入、破坏性命令和供应链风险,扫描结果为 dangerous 的技能无法被强制安装,而 caution 或 warn 级别可以通过 --force 参数_override。这种信任分级机制(builtin/trusted/community 三级)既保证了灵活性,又为代理的技能获取提供了安全边界。
记忆机制:有边界的持续学习
如果说技能系统是代理的「外显知识库」,那么记忆机制就是其「内隐经验集」。Hermes Agent 的持久记忆由两个文件构成:MEMORY.md(代理的个人笔记,2200 字符上限,约 800 tokens)和 USER.md(用户画像,1375 字符上限,约 500 tokens)。两者都存储在 ~/.hermes/memories/,在每个会话启动时以冻结快照的形式注入系统提示符。这种设计遵循一个关键原则:记忆是 bounded(有限)的,通过严格的字符限制迫使代理对记忆内容进行筛选和压缩,避免无效信息的无限累积。
记忆的管理完全由代理自主完成。通过 memory 工具,代理可以执行 add(添加新条目)、replace(替换已有条目,使用子字符串匹配定位)和 remove(删除条目,同样基于子字符串匹配)三种操作。没有独立的 read 操作 —— 记忆内容在会话启动时自动注入上下文,代理将其视为对话背景的一部分。这种「写入即持久、读取即注入」的模式模拟了人类记忆的工作方式:重要的 facts 始终在前台,次要信息需要主动检索。
代理何时应该主动记忆?文档明确列出了应保存的项目:用户偏好(保存至 user target)、环境事实(保存至 memory target)、来自用户的纠正、项目的编码规范和约定、已完成工作的记录、以及用户的明确请求。相反,琐碎或显而易见的信息、易于通过搜索重新发现的事实、原始数据转储和会话特定的临时信息则不应该进入记忆。这种筛选机制确保了记忆的 high-value 特性 —— 每一条记忆条目都应该是代理在当前和未来会话中确实需要的知识。
当记忆容量接近上限时(系统提示符头部的使用百分比会显示当前状态),代理需要主动进行容量管理:识别可合并或删除的条目,将多个相关事实浓缩为一条紧凑的记录,然后为新信息腾出空间。超过 80% 容量时就应该开始 consolidation。这种 bounded memory 设计迫使代理不断反思和优化自己的知识组织方式,本身就是一种「元认知」训练的体现。
会话搜索:跨越时间的知识检索
记忆机制解决的是「关键 facts 始终可用」的问题,但代理积累的经验远不止记忆文件中那几千字符。Hermes Agent 将会话历史本身变成可检索的知识源:所有 CLI 和消息平台的会话都存储在 SQLite 数据库(~/.hermes/state.db)中,并启用 FTS5(Full-Text Search 5)全文索引。当代理需要查找数周前讨论过的特定内容时,它可以通过 session_search 工具发起搜索,搜索结果经过 Gemini Flash 模型 summarization 后返回给代理。
会话搜索与持久记忆的关系是互补的:记忆是主动的、高优先级的、经过代理筛选的关键事实;会话搜索是被动的、全量的、基于关键词的回忆机制。前者适合「用户的项目使用 Go 1.22 和 chi 路由」这种应该永远在上下文中的人才,后者适合「上次我们讨论的那个数据库迁移问题,解决方案是什么」这种需要定位特定过去会话的需求。两者结合,代理既拥有「本能记忆」,也拥有「档案检索」能力,形成了一个完整的 temporal knowledge 管理层。
更深层的跨会话理解来自 Honcho 集成。Honcho 是一个独立的用户建模服务,与 Hermes Agent 的内置记忆共存于 hybrid 模式(默认模式):原有的 MEMORY.md 和 USER.md 保持不变,Honcho 在其上增加了一个由 AI 生成的用户理解层,能够从多会话、多平台的交互模式中提取用户的深层偏好、沟通风格和工作习惯。这种「 dialectic user modeling」(辩证用户建模)使得代理能够随着时间推移越来越精准地理解和服务于特定用户,而不仅仅是执行命令。
技能自改进:使用中的持续优化
Hermes Agent 的自我进化不仅仅体现在技能的创建,还体现在技能的使用中优化。代理在调用技能执行任务的过程中,会根据执行结果、用户反馈和错误模式,动态地 patch 或更新已有技能的内容。这意味着技能不是一次性生成的静态文档,而是随着代理对其的使用而持续演进的 living documents。例如,一个最初编写的部署技能可能只覆盖基础的 Kubernetes 部署流程,但在多次使用中遇到不同的环境问题后,代理会逐步将错误处理、环境检测和回滚策略添加到技能中,使其越来越健壮。
这种「使用中学习」的机制与传统的「离 线训练 + 在线推理」范式有本质区别。它不依赖大规模的离线数据集和 gradient-based 学习,而是在实际的 task-solving 过程中,通过每一个工具调用的结果反馈来调整知识的表达方式。Tokens(这里特指技能文件的 token)和 token(语言模型的 token)消耗成为了代理自我改进的直接成本 —— 这意味着优化技能使其更高效不仅仅是一个工程目标,也是一个经济约束下的自然选择。
工程意义与局限性
Hermes Agent 的自我进化机制为 AI Agent 的设计提供了一条有别于主流的方向:不是通过更大的模型或更多的工具来扩展能力,而是通过让代理自身成为知识的生产者和消费者,形成一个可持续的能力增长飞轮。其工程实现有几个关键点值得关注:bounded memory 避免了上下文膨胀问题、条件激活的技能系统降低了无关干扰、严格的安全扫描保障了外部技能的可信度、session search 实现了时间维度的知识复用。
但也需要清醒地看到这种模式的局限性。技能的自改进仍然依赖于代理对「什么应该被记住」的判断能力,如果判断失误,错误的经验可能被固化。记忆的字符限制虽然强制了筛选,但也可能导致真正的长期知识被遗忘。session search 的质量依赖于索引的完整性和搜索召回的准确性。更重要的是,当前的自我进化机制主要作用于知识层面,而非 reasoning 层面 —— 代理可以学习「怎么做」,但很难自主学习「怎么想」。这些问题为未来的研究提供了丰富的空间。
资料来源:GitHub NousResearch/hermes-agent 仓库(15.8k Stars)及官方文档。