Hermes Agent 学习笔记 06:Skills 系统,Agent 如何把经验沉淀为可复用能力?

发布时间:2026/9/29 12:24:37
Hermes Agent 学习笔记 06:Skills 系统,Agent 如何把经验沉淀为可复用能力? 1. 从一次重复劳动说起为什么 Agent 需要 Skills 系统你有没有遇到过这种情况同一个 Agent上周刚教会它怎么按你的规范写技术笔记这周开个新会话它又变回那个只会列 bullet point 的“官方文档翻译机”。你不得不把上次那套“先承接上文、再抛问题、再讲机制、最后留钩子”的要求重新打一遍。打完之后你就在想这东西到底有没有记性。Memory 系统解决了一部分问题。它让 Agent 记住“用户在做 Hermes Agent 学习笔记系列”“用户偏好中文技术风格”“当前写到第几期”。这些是事实层面的记忆相当于给 Agent 建了一个关于你的档案。但档案里写的是“你是谁”不是“活该怎么干”。真正让人头疼的是流程层面的重复。写学习笔记有一套固定节奏分析开源项目有一套固定路径做代码审查有一套固定检查顺序。这些不是事实是方法。方法如果每次都靠 prompt 临时描述一是浪费 token二是每次描述都可能漏掉某个环节三是没法版本化管理。Hermes Agent 的 Skills 系统就是冲着这个痛点来的。它把“一次任务中验证过的做事方法”固化成文件放在本地技能库里需要的时候按需加载。你可以把它理解成给 Agent 配了一本可扩展的操作手册每页写清楚什么场景下翻到这一页、按什么步骤做、容易踩什么坑、做完怎么检查。这篇文章聚焦落地配置。我会从 SKILL.md 的骨架写起讲清楚 Curator 怎么管理技能生命周期再拆解 Progressive Disclosure 的加载策略最后给一个可复制的验证动作新建技能后触发 Agent 调用确认按需加载真的生效。适合已经在用 Hermes Agent、想让自己的 Agent 从“会回答”进化到“会持续做事”的人。2. TaoToken 前置给 Hermes Agent 配一个稳定的模型入口在动手写 SKILL.md 之前得先确保 Hermes Agent 能正常调用模型。Skills 系统本身是本地文件管理但技能被加载后要驱动 Agent 执行任务底层还是走模型 API。如果模型入口不稳定技能写得再好也跑不起来。我自己的做法是通过 TaoToken 来统一管理模型调用。它的 API 地址是https://taotoken.net/api兼容 OpenAI 风格的接口格式Hermes Agent 的模型配置里可以直接填。官网在https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end注册后到控制台生成 API Key 就能用。配置的时候有三个东西必须对齐Base URL、API Key、Model ID。这三个缺一个都会报错后面排障章节会详细讲。Base URL 填https://taotoken.net/api注意末尾不要多加斜杠。API Key 在控制台的 API Keys 页面生成格式通常是一串以sk-开头的字符串。Model ID 根据你实际要用的模型来填比如claude-sonnet-4-20250514这类。如果你用的是 Claude Code 或者 Cline 这类工具来辅助开发 Hermes Agent 的 skill 文件也可以在对应工具的配置里填同一套 Base URL 和 Key。Cline 的 MCP 配置、Codex 的auth.json、CC Switch 的配置文件核心都是这三件套。我试过在多个工具之间切换只要 Base URL 和 Key 一致模型行为基本可预期。有一点要注意TaoToken 是模型调用入口不是 Hermes Agent 的替代品。Hermes Agent 负责技能管理、工具调用、会话编排TaoToken 负责把模型请求稳定地送出去。两者是配合关系不是替代关系。配好之后可以先跑一个最简单的验证请求确认模型能通。在终端里用 curl 试一下curl https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer sk-你的Key \ -d { model: claude-sonnet-4-20250514, messages: [{role: user, content: 回复OK}], max_tokens: 10 }如果返回里能看到choices数组和正常的 content说明模型入口通了。这一步过了再往下折腾 Skills 才有意义。3. 可复制配置SKILL.md 骨架与 Curator 管理片段现在进入正题。Hermes Agent 的 Skills 默认放在~/.hermes/skills/目录下。每个技能是一个独立文件夹核心文件是SKILL.md。这个文件用 YAML frontmatter 加 Markdown 正文的结构frontmatter 里写元信息正文里写使用场景、流程、坑点和验证方法。先给一个可以直接复制的最小骨架。假设我要创建一个“技术学习笔记写作”技能目录结构是这样的~/.hermes/skills/ └── technical-learning-note/ ├── SKILL.md ├── templates/ │ └── note-template.md └── references/ └── style-guide.mdSKILL.md的内容如下--- name: technical-learning-note description: 写中文技术学习笔记按承接上文、抛出问题、解释机制、举例验证、小结引出的结构组织。 version: 1.0.0 author: your-name license: MIT platforms: [linux, macos, windows] metadata: hermes: tags: [writing, blog, learning-note, chinese] curator: stale_after_days: 90 auto_archive: true --- # 技术学习笔记写作 ## When to Use 当用户要求写中文技术学习笔记尤其是开源 AI Agent 项目的系列文章时使用。 典型触发语包括“继续写下一期”“按学习笔记风格写”“承接上一篇”。 ## Procedure 1. 开头用两三句话承接上一期的内容点明本期要解决的问题。 2. 用一段话说明这个问题的实际痛点不要直接进入概念定义。 3. 用类比或生活化例子解释核心概念再给出技术定义。 4. 分步骤拆解机制每一步说明“为什么需要这一步”。 5. 给出可复制的命令、配置或代码片段标注语言类型。 6. 区分容易混淆的相近概念用表格或对照说明。 7. 小结本期学到了什么自然引出下一期主题。 ## Pitfalls - 不要写成官方文档的翻译要有个人理解和踩坑记录。 - 不要只列命令不解释动机读者不知道为什么要这么做。 - 不要跳过概念区分初学者最容易在相近概念上卡住。 - 不要用营销式语言保持学习笔记的平实口吻。 - 不要编造未经验证的结论不确定的地方要标注。 ## Verification 完成前检查 1. 初学者能否看懂核心概念 2. 问题背景是否交代清楚 3. 相近概念是否做了区分 4. 是否与上一篇和下一篇自然衔接 5. 内容是否完整到可以独立发布这个骨架里When to Use、Procedure、Pitfalls、Verification四块是核心。缺了When to UseAgent 不知道什么时候该加载这个技能缺了ProcedureAgent 不知道按什么顺序做缺了PitfallsAgent 会重复犯过的错缺了VerificationAgent 不知道做到什么程度算完成。frontmatter 里的metadata.hermes.curator是给 Curator 用的配置。stale_after_days: 90表示 90 天没被使用就标记为过期auto_archive: true表示自动归档。这两个参数控制技能的生命周期管理。Curator 的配置也可以放在全局层面。在~/.hermes/config.toml里可以这样写[curator] enabled true scan_interval_hours 24 stale_after_days 90 archive_dir ~/.hermes/skills/.archive auto_merge_duplicates false pin_protected [technical-learning-note, code-review] [curator.notify] on_stale true on_archive true on_merge_suggestion true这段配置的意思是Curator 每天扫描一次技能库90 天未使用的标记为 stale归档到.archive目录不自动合并重复技能合并建议需要人工确认technical-learning-note和code-review这两个技能被 pin 保护不会被自动归档。通知方面标记过期、归档、合并建议都会提醒。如果你用的是 JSON 格式的配置某些工具链偏好 JSON等价写法是{ curator: { enabled: true, scan_interval_hours: 24, stale_after_days: 90, archive_dir: ~/.hermes/skills/.archive, auto_merge_duplicates: false, pin_protected: [technical-learning-note, code-review], notify: { on_stale: true, on_archive: true, on_merge_suggestion: true } } }两种格式选一种就行看你的 Hermes Agent 版本支持哪种。配置改完后需要重启 Hermes Agent 或者重新加载配置才生效。4. 验证请求新建技能后触发按需加载技能文件写好了配置也填了接下来要验证它真的能被 Agent 识别并按需加载。这一步很多人会跳过结果技能写了但从来没被触发过等于白写。第一步确认技能被正确识别。在 Hermes Agent 会话里输入/skills或者在终端里执行hermes skills list如果输出列表里能看到technical-learning-note说明文件结构没问题。如果没看到检查三件事目录名和 frontmatter 里的name是否一致、SKILL.md是否在技能文件夹根目录、YAML frontmatter 的---分隔符是否完整。第二步验证 Progressive Disclosure 的第一层。Progressive Disclosure 分三层加载第一层只加载技能名称和简短描述第二层在需要时加载完整SKILL.md第三层在必要时加载references/和templates/里的文件。你可以通过观察上下文占用来验证第一层是否生效。启动一个新会话问一个和写作无关的问题比如“帮我看看这个 Python 报错”然后检查 Agent 的上下文里是否只出现了技能名称列表而没有把SKILL.md全文塞进去。第三步触发技能调用。在会话里输入/technical-learning-note 继续写 Hermes Agent 学习笔记第七期主题是 Messaging Gateway如果 Agent 开始按Procedure里的步骤输出——先承接上一期、再抛问题、再解释机制——说明第二层加载生效了。这时候你可以观察 Agent 是否引用了templates/note-template.md里的结构如果引用了说明第三层也按需加载了。第四步用自然语言触发验证 Agent 的自主判断。输入请用技术学习笔记的风格写一段关于 Hermes Agent Skills 系统的介绍如果 Agent 自动识别出应该加载technical-learning-note技能说明When to Use的描述写得够清晰。如果没触发说明描述太模糊需要补充更具体的触发场景。第五步验证 Curator 的标记逻辑。手动把某个技能的SKILL.md里的version改成旧版本或者临时把stale_after_days改成 0然后运行hermes curator scan观察输出里是否把这个技能标记为 stale。验证完记得把配置改回来。整个验证流程走一遍你就能确认技能从创建到加载到触发的链路是通的。这一步做完再往技能库里加更多技能就有底了。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth配置过程中最容易卡住的几个报错我按实际遇到的频率排一下。401 Unauthorized。这个最常见基本是 API Key 的问题。检查三件事Key 是否复制完整有没有漏掉末尾字符、Key 是否已过期、请求头里的Authorization格式是否是Bearer sk-xxx。如果用的是 TaoToken到控制台的 API Keys 页面重新生成一个替换掉配置里的旧 Key。注意 Base URL 末尾不要多加斜杠https://taotoken.net/api和https://taotoken.net/api/在某些客户端里行为不一致。local proxy failed。这个报错通常出现在本地网络环境有额外转发层的时候。检查你的 HTTP_PROXY 和 HTTPS_PROXY 环境变量是否指向了一个不可用的地址。在终端里执行env | grep -i proxy看看有没有残留的代理配置。如果有临时 unset 掉再试。另外检查 Hermes Agent 的配置文件里是否硬编码了代理地址有的话删掉。reading choices 相关报错。这个通常出现在模型返回格式不符合预期的时候。比如你填的 Model ID 和实际调用的模型不匹配返回体里没有choices字段。检查 Model ID 是否拼写正确是否是该入口支持的模型。用前面给的 curl 命令单独测一下模型调用确认返回体结构正常。如果 curl 能通但 Hermes Agent 报这个错检查 Hermes Agent 的模型配置里 Base URL 是否填成了https://taotoken.net/api而不是其他路径。OAuth 相关报错。如果你用的是 Claude Code 或类似工具可能会遇到 OAuth token 过期的问题。这类工具通常有自己的认证流程和 API Key 是两套机制。检查工具的配置文件里是否同时存在 OAuth token 和 API Key两者冲突时优先用哪个。以 Codex 为例auth.json里如果同时有oauth_token和api_key需要确认当前用的是哪套。CC Switch 的配置文件里也有类似的优先级设置。建议统一用 API Key 方式避免 OAuth 过期带来的中断。技能不触发。技能文件写好了但 Agent 从来不调用检查When to Use的描述是否太宽泛或太狭窄。太宽泛会导致 Agent 在不该用的时候乱用太狭窄会导致该用的时候不触发。一个好的描述应该包含具体的触发词和场景边界。另外检查 frontmatter 里的platforms是否包含了当前系统如果只写了[linux]但你在 macOS 上跑技能可能被过滤掉。Curator 不生效。检查config.toml里的[curator]段是否在正确的配置层级。有些版本的 Hermes Agent 要求 Curator 配置放在[hermes.curator]下面而不是顶层[curator]。另外确认enabled true是否真的写进去了默认可能是关闭的。6. 把经验沉淀下来让 Agent 越用越顺手Skills 系统最吸引我的地方是它把“调教 Agent”这件事从一次性 prompt 变成了可积累的资产。你今天花十分钟写一个SKILL.md以后每次遇到同类任务Agent 都能按你验证过的流程走不用你重新解释一遍。写得越多Agent 越懂你的做事方式。Progressive Disclosure 解决了“技能多了会不会拖垮上下文”的顾虑。平时只加载名称和描述需要时才展开完整内容再需要时才读参考文件。这样技能库可以无限扩展而单次任务的上下文占用保持可控。Curator 则解决了“技能多了会不会乱”的问题。长期不用的标记过期重复的提示合并重要的 pin 保护。技能库像一个小型知识管理系统需要定期维护但维护成本很低。如果你还没开始建自己的技能库建议从最重复的那件事入手。比如你每周都要写周报那就写一个weekly-report技能你经常做代码审查那就写一个code-review技能。先跑通一个再慢慢加。模型入口方面TaoToken 的 API 地址是https://taotoken.net/api控制台在https://taotoken.net/api-keys可以生成 Key接入文档在https://taotoken.net/doc有详细说明。如果你要长期跑编码类任务或者 Agent 工作流Coding Plan 页面https://taotoken.net/coding-plan有对应的方案。想先试试模型对话效果可以到https://taotoken.net/chat直接体验。技能写完之后记得跑一遍验证流程/skills确认识别、触发调用确认加载、观察上下文确认 Progressive Disclosure 生效。这三步过了这个技能才算真正可用。