1. 为什么我劝你先搞懂 skill-creator 再动手写技能
Hermes Agent 里的 skill-creator 是一个「元技能」——它本身就是一个技能,专门用来帮你造别的技能。你可以把它理解成一个技能脚手架生成器:你负责用大白话描述需求,它负责把需求翻译成符合规范的 SKILL.md、测试用例和可安装的技能包。适合谁?适合那些想让 Agent 记住自己工作流、又不想手写一堆 YAML 前置元信息的人。
我见过太多人卡在两个地方:一是 SKILL.md 的元信息字段写错,导致技能加载了但触发不了;二是技能里调用模型时把 Key 硬编码进去,换台机器就废。这篇就按「从 SKILL.md 到 TaoToken 接入」这条线走一遍,给你能直接复制的模板、skill-creator 的命令清单,以及一条 curl 验证技能加载与调用的具体动作。核心检索词先摆出来:Hermes Agent 技能创建、SKILL.md 模板、skill-creator 用法、AI 技能接入统一 API 通道。
先说清楚 skill-creator 到底能做什么。它不是一个独立运行的 CLI 工具,而是挂在 Hermes/Claude 生态里的一个技能,安装后你通过自然语言指令唤起它,它会按 Anthropic 官方规范引导你走完需求定义、逻辑设计、文件生成、测试验证、导出安装五步。你不需要背 SKILL.md 的字段顺序,但你需要知道每个字段是干嘛的,否则它生成的东西你改不动。
前置准备只有一条命令,在终端里跑:
skills install skills-sh/anthropics/skills/skill-creator装完重启 Hermes 环境,然后发一句「请使用 skill-creator 帮我创建一个新技能」,如果 AI 能接上并开始问你技能名称、用途、输入输出,说明装好了。这一步失败通常是环境没重启或者技能索引没刷新,后面第五节会细说。
为什么值得花时间学这个?因为技能一旦建好,你的 Agent 就从「每次都要重新解释一遍需求」变成「一句话触发固定流程」。比如你经常要把 Markdown 表格转成 SQL,建一个技能之后,以后只要说「用 markdown 表格转 SQL 处理下面这段」,它自己就走完整流程。而 skill-creator 保证了这个技能的文件结构是对的,不会因为元信息写错而静默失效。
2. TaoToken 前置:给技能一条统一的模型调用通道
技能建好之后,真正干活的那一步往往要调模型。如果你把 Anthropic 的 Key 直接写进 SKILL.md 或者技能脚本里,会有三个麻烦:换 Key 要改文件、多人协作要传 Key、不同技能各写各的调用逻辑。所以我建议在动手写技能之前,先把模型调用通道统一掉,用 TaoToken 作为统一入口。
TaoToken 在这里的角色是「统一 Key/API 通道」:你的技能只需要认一个 Base URL 和一个 Key,模型 ID 在请求里指定。官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api ,注意 API 地址后面不加 UTM 参数,直接用它拼请求路径。
你需要准备三件套,这三件套在后面的 SKILL.md 和验证请求里都会用到:
| 项目 | 值 | 说明 |
|---|---|---|
| Base URL | https://taotoken.net/api | 所有请求的前缀,不要带尾斜杠 |
| API Key | 在控制台创建 | 形如sk-...,只显示一次,复制保存 |
| Model ID | 例如claude-sonnet-4-5 | 按你实际要用的模型填 |
拿 Key 的路径:进控制台,找到 API Keys 页面新建一个。控制台地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API Keys 页面是 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。创建时给它起个能认出来的名字,比如hermes-skill-dev,方便以后按技能维度回收。
这里有个容易踩的坑:很多人以为技能里调模型必须用 Anthropic 原生 SDK,其实不是。Hermes 技能里你完全可以用一个 shell 脚本或者 Python 脚本发 HTTP 请求,只要 Base URL 和 Key 对,模型 ID 对,就能通。这样技能的可移植性最好——换环境只改环境变量,不改技能文件。
如果你打算长期跑编码类或 Agent 类技能,可以顺带看一下 Coding Plan,地址是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,它更适合高频调用的场景。但这一节你只要记住:Base URL、Key、Model ID 三件套先备好,后面 SKILL.md 里会引用它们。
另外,如果你用的是 Claude Code 这类工具做技能调试,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,里面有各语言的请求示例,照着改 Base URL 就行。模型对话页面可以用来快速验证某个 Model ID 是否可用,地址是 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。
3. 可复制配置:SKILL.md 模板与 skill-creator 命令清单
这一节是全文最该收藏的部分。先给 SKILL.md 模板,再给 skill-creator 的命令清单,最后给一个把两者串起来的 settings 片段。
SKILL.md 的结构分两块:顶部是 YAML 前置元信息(frontmatter),下面正文是技能的执行说明。元信息里最关键的是name、description、version和触发条件。下面这个模板你可以直接复制,把方括号里的内容替换掉:
--- name: markdown-table-to-sql description: 将 Markdown 表格文本解析为可执行的 SQL CREATE TABLE 语句,自动推断列类型。当用户提供 Markdown 表格并要求转成 SQL 时触发。 version: 1.0.0 triggers: - "markdown 表格转 SQL" - "把表格转成建表语句" - "table to sql" inputs: - name: table_text type: string required: true description: Markdown 格式的表格文本,含表头和至少一行示例数据 outputs: - name: sql type: string description: 标准 SQL CREATE TABLE 语句 env: - TAOTOKEN_BASE_URL - TAOTOKEN_API_KEY - TAOTOKEN_MODEL_ID --- # Markdown 表格转 SQL ## 执行步骤 1. 读取输入 `table_text`,按行拆分,识别表头行与分隔行。 2. 提取列名,根据示例数据推断类型:整数 -> INTEGER,小数 -> REAL,日期格式 -> DATE,其余 -> TEXT。 3. 生成 `CREATE TABLE` 语句,列名用反引号包裹,末尾加分号。 4. 若表格为空或缺少分隔行,返回错误说明而不是猜测。 ## 模型调用 当需要模型辅助推断复杂类型时,向统一通道发请求: - Base URL: 读取环境变量 `TAOTOKEN_BASE_URL` - API Key: 读取环境变量 `TAOTOKEN_API_KEY` - Model ID: 读取环境变量 `TAOTOKEN_MODEL_ID` 请求路径为 `${TAOTOKEN_BASE_URL}/v1/messages`,请求体包含 `model`、`max_tokens`、`messages` 三个字段。 ## 错误处理 - 空输入:返回「未检测到表格内容」。 - 缺少分隔行:返回「表格格式不完整,请检查 Markdown 语法」。 - 模型调用失败:返回原始错误码,不重试超过 2 次。注意env字段里我列了三个环境变量,这是为了让技能不硬编码 Key。技能运行时从环境变量读,换机器只改环境变量。
接下来是 skill-creator 的命令清单。这些不是 shell 命令,而是你在 Hermes 对话里发给 AI 的指令,我按流程顺序列出来:
# 启动创建 请使用 skill-creator 帮我创建一个新技能 # 需求定义阶段(按提示回答) 技能名称:markdown 表格转 SQL 用途:自动解析 Markdown 表格,生成 SQL 建表语句 输入:Markdown 格式的表格文本 输出:可执行的 SQL CREATE TABLE 语句 # 设计确认阶段(如需调整) 增加对日期类型的识别和处理 输出时添加主键和注释 # 生成文件后要求导出 请导出技能包并给出安装命令 # 中断后恢复 请继续使用 skill-creator 完成之前的技能创建流程 # 优化已有技能 请使用 skill-creator 优化当前已安装的 markdown 表格转 SQL,补充边界场景处理导出后你会拿到两种安装形式,命令分别是:
hermes skills install [生成的技能ID] hermes skills install ./你的技能目录名如果你用 Cline MCP 或者 Codex 的 auth.json 来管理模型凭证,建议把三件套写进配置文件,而不是散落在各个技能里。以 settings 片段为例,路径按你实际环境放:
{ "env": { "TAOTOKEN_BASE_URL": "https://taotoken.net/api", "TAOTOKEN_API_KEY": "sk-你的Key", "TAOTOKEN_MODEL_ID": "claude-sonnet-4-5" } }这个片段的作用是:所有技能共享同一套模型调用凭证。SKILL.md 里只引用变量名,不出现真实 Key。这样你以后换 Key 只改这一处。
4. 验证请求:一条 curl 确认技能加载与调用
技能建好、环境变量配好之后,别急着在对话里试。先用一条 curl 确认模型通道是通的,再确认技能能被加载。顺序反了的话,出问题你分不清是技能的问题还是通道的问题。
先验证模型通道。这条 curl 直接打统一 API,确认 Base URL、Key、Model ID 三件套有效:
curl -sS https://taotoken.net/api/v1/messages \ -H "content-type: application/json" \ -H "x-api-key: $TAOTOKEN_API_KEY" \ -H "anthropic-version: 2023-06-01" \ -d '{ "model": "'"$TAOTOKEN_MODEL_ID"'", "max_tokens": 128, "messages": [ {"role": "user", "content": "只回复两个字:通了"} ] }'预期返回是一个 JSON,content数组里有一段文本,内容是「通了」。如果返回 401,说明 Key 不对或者没带上;如果返回local proxy failed之类的连接错误,说明 Base URL 写错了或者网络出口有问题;如果返回里choices字段读不到,说明你用的请求格式和模型不匹配,检查是不是把 OpenAI 格式和 Anthropic 格式混用了。
通道通了之后,验证技能加载。Hermes 里查看已安装技能:
hermes skills list你应该能在列表里看到markdown-table-to-sql,状态是 enabled。如果没看到,说明安装那一步没成功,回到第三节重新导出安装。
然后触发一次技能调用。在 Hermes 对话里发:
用 markdown 表格转 SQL 处理下面这段: | id | name | price | |----|------|-------| | 1 | 苹果 | 5.5 | | 2 | 香蕉 | 3.2 |预期输出是一段CREATE TABLE语句,列类型推断为id INTEGER、name TEXT、price REAL。如果技能没触发,而是模型直接回答了,说明triggers里的关键词没匹配上,回去改 SKILL.md 的触发条件,重新安装。
实测下来,最容易出问题的是环境变量没被技能进程读到。你可以在技能里加一行调试输出,把TAOTOKEN_BASE_URL打印出来确认。如果打印为空,说明环境变量没注入到技能运行环境,检查你的 settings 片段路径对不对。
5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth
这一节按真实报错来对。你遇到哪个,直接找对应条目。
401 Unauthorized。最常见。原因有三个:Key 没带、Key 带错、Key 被回收。先确认请求头里x-api-key的值是不是sk-开头,再确认这个 Key 在控制台里状态是 active。如果你用的是环境变量,先echo $TAOTOKEN_API_KEY看有没有值。注意别把 Key 写进 SKILL.md 然后提交到仓库,这是泄露高发区。
local proxy failed。这个报错通常出现在你本地配了某个转发层,但转发层没起来或者端口不对。排查顺序:先确认TAOTOKEN_BASE_URL是不是https://taotoken.net/api,不要带多余路径;再确认本机没有残留的代理环境变量干扰,比如HTTP_PROXY、HTTPS_PROXY,有的话先 unset 再试。如果你在容器里跑,确认容器网络能出网。
reading choices 相关报错。这个一般是你把请求格式搞混了。Anthropic 格式的返回是content数组,OpenAI 格式的返回才是choices数组。如果你用 Anthropic 的请求体去打,却按choices去解析返回,就会读不到。检查你的技能脚本里解析返回的那段代码,确认字段名和请求格式一致。统一通道两种格式都支持,但请求和解析要配套。
OAuth 相关报错。如果你在 Claude Code 或类似工具里配了 OAuth 登录,又同时配了 API Key,可能会冲突。排查方法:先确认你走的是 Key 认证还是 OAuth 认证,二选一,别混用。如果技能里读的是环境变量 Key,就把工具里的 OAuth 登录退掉,避免它优先用 OAuth 凭证去请求。
还有一个不报错但很烦的问题:技能装了但触发不了。这通常是triggers关键词写得太窄。比如你只写了「markdown 表格转 SQL」,用户说「把这个表格变成建表语句」就匹配不上。解决办法是把常见说法都列进triggers,或者把description写得更宽泛,让模型自己判断。
排查完记得重新安装技能,因为 SKILL.md 改了之后不重装不生效:
hermes skills install ./你的技能目录名6. 把技能接到你的工作流里
技能建好只是第一步,真正省时间的是把它接到日常流程里。我的做法是:每个高频重复的任务建一个技能,技能里只写流程和约束,模型调用统一走 TaoToken 通道。这样你的技能库会越来越厚,但凭证管理始终只有一套。
如果你要验证某个 Model ID 在技能里表现如何,可以去模型对话页面快速试,地址是 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。试好了再把 Model ID 写进环境变量。
长期跑编码类或 Agent 类技能的话,Coding Plan 比按次调用更划算,地址是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,里面有各语言的完整示例。Key 管理在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,建议按技能维度建 Key,方便排查和回收。
最后一个实用技巧:SKILL.md 里的version字段别偷懒。每次改技能逻辑就升一个版本号,这样你回滚的时候知道回到哪个版本。技能目录建议用 git 管起来,但记得把真实 Key 排除在版本控制之外,用环境变量或者本地 settings 文件承载。