Hermes Agent 的自我改进机制拆解:Skill、Procedural Memory 与 SKILL.md 如何协同?
发布时间:2026/10/18 23:26:57 锦皓数字建站

1. 为什么你的 Agent 每次都在“重新学走路”先说一个我踩过的坑。去年我写了个自动处理 GitHub Issue 的 Agent第一次跑得挺顺读 issue、定位文件、改代码、提 PR。结果第二天换个仓库再跑它又开始瞎猜目录结构把src/utils当成lib/helpersPR 被 reviewer 打回来三次。我当时的第一反应是“模型不够强”差点去换更大的模型。后来才想明白问题不在模型在于它没有把上一次的成功经验留下来。每次任务都是冷启动上下文一清空昨天的教训全没了。这就是传统 Agent 最大的结构性缺陷——它只有 Declarative Memory知道什么没有 Procedural Memory知道怎么做。Hermes Agent 的 self-improving 机制恰恰是冲着这个痛点去的。它不碰模型权重不做微调而是让 Agent 把“成功经验”写成结构化的 Skill落盘成SKILL.md下次直接复用、持续 patch。用一句话概括不是让模型变强而是让 Agent 越来越熟练。这篇文章我会拆三条链路Skill 怎么沉淀、Procedural Memory 怎么更新、SKILL.md怎么落盘然后给你一份可复制的SKILL.md结构模板最后用 TaoToken 统一 Key/API 通道把整个自我改进流程跑一遍验证。适合想搞懂 Agent 自我进化原理、又不想只停留在概念层面的开发者。2. Hermes Agent 的 Skill 沉淀链路与 Procedural Memory 更新机制要理解 Hermes 的自我改进得先把它的三个核心概念摆清楚否则很容易和“自动 prompt tuning”“在线训练”混为一谈。Skill 是什么在 Hermes 里Skill 不是一句 prompt而是一个完整目录。典型结构长这样skills/ github-review/ SKILL.md templates/ scripts/ references/SKILL.md记录 workflow、命令、注意事项、常见错误、SOP、模板引用。它本质上是“怎么做”的说明书对应认知心理学里的 Procedural Memory。而 memory 系统记录的是“知道什么”比如用户偏好、项目背景两者是分开的两套系统。Procedural Memory 怎么更新Hermes 有一个 background review 机制。任务完成后Agent 会回头审查这次做了什么、哪些步骤有效、哪些失败、有没有值得沉淀的经验。如果判断“这件事值得长期记住”就自动生成或 patch 一个SKILL.md。注意这里的改进单位是 markdown 文件不是 weights。这意味着它可审计、可编辑、可 diff、可版本控制、可回滚、可人工修正——成长是显式的不是黑盒的。渐进式加载解决 Prompt Explosion如果 Agent 攒了几十个 Skill全塞进 system prompt 会 token 爆炸、注意力稀释。Hermes 的做法是 system prompt 里只保留 skill 名称和 description真正需要时再通过skills_list和skill_view按需读取。这很像人类的“工作记忆 长期记忆”分层。Curator 维护技能库Skill 不断生成会带来重复、低质、过时、碎片化的问题。Hermes 设计了 Curator 后台系统跟踪使用频率、标记 stale skill、自动 archive、合并重复 workflow、patch drift。官方文档里那句话很到位“Without maintenance, you end up with dozens of narrow near-duplicates.”把这三条链路串起来核心循环就是任务执行 → 经验总结 → 生成SKILL.md→ 后续任务复用 → 持续 patch 与维护 → 形成长期 skill library。下面我用 TaoToken 把这条链路实际跑一遍。3. 用 TaoToken 统一通道接入 Hermes 的可复制配置复现 Hermes 的自我改进流程第一步是让 Agent 能稳定调用模型。我实测下来用 TaoToken 做统一 Key/API 通道比较省事一个 Key 走多个模型不用在 Hermes 配置里来回换 base_url。先拿 Key打开 https://taotoken.net/api-keys 创建一个 API Key复制备用。注意别把 Key 硬编码进代码仓库用环境变量。然后配置 Hermes 的模型接入。Hermes 的配置通常走settings.json或环境变量我这边用的是环境变量方式路径和字段名按你本地实际版本对齐{ model_provider: { base_url: https://taotoken.net/api, api_key: ${TAOTOKEN_API_KEY}, model_id: claude-sonnet-4-20250514, timeout: 120 }, skills: { root: ./skills, auto_load: true, progressive_loading: true }, background_review: { enabled: true, min_steps: 5, auto_patch: true } }如果你用的是 Claude Code 或 Cline 这类工具接 Hermes 的 skill 目录配置三件套要写全Base URL 填https://taotoken.net/apiKey 填刚才创建的Model ID 按你选的模型填。Cline 的 MCP 配置里如果引用 Hermes 的 skill 服务同样把这三件套对齐否则会出现local proxy failed或 401。环境变量这样设export TAOTOKEN_API_KEYsk-你的key export HERMES_SKILL_ROOT./skills这里有个细节progressive_loading一定要开。我试过关掉它把 20 多个 skill 全量注入结果单次请求 token 直接飙到 3 万模型开始答非所问。开了之后 system prompt 只留名称和 descriptiontoken 降到 4 千左右响应也稳了。配置完先别急着跑完整流程用一次最小请求验证通道是否通。下一节给验证步骤。4. 验证自我改进流程从一次任务到 SKILL.md 落盘配置好之后怎么确认 Hermes 真的在“自我改进”我设计了一个最小可验证流程让 Agent 完成一个稍微复杂、有明确成功标准的任务然后检查它有没有生成或 patchSKILL.md。第一步准备一个待沉淀的任务。比如让 Agent 做一次“给 Python 项目生成 pytest 测试并跑通”。这个任务有明确成功标准测试通过也有可复用的 workflow。第二步发起请求验证通道。先用 curl 确认 TaoToken 通道正常curl https://taotoken.net/api/v1/messages \ -H x-api-key: $TAOTOKEN_API_KEY \ -H anthropic-version: 2023-06-01 \ -H content-type: application/json \ -d { model: claude-sonnet-4-20250514, max_tokens: 256, messages: [{role: user, content: 回复 OK 两个字母即可}] }返回里能看到content字段带OK说明通道通了。如果这里报 401先查 Key 有没有复制全报local proxy failed查 base_url 是不是写成了带路径的完整地址。第三步跑任务并观察 background review。让 Hermes 执行测试生成任务完成后看日志里有没有background_review触发。触发后它会审查步骤判断是否值得沉淀。第四步检查 SKILL.md 是否落盘。去./skills/目录下看有没有新目录比如pytest-generation/SKILL.md。打开看内容应该包含 workflow、命令、注意事项。如果只有空文件或没生成检查background_review.enabled是否为 truemin_steps是不是设太高设 5 比较合适太高小任务不触发。第五步复用验证。再发一个类似的测试生成任务观察 Agent 是否调用了skills_list和skill_view读取刚才的 skill。如果日志里出现 skill 读取记录且这次步骤比第一次少说明复用生效了。我实测下来第一次任务跑了 11 步沉淀出 skill 后第二次同类任务降到 6 步省掉的正是目录探测和试错。这就是 Procedural Memory 的价值——不是模型变聪明了是它不用重新走弯路了。5. 常见报错排查401、local proxy failed 与 reading choices复现过程中最容易卡在几个报错上我按真实遇到的顺序列一下。401 Unauthorized最常见。原因通常是 Key 没设进环境变量或者配置文件里${TAOTOKEN_API_KEY}没被正确展开。检查echo $TAOTOKEN_API_KEY有没有输出。另一个坑是 Key 前后带了空格或换行复制时容易带上。还有一种是 base_url 写成了https://taotoken.net/api/带尾斜杠某些客户端会拼成双斜杠导致鉴权失败去掉尾斜杠即可。local proxy failed这个报错一般出现在 Cline 或 Claude Code 通过 MCP 接 Hermes skill 服务时。根因是本地代理层没起来或者 MCP 配置里的 command 路径不对。检查三件套是否写全Base URL、Key、Model ID。如果 Model ID 填了个不存在的模型名代理层转发时会直接失败。我遇到过一次是 Model ID 写成了claude-sonnet-4少了日期后缀改成完整 ID 就好了。reading choices 相关报错这类通常出现在响应解析阶段报错信息里带reading choices或类似字段。原因是客户端按 OpenAI 格式解析但返回的是 Anthropic 格式或反过来。解决方法是确认客户端的 API 格式和 TaoToken 端点匹配。如果你用 OpenAI 兼容格式端点走/v1/chat/completions用 Anthropic 格式走/v1/messages。混用就会在解析choices时崩掉。OAuth 相关报错如果你用的是 Codex 的auth.json方式接入报 OAuth 失败通常是 token 过期或 scope 不对。检查auth.json里的字段是否和当前客户端版本匹配。这种情况我建议直接改用 API Key 方式少一层 OAuth 就少一个故障点。Skill 不生成不是报错但很常见。检查background_review.enabled、min_steps、以及 skill 目录是否有写权限。有次我目录权限是只读Agent 静默失败日志里只有一行 warning很容易漏。排查顺序建议先 curl 验证通道 → 再查配置三件套 → 最后看 skill 目录权限和 background review 日志。按这个顺序走90% 的问题能定位。6. 把自我改进流程接进你的日常开发跑通验证之后真正有价值的是把它接进日常。我的做法是给 Hermes 固定一个 skill 根目录所有项目共用Curator 定期清理。每周花十分钟看一次 skill library把低质的删掉把重复的合并。这比调 prompt 划算得多。如果你想让 Agent 长期跑编码和 Agent 任务可以考虑 Coding Plan额度更稳https://taotoken.net/coding-plan 。想先验证模型效果直接去模型对话页试https://taotoken.net/chat 。接入文档在 https://taotoken.net/doc API Key 管理在 https://taotoken.net/api-keys 。最后留一个我自己的SKILL.md模板你可以直接改成自己的# Skill: pytest-generation ## 触发条件 用户要求为 Python 模块生成单元测试。 ## Workflow 1. 读取目标模块识别公开函数与类 2. 检查是否已有 tests/ 目录无则创建 3. 按函数生成测试用例覆盖正常路径与边界 4. 运行 pytest收集失败用例 5. 修复失败用例重复直到全绿 ## 命令 pytest -q --tbshort ## 注意事项 - 不要 mock 被测模块自身的内部函数 - 边界值优先于随机值 - 测试文件命名 test_module.py ## 常见错误 - ImportError检查 conftest.py 的 sys.path - fixture 未找到确认 pytest 版本 7这个模板的关键是“常见错误”那一节——它才是 Procedural Memory 真正沉淀下来的东西。模型本身知道怎么写 pytest但它不知道你这个项目里 conftest 的坑在哪。把坑写进SKILL.md下次它就不会再踩。这才是 self-improving 的实质不是模型训练自己而是 Agent 把经验沉淀成长期 Skill。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。