《把 Hermes Agent 养成你的专属帕鲁:从捕捉到满级实战指南》(二)
在生产环境里跑过 Agent 的人会懂:上下文不是免费的,每多一个字都在烧钱。大多数 AI Agent 的痛点不是"不会",而是"学了就忘"。用户当前的消息、最近的对话历史、正在执行的工具结果,都直接放在这里。下次遇到类似任务,Agent 不会重新摸索,而是直接调用对应的 Skill,就像调用一个函数。如果说 Skill 是"学会了什么",记忆就是"记住了什么"。很多 Agent 框架只做到了"记
目录
1. 自我学习机制:Hermes 是怎么"长脑子"的
大多数 AI Agent 的痛点不是"不会",而是"学了就忘"。你教它一次工作流程,下次重启会话,一切归零。Hermes 的自我学习系统要解决的就是这个问题——让经验成为资产,而不是消耗品。
这套系统的核心代码分布在 tools/skills_tool.py、agent/memory_manager.py、hermes_state.py 和 trajectory_compressor.py 中。下面从机制到实现,逐层拆解。

1.1 闭合学习回路:执行 → 评估 → 提炼 → 进化
Hermes 的自我学习不是某个单一功能,而是一个持续运转的闭环:
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ 执行 │ → │ 评估 │ → │ 提炼 │ → │ 进化 │
│(Run Task)│ │(Review) │ │(Extract)│ │(Update) │
└─────────┘ └─────────┘ └─────────┘ └─────────┘
↑ │
└──────────────────────────────────────────┘
执行:Agent 接到任务,调用工具链完成操作(终端、文件、浏览器等)。
评估:任务完成后,系统回溯整个执行轨迹,判断:
- 哪些步骤是有效的?
- 哪些路径走错了、后来被纠正了?
- 最终结果是否符合预期?
提炼:如果轨迹有价值,系统会将其抽象为一个 Skill——不是原始的操作日志,而是可复用的工作流模板。
进化:已有的 Skill 不会直接被覆盖。如果发现旧 Skill 有不准确的地方,系统会生成增量补丁,保留主干、修正细节。
这个闭环的关键在于评估节点。很多 Agent 框架只做到了"记录历史",但没有"判断价值"。Hermes 在 trajectory_compressor.py 中实现了轨迹压缩和评估逻辑,能够区分"值得学习的经验"和"无意义的试错"。
1.2 Skill 系统:经验的结构化沉淀
Skill 是 Hermes 自我学习的载体。它不是一段聊天记录,而是一个标准化的、可执行的流程定义。
Skill 的存储结构
Hermes 的 Skill 遵循 agentskills.io 标准格式,以 Markdown 文件形式存储在 skills/ 目录:
# skills/software-development/code-review/SKILL.md
name: code-review
description: 代码审查助手
trigger: "帮我 review 这段代码"
tools:
- terminal
- file
prompt: |
你是资深代码审查专家。请检查:
1. 代码规范
2. 潜在 bug
3. 性能问题
4. 改进建议
skills/ 目录下的内置技能覆盖了多个领域:
software-development/— 开发工作流(TDD、调试、规划)creative/— 创意工具devops/— 自动化部署research/— 研究辅助productivity/— 生产力工具
Skill 的自动创建
当一次任务的复杂度超过一定阈值(比如工具调用超过 5 次),系统会自动触发提炼流程:
- 轨迹收集:
hermes_state.py记录完整的会话历史,包括工具调用序列和结果 - 关键路径提取:
trajectory_compressor.py压缩轨迹,保留决策点和有效路径 - 模板生成:将提取出的模式写入
skills/目录,形成新的 Skill 文件 - 注册生效:
tools/skills_tool.py自动扫描skills/目录,新 Skill 立即可用
Skill 的迭代更新
Skill 不是写死了就不能改的。随着使用积累,系统会:
- 打补丁:发现旧 Skill 某一步不适用于新场景,生成增量修正
- 版本管理:所有 Skill 都是纯文本 Markdown,天然支持 Git 版本控制
- 渐进加载:不会一次性把所有 Skill 塞进上下文(后面会讲)
1.3 记忆系统:四层梯度架构
如果说 Skill 是"学会了什么",记忆就是"记住了什么"。Hermes 的记忆系统是有梯度的——不同频率、不同用途的信息,放在不同的层级。
代码层面,这套系统由 agent/memory_manager.py 和 hermes_state.py 协同实现。
第一层:工作记忆(Working Memory)
位置:当前 LLM 上下文窗口内
代码:agent/prompt_builder.py 中的上下文组装逻辑
这是 Agent 正在处理的信息。用户当前的消息、最近的对话历史、正在执行的工具结果,都直接放在这里。特点是高频访问、实时可见,但容量受模型上下文限制。
第二层:历史记忆(Episodic Memory)
位置:SQLite + FTS5(hermes_state.py)
机制:自动压缩 + 按需检索
当对话变长,工作记忆装不下时,agent/context_compressor.py 介入:
- 保留最近 N 轮完整对话(默认保护 20 轮)
- 将早期对话压缩为结构化摘要
- 摘要存入 SQLite,启用 FTS5 全文检索
当用户提到"上周讨论过的方案"时,系统不是把整段历史塞回上下文,而是:
- 通过 FTS5 全文检索定位相关会话
- 用 LLM 做摘要精炼
- 只把摘要注入当前上下文
这样 Token 消耗大幅降低,信息密度反而提高。
第三层:技能记忆(Skill Memory)
位置:skills/ 目录
代码:tools/skills_tool.py
这是程序性记忆——记录的是"怎么做",而不是"发生了什么"。
Skill 一旦被创建,就会被纳入工具注册表(tools/registry.py)。下次遇到类似任务,Agent 不会重新摸索,而是直接调用对应的 Skill,就像调用一个函数。
第四层:外部记忆提供者
位置:插件系统(plugins/memory/)
扩展:Honcho、Mem0 等第三方服务
对于需要深度用户建模的场景(长期追踪行为模式、偏好演化),Hermes 提供了扩展接口。比如 plugins/memory/hindsight/ 支持本地嵌入式的知识图谱记忆,带实体解析和多策略检索。
1.4 渐进式披露:Skill 的按需加载机制
Skill 越攒越多,如果每次都全量加载,上下文会爆炸。Hermes 的解法是渐进式披露:
默认加载:Skill 摘要(名称 + 触发条件 + 一句话描述)
↓
匹配到相关场景
↓
按需加载:完整 Skill 内容(详细步骤、提示词、工具链)
代码层面,tools/skills_tool.py 在注册 Skill 时会维护两级索引:
- 元数据层:所有 Skill 的摘要,常驻上下文(体积小)
- 内容层:完整 Skill 定义,仅在触发时注入
这是一个很实用的工程细节。在生产环境里跑过 Agent 的人会懂:上下文不是免费的,每多一个字都在烧钱。渐进式披露让 Skill 数量可以持续增长,而不受上下文窗口的限制。
1.5 异步复盘:Background Review
自我学习有一个工程难题:学习过程不能打断用户。
如果 Agent 每次对话完都停下来"反思总结"几分钟,体验会非常差。Hermes 的解决方案是 Background Review——一个独立的异步进程。
实现机制
run_agent.py 中的 Agent Loop 在处理完用户请求后,会fork出一个后台进程:
- 主进程:继续响应用户,零延迟
- 后台进程:静默分析刚才的对话轨迹,判断是否需要提炼新 Skill 或更新旧 Skill
这个设计在代码层面体现为进程隔离:后台复盘与主对话流完全解耦,即使用户在复盘过程中发送了新消息,也不会产生竞争条件。
触发条件
后台复盘不是每次对话都跑。触发条件包括:
- 工具调用次数达到一定阈值(表明任务有一定复杂度)
- 对话中出现了新的成功路径(与已有 Skill 不同的解决方式)
- 用户显式标记了某个会话为"值得学习"
1.6 为什么这套机制有效?
对比大多数 Agent 框架的"无状态"设计,Hermes 的自我学习解决了三个根本问题:
| 问题 | 传统 Agent | Hermes 的解法 |
|---|---|---|
| 学了就忘 | 每次会话从零开始 | Skill 持久化 + 记忆分层存储 |
| 一学定终身 | 早期错误经验永远保留 | 增量补丁更新,持续迭代 |
| 上下文爆炸 | 历史全量加载 | 渐进式披露 + 智能压缩 |
这套系统的本质,是把 Agent 从一个** Stateless Function**(无状态函数)变成了一个Stateful Agent(有状态智能体)。它不只是在响应你,而是在与你共同积累知识资产。
更多推荐



所有评论(0)