ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Hermes 教程 03:Skills 系统——用 skill_manage 与 Curator 搭建可复用技能库

Hermes 教程 03:Skills 系统——用 skill_manage 与 Curator 搭建可复用技能库 1. 为什么你的 Hermes 越用越笨Skills 系统到底解决什么问题如果你已经用 Hermes 跑过几轮真实任务大概率遇到过这种场景上周刚教会它一套处理日志报错的固定流程这周开新会话它又像失忆一样从头问起。你重复解释了三遍的部署步骤、反复纠正的代码风格、每次都要贴一遍的接口约定全都在新会话里归零。这不是模型变笨了而是它缺少一个把「一次性经验」沉淀成「可复用资产」的机制。Hermes 的 Skills 系统就是干这件事的。简单说它允许你把一段被验证过的解决方案、一套工作流、一个领域知识包写成结构化的技能文档存下来之后 Hermes 在遇到相关任务时会自动检索并加载。它是什么一个遵循 agentskills.io 开放标准的技能库和 Claude Skills 互通。能做什么把纠错、流程、模板固化成文件跨会话复用还能被 Curator 自动维护生命周期。适合谁长期用 Hermes 做编码、运维、文档处理的开发者尤其是那些任务重复度高、上下文依赖强的场景。我自己的体感是Skills 用起来之后Hermes 从「每次都要重新带教的实习生」变成了「记得住你项目规矩的老搭档」。这篇就按落地顺序讲清楚三件事怎么用 skill_manage 注册技能、Curator 怎么管技能的生老病死、以及怎么照着 agentskills.io 的结构写出一个能被正确触发的技能。全程给可复制的目录配置和命令最后跑一遍加载验证。2. TaoToken 前置给 Hermes 配好稳定的模型出口在折腾 Skills 之前得先保证 Hermes 能稳定调到模型。Skills 的检索、Curator 的自动维护、Reflection 循环这些都会产生额外的模型调用如果出口不稳定技能加载到一半超时排查起来会非常痛苦。我习惯用 TaoToken 作为统一出口它的 API 地址是 https://taotoken.net/api 兼容主流协议配置一次就能给 Hermes 的多个子系统共用。先说清楚要准备的三件套这是后面所有配置的基础Base URL、API Key、Model ID。Base URL 填https://taotoken.net/api注意不要带多余的路径后缀API Key 去控制台生成地址是 https://taotoken.net/console/api-keys Model ID 按你实际要用的模型填比如做技能检索和 Curator 分析这类轻量任务可以选响应快的模型做代码生成再换更强的。配置方式有两种。一种是通过环境变量适合临时测试export TAOTOKEN_API_KEYsk-你的key export TAOTOKEN_BASE_URLhttps://taotoken.net/api另一种是写进 Hermes 的配置文件长期生效。Hermes 的配置一般在~/.hermes/config.yaml或项目根目录的hermes.yaml模型出口部分这样写model: provider: openai-compatible base_url: https://taotoken.net/api api_key: ${TAOTOKEN_API_KEY} model: 你的模型ID timeout: 60 auxiliary: curator: provider: openai-compatible base_url: https://taotoken.net/api api_key: ${TAOTOKEN_API_KEY} model: 你的模型ID这里auxiliary.curator是单独给 Curator 配的出口。为什么要分开因为 Curator 会在后台跑技能审计、合并、归档这些调用如果和主对话抢同一个限流额度高峰期容易互相拖累。分开配之后主对话和后台维护互不干扰。配完可以用一条最小请求验证出口通不通curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: 你的模型ID, messages: [{role: user, content: ping}] }返回里有choices字段就说明出口正常。这一步别跳过后面 Skills 出问题十有八九是出口没配好先排除掉这个变量。3. 可复制配置用 skill_manage 注册你的第一个技能Skills 的核心是目录结构。Hermes 默认从~/.hermes/skills/读取技能每个技能一个子目录标准结构长这样~/.hermes/skills/my-skill/ ├── SKILL.md # 技能定义必需 ├── references/ # 参考文档 ├── scripts/ # 可执行脚本 └── templates/ # 模板文件SKILL.md是唯一必需的文件格式遵循 agentskills.io 标准和 Claude Skills 通用。先建目录mkdir -p ~/.hermes/skills/log-triage/{references,scripts,templates}然后写SKILL.md。我拿一个「日志分级排查」的技能举例这个技能在真实项目里帮我省了很多重复解释--- name: log-triage description: 按错误级别和关键字对应用日志做分级排查输出根因假设 version: 1.0.0 author: Hermes Agent license: MIT metadata: stability: stable triggers: - 日志报错 - 排查异常 - error log --- # 日志分级排查 ## 简介 对应用日志按 ERROR/WARN/INFO 分级提取高频关键字给出根因假设和验证步骤。 ## 触发条件 当用户提供日志片段、报错堆栈或要求排查线上异常时使用。 ## 步骤 1. 按级别切分日志统计各级别条数。 2. 对 ERROR 行提取异常类名和消息模板。 3. 按出现频次排序取 Top 5 作为根因候选。 4. 对每个候选给出验证命令和预期结果。 ## 注意事项 - 不要直接下结论先列假设再验证。 - 涉及生产环境时验证命令必须只读。 ## 验证 加载后输入一段含 ERROR 的日志观察是否输出分级统计和根因候选。这里有几个坑要提前说。triggers是技能被检索命中的关键写得太泛比如只写「问题」会导致误触发写得太窄又检索不到。我的经验是写 3 到 5 个具体短语覆盖用户可能的口语表达。description会参与向量检索要包含技能的核心动作和对象。注册技能有两种方式。推荐的是对话式直接告诉 Hermes把这个解决方法保存为 skill它会自动生成目录和SKILL.md。手动方式就是上面这样自己写文件。写完用skill_manage注册hermes skills list # 确认技能被识别 hermes skills inspect log-triage # 预览技能内容如果list里没出现检查目录名和SKILL.md的name字段是否一致以及 YAML front matter 的缩进有没有错。YAML 对缩进敏感triggers下面的列表项必须比triggers多两个空格。4. 验证请求加载技能并确认触发成功技能写好了不代表能用得验证它真的会被加载和触发。Hermes 提供几种加载方式对应不同场景。启动时预加载适合确定要用的技能hermes -s log-triage会话中动态加载适合临时调用/skill log-triagev0.13.0 之后还支持热重载改完SKILL.md不用重启/reload-skills加载之后要验证触发。Skills 的检索范围包括技能名称、描述、triggers、SKILL.md全文以及references/和scripts/目录内容。也就是说你问的问题只要和这些内容语义相关Hermes 就会自动把技能加载进上下文。验证方法是输入一段真实日志2024-01-15 10:23:11 ERROR [order-service] Connection refused to redis:6379 2024-01-15 10:23:12 WARN [order-service] retry attempt 1/3 2024-01-15 10:23:15 ERROR [order-service] Connection refused to redis:6379如果技能生效Hermes 会按SKILL.md里的步骤输出分级统计、提取Connection refused作为高频关键字、给出「Redis 连接失败」的根因假设以及验证命令比如redis-cli -h host ping。如果它只是泛泛回答「可能是网络问题」说明技能没被检索到回去检查 triggers 是否覆盖了「日志」「报错」这类词。再验证一下 Curator 的状态确认技能被纳入管理hermes curator status输出会按使用频率排序技能log-triage应该出现在列表里。如果没出现说明技能目录不在 Curator 的扫描路径内检查~/.hermes/skills/的权限和路径拼写。5. 本篇常见错排查401、local proxy failed 与技能不触发配置 Skills 过程中报错集中在几类。我按真实遇到的频率排一下每条给定位方法。401 Unauthorized。这是出口鉴权失败和 Skills 本身无关但会伪装成技能加载失败。先单独测出口curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d {model:你的模型ID,messages:[{role:user,content:ping}]}如果这里就 401检查 Key 有没有多余空格、有没有过期、Base URL 是不是写成了带/v1的完整路径应该只到/api。如果 curl 通了但 Hermes 报 401检查配置文件里api_key的变量引用有没有被正确展开YAML 里${TAOTOKEN_API_KEY}需要环境变量真的存在。local proxy failed。这个报错通常出现在 Curator 后台任务里因为 Curator 会并发发起多个请求。定位方法是看 Hermes 日志tail -f ~/.hermes/logs/hermes.log | grep -i proxy\|curator如果日志显示连接被拒绝多半是auxiliary.curator的base_url没配或配错。把主模型和 Curator 的出口都指向https://taotoken.net/api别一个配了一个没配。技能不触发。这是最隐蔽的一类没有报错只是技能没被加载。排查顺序先hermes skills list确认技能被识别再hermes skills inspect id看内容是否完整然后检查triggers是否覆盖了你的提问用词最后看SKILL.md的 front matter 有没有语法错误。一个常见错误是description写得太抽象比如「处理问题」向量检索匹配不上具体任务。改成「按错误级别对日志分级排查并输出根因假设」这种带动作和对象的描述命中率会高很多。OAuth 相关报错。如果你用的是需要 OAuth 的模型出口Hermes 在加载技能时可能触发 token 刷新。这类报错的关键词是token expired或refresh failed。处理方式是重新走一遍授权流程或者换成 API Key 鉴权。用 TaoToken 的 API Key 方式就不涉及 OAuth能省掉这类问题。技能加载后行为不对。有时候技能加载了但 Hermes 没按SKILL.md的步骤走。这通常是SKILL.md里的步骤写得太模糊模型自由发挥。把步骤写成可执行的编号列表每步带明确的输入输出比如「提取 ERROR 行的异常类名」比「分析错误」有效得多。6. 用 Curator 管好技能生命周期别让技能库变成垃圾场技能写多了会乱。版本更新导致路径失效、依赖缺失让脚本跑不起来、过时的技能占着检索位却从不被用——这些问题 Hermes 用 Curator 子系统自动处理。Curator 是 v0.13.0 引入的技能自维护机制核心命令如下hermes curator status # 按使用频率排序技能 hermes curator run # 同步执行维护 hermes curator run --dry-run # 试运行只看不改 hermes curator run --consolidate # 合并重复、打磨过时技能 hermes curator archive skill-id # 归档不常用技能 hermes curator prune # 清理过期技能 hermes curator pin skill-name # 永久保留不被归档 hermes curator list-archived # 列出已归档 hermes curator restore skill-name # 从归档恢复 hermes curator backup # 手动备份我的用法是每周跑一次--dry-run看 Curator 打算归档和合并哪些确认没问题再跑正式的run。pin用在那些低频但关键的技能上比如线上事故处理流程哪怕半年用一次也不能被归档掉。Curator 背后是 Reflection 循环执行任务、发现问题、分析根因、更新 Skill。技能执行失败时它会自动记录错误上下文下次加载时给出警告。这个机制让技能库能自我进化但也意味着你得定期看curator status确认没有技能在反复失败。如果某个技能一直报错要么修SKILL.md要么直接archive掉。技能多了之后检索效率会下降。这时候用 Taps 从远程仓库订阅技能集或者用 Bundles 批量安装hermes skills tap add https://github.com/your-team/hermes-skills hermes skills tap list /bundles list /bundles install name团队协作场景下把公共技能放进 Git 仓库成员用tap add订阅改一处全员生效。个人技能就放本地~/.hermes/skills/用hermes skills snapshot导出配置做备份。最后提一个 v0.18.0 的新命令/learn能把任意内容一键转成可复用技能。比如你贴一段部署脚本输入/learnHermes 会自动生成技能目录和SKILL.md。配合/journey可视化记忆时间线能清楚看到技能是怎么积累起来的。技能库不是写完就完事它需要像代码一样被维护、审查、迭代Curator 就是那个帮你干脏活的角色。
返回列表