Hermes-Agent 定位为「The agent that grows with you」—— 一个具备内置学习循环的自我改进 AI 智能体。与传统的工具编排层框架不同,它的独特定位在于让智能体在执行任务过程中自主习得新技能、沉淀经验知识,并在多会话场景中持续演进。这种能力扩展机制不是依赖外部训练 pipeline,而是在运行时通过结构化的技能系统与有界记忆管理实现,形成一个闭合的自改进循环。

技能系统:智能体的程序化记忆

Hermes-Agent 的核心学习机制之一是技能(Skills)系统,这是一种程序化记忆的工程实现。技能本质上是按需加载的知识文档,采用渐进式披露(Progressive Disclosure)模式最小化 token 消耗。技能存储在~/.hermes/skills/目录,每个技能包含主文件 SKILL.md 以及可选的 references、templates、scripts 和 assets 子目录。

技能加载分为三个层级:Level 0 通过skills_list()返回技能名称和描述列表,消耗约 3k tokens;Level 1 通过skill_view(name)加载完整技能内容;Level 2 通过skill_view(name, path)加载特定参考文件。这种分层设计确保智能体只在真正需要时才加载完整技能内容,避免上下文窗口的浪费。

技能创建的触发条件是理解该框架学习机制的关键。智能体在以下四种场景会自动创建新技能:完成复杂任务后(5 + 工具调用)、在遭遇错误并找到解决方案后、用户纠正了其执行方法时、以及发现非平凡工作流时。这意味着技能创建不是被动的文档记录,而是智能体对自身认知过程的主动抽象和结构化。

技能创建通过skill_manage工具完成,支持 create(从零创建)、patch(增量修补,推荐方式)、edit(完整重写)、delete(删除)四种操作。patch 方式因其 token 效率而被推荐使用 —— 它只需要在工具调用中包含变化的文本,而非整个技能内容。这种设计体现了对运行时资源的经济性考量。

技能自改进机制

技能不仅能被创建,还能在使用过程中持续改进。当智能体在执行某个技能的过程中发现更优路径、遇到新的边界条件、或获得用户反馈时,它会通过 patch 操作更新已有技能。这种自改进是隐式发生的 —— 不需要显式触发,而是在正常任务执行循环中自然完成。

技能系统的另一个重要特性是条件激活机制。通过在 SKILL.md 的 metadata 中声明fallback_for_toolsetsrequires_toolsets字段,技能可以基于当前会话中可用的工具集动态显示或隐藏。例如,内置的 duckduckgo-search 技能使用fallback_for_toolsets: [web],当用户配置了 FIRECRAWL_API_KEY 时,web 工具集可用,该技能自动隐藏;当 API key 缺失时,技能作为免费替代方案自动浮现。这种动态适配能力使技能系统具备了环境感知的学习特征。

外部技能目录支持允许智能体访问本地目录之外的技能源。通过在配置中声明external_dirs,智能体可以扫描多个目录并将发现的技能统一纳入索引。外部目录中的技能是只读的 —— 智能体的创建和修改操作始终写入主目录~/.hermes/skills/。这种设计支持团队共享技能库的场景,同时保持个体智能体记忆的独立性。

有界记忆系统:结构化的经验沉淀

与技能的程序化记忆不同,Hermes-Agent 的记忆(Memory)系统负责存储声明式知识。该系统由两个有界文件组成:MEMORY.md 存储智能体自身的笔记,包括环境事实、工作流约定和习得教训,容量为 2200 字符(约 800 tokens);USER.md 存储用户画像,包括偏好、通信风格和技术背景,容量为 1375 字符(约 500 tokens)。

这种容量限制是有意设计的。严格的字符上限强制智能体对记忆内容进行筛选和压缩,确保只有最关键的信息进入系统提示词。记忆条目之间用§分隔符区分,每个条目可以是多行内容。当记忆接近容量上限时,智能体需要主动合并或替换旧条目以腾出空间。

记忆管理的工程细节值得深入理解。智能体通过memory工具管理记忆,支持 add、replace、remove 三种操作。replace 和 remove 操作使用子字符串匹配定位目标条目,无需提供完整文本。系统会自动检测重复条目并拒绝添加完全相同的内容。安全扫描机制会检查记忆内容中的注入模式和潜在威胁,确保注入系统提示词的内容安全。

会话搜索(session_search)提供了超越有界记忆的检索能力。所有 CLI 和消息传递会话存储在 SQLite 数据库(~/.hermes/state.db)中,通过 FTS5 全文搜索索引。搜索查询返回相关会话后,由 LLM 进行摘要生成,帮助智能体回忆数周前的具体讨论内容。这与有界记忆形成了互补:记忆存储关键事实(固定消耗约 1300 tokens),会话搜索处理按需查询(搜索时产生 token 开销)。

反馈循环与周期性提醒

Hermes-Agent 的学习循环不仅依赖主动创建,还包含周期性的自我提醒机制。智能体会定期收到「nudge」—— 内部提示,引导它检查是否需要将新学到的内容存入记忆或创建为技能。这种设计解决了 LLM 天然倾向于关注当前上下文而忽视长期知识沉淀的问题。

用户建模是另一个反馈来源。USER.md 中的内容不仅来自智能体的观察,还可能来自用户的显式声明。通过 Honcho 方言支持,智能体可以建立跨越会话的用户模型,理解用户的偏好模式和交互风格。这些信息被纳入记忆系统,影响智能体后续的响应策略。

外部记忆提供者(Memory Providers)扩展了内置记忆能力。Hermes-Agent 集成了 8 个外部记忆插件,包括 Honcho、Mem0、Holographic 等,可提供知识图谱、语义搜索、自动事实提取等高级能力。这些提供者与内置记忆并行运行,从不替代它,而是叠加额外的记忆增强功能。

动态能力扩展的工程路径

将上述机制串联起来,Hermes-Agent 的能力扩展遵循一个清晰的工程路径:智能体在执行任务时积累经验,当经验足够复杂或有价值时,自动创建技能进行结构化沉淀;执行过程中的环境信息、用户偏好和习得教训通过记忆系统持久化;跨会话的知识召回依靠 FTS5 会话搜索实现;周期性提醒确保重要信息不会被遗漏。这个循环的独特之处在于它是完全在运行时发生的 —— 不需要离线训练 pipeline,不需要人工标注数据,智能体自身就是学习和推理的主体。

对于工程实践者,理解这些机制有助于更好地配置和调优智能体。技能系统的渐进式披露设计需要关注技能文档的颗粒度 —— 过于粗粒度会导致一次加载过多不相关内容,过于细粒度则增加检索复杂度。记忆系统的容量限制要求定期审视记忆条目质量,移除已过时信息。会话搜索的 token 成本意味着不应将其作为首要知识来源,而是作为记忆系统的补充检索手段。

这些设计选择共同支撑了 Hermes-Agent「与你一同成长」的定位 —— 智能体不是静态的工具集合,而是一个在学习中持续演化的能力实体。


参考资料