1. 从 170 到 188:中文教育 Agent Skill Pack 的工程化升级到底改了什么
Hermes Edu Skills 是一套面向中文教育场景的 Agent Skill Pack,它把「讲题、错题复盘、学习计划、绘本共读、老师备课」这类任务拆成一个个结构化 Skill,让 Agent 按场景加载对应能力。它适合三类人:做 AI 家教/学习助手的产品开发者、想给 OpenClaw 或 Codex 挂上教育能力的个人用户、以及需要批量验证技能可用性的教研工具维护者。这次从 170 到 188 的升级,表面是多了 18 个 Skill,实际是一次能力层重构:补齐学前启蒙、重排产品级分类、增强 CLI 安装诊断修复导出、提升 Hermes Agent 对本地 Skill 的可见性,并让整套包能被 OpenClaw、Codex、Cursor、Claude Code 等不同运行时复用。
我最初接触这套包时,卡点不在「Skill 写得好不好」,而在「装完之后 Agent 到底看不看得见」。170 个 Skill 时代,很多人 clone 仓库、手动找目录、把 SKILL.md 拷到某个隐藏路径,然后发现 Agent 依然说「没有可用技能」。问题出在链路:Skill 内容是一层,CLI 安装是另一层,Agent 运行时读取又是第三层,任何一层断了,188 个 Skill 都等于零。
所以这篇不讲「教育理念」,讲可复现的工程链路:用 TaoToken 统一 Key 打通 API 通道,在 OpenClaw 和 Codex 里逐条跑通 188 个 Skill 的加载与调用验证,并把结果记录下来。核心检索词就是 Hermes Edu Skills、Agent Skill Pack、CLI 验证链。下面每一步都能直接复制执行,遇到报错也有对照排查。
先说清楚这次升级里最容易被忽略的一点:分类模型变了。旧版把学前内容零散塞进「家庭教育」或「每日练习」,新版把preschool提成一级分类。分类不是装饰,它直接决定 CLI 的search和match能不能命中。分类表大致是这样:
| 分类 | 覆盖场景 |
|---|---|
| preschool | 学前启蒙、幼小衔接、亲子共学 |
| textbook-sync | 教材同步、单元学习、课堂巩固 |
| daily-practice | 每日练习、短时巩固、主动回忆 |
| reading-writing | 阅读理解、写作表达、语言输出 |
| exam-prep | 期末、中考、高考、考研、考证备考 |
| learning-assistant | 学习计划、错题复盘、苏格拉底式辅导 |
| family-education | 家庭陪学、家校沟通、作业习惯 |
| teacher-tools | 老师备课、作业生成、班级学情分析 |
你要验证 188 个 Skill,就不能只数目录里的文件夹数量,而要验证「分类 → 索引 → 匹配 → 调用」这条链。catalog.json负责让工具知道有哪些 Skill、属于什么分类、如何安装和匹配;每个 Skill 目录下的SKILL.md负责让 Agent 知道怎么执行。两者结合,Skill Pack 才具备可发现、可安装、可路由、可迁移的能力。这也是为什么我把验证重点放在 CLI 和统一 Key 上,而不是逐个读 Skill 文案。
2. TaoToken 前置:统一 Key 与 API 通道准备
在跑 CLI 验证之前,先把 API 通道固定下来。原因很实际:188 个 Skill 的验证会产生大量模型调用,如果每个工具各配一套 Key、各写一份 Base URL,后面排查 401 或超时会变成灾难。TaoToken 在这里的作用是提供统一的 API 通道,让 OpenClaw、Codex 以及 CLI 里的模型调用都指向同一个入口,Key 只维护一份。
你需要先拿到两样东西:API Key 和 Base URL。Key 在控制台的 API Keys 页面创建,地址是 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 。Base URL 统一用 https://taotoken.net/api ,注意这个地址后面不加任何 UTM 参数,配置里写错一个字符就会直接连不上。
创建 Key 的时候建议按用途分开:一个给 CLI 验证用,一个给 OpenClaw,一个给 Codex。不是为了安全表演,而是当某个工具报 401 时,你能立刻判断是 Key 失效还是配置写错。Key 只在创建时完整显示一次,复制后先存到本地环境变量,不要直接写进会提交到 Git 的配置文件。
环境变量这样设,Linux/macOS 用:
export TAOTOKEN_API_KEY="sk-你的Key" export TAOTOKEN_BASE_URL="https://taotoken.net/api"Windows PowerShell 用:
$env:TAOTOKEN_API_KEY="sk-你的Key" $env:TAOTOKEN_BASE_URL="https://taotoken.net/api"设完先验证通道本身是通的,再谈 Skill 加载。用 curl 打一次模型列表或对话接口:
curl -s https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-20250514", "messages": [{"role": "user", "content": "只回复 ok"}], "max_tokens": 16 }'返回里能看到choices数组和内容,说明 Key 和通道都正常。如果这里就失败,后面所有 Skill 验证都没有意义,先解决通道问题。模型 ID 要按你账号实际可用的填,不要照抄一个不可用的名字,否则会得到模型不存在的报错,而不是通道报错,容易误判。
注意:Base URL 只写到
/api,具体路径由各工具自己拼接。有的工具会自动补/v1,有的不会,配置时看清工具文档里的字段含义,别把/v1重复写两遍。
通道通了之后,再装 Hermes Edu Skills 的 CLI。它通过 npx 直接运行,不需要全局安装:
npx --yes hermes-edu-skills install安装完成后立刻做一次诊断,这一步是整条验证链的关键:
npx --yes hermes-edu-skills doctordoctor会检查本地配置、目录结构、Hermes 可见性以及 Windows 命令入口。如果它报出目录缺失或可见性问题,先跑修复命令:
npx --yes hermes-edu-skills fix npx --yes hermes-edu-skills repair更新、验证、卸载是独立命令,验证阶段会反复用到verify:
npx --yes hermes-edu-skills update npx --yes hermes-edu-skills verify npx --yes hermes-edu-skills uninstall这套命令看起来不如「新增 18 个 Skill」显眼,但它决定了你从「看到项目」到「真正跑起来」之间要踩多少坑。我试过在没跑doctor的情况下直接导出到 Codex,结果 Agent 侧一直读不到技能,回头才发现是本地索引没生成。先诊断,再导出,顺序不能反。
3. 可复制配置:OpenClaw 与 Codex 的接入片段
这一节给出可直接复制的配置片段,路径和字段名按工具实际约定来。核心是三件套:Base URL、Key、Model ID。任何一处缺失,Agent 都会表现为「连不上」或「看不到技能」。
先做多工具导出。Hermes Edu Skills 支持把 Skill Pack 导出到不同运行时:
npx hermes-edu-skills install openclaw npx hermes-edu-skills install codex npx hermes-edu-skills install claude npx hermes-edu-skills install cursor --workspace /path/to/project npx hermes-edu-skills export generic --target ./dist/agent-skills设计原则是:skills/保持 Hermes 原生格式,每个 Skill 有独立SKILL.md,agent-pack按目标工具复制、扁平化或生成规则文件,通用导出产物保留AGENT_SKILL_PACK.json。这意味着你导出到 OpenClaw 和 Codex 的产物结构不同,但源头一致。
OpenClaw 的配置一般放在用户配置目录下的 JSON 文件里,字段结构如下:
{ "provider": { "baseUrl": "https://taotoken.net/api", "apiKey": "${TAOTOKEN_API_KEY}", "model": "claude-sonnet-4-20250514" }, "skills": { "packPath": "./dist/agent-skills", "autoLoad": true, "indexFile": "AGENT_SKILL_PACK.json" } }Codex 侧使用auth.json管理凭据,路径通常在~/.codex/auth.json,内容形如:
{ "base_url": "https://taotoken.net/api", "api_key": "sk-你的Key", "model": "claude-sonnet-4-20250514" }如果你用 Cline 的 MCP 方式挂载,配置片段是:
{ "mcpServers": { "hermes-edu-skills": { "command": "npx", "args": ["--yes", "hermes-edu-skills", "serve"], "env": { "TAOTOKEN_BASE_URL": "https://taotoken.net/api", "TAOTOKEN_API_KEY": "sk-你的Key" } } } }三件套在这里体现得很清楚:base_url指向 TaoToken 的 API 入口,api_key用你创建的 Key,model填实际可用的模型 ID。Cline MCP 场景下,环境变量名要和 CLI 读取的一致,否则 MCP 进程起来了但拿不到 Key,表现为请求 401。
导出后检查产物里有没有AGENT_SKILL_PACK.json,以及skills/下八个分类目录是否齐全:
ls ./dist/agent-skills ls ./dist/agent-skills/skills如果preschool目录缺失,说明你用的还是旧版导出逻辑,先update再重新导出。分类目录不全会直接导致search和match命中率下降,因为索引是按分类构建的。
提示:配置文件里的 Key 尽量用环境变量引用,不要硬编码。Codex 的
auth.json如果必须写明文,记得把它加入.gitignore,避免误提交。
配置完成后不要急着跑全部 188 个,先用一个 Skill 做冒烟测试。挑learning-assistant下的错题复盘类 Skill,因为它的输入输出结构最典型,成功与否容易判断。
4. 验证请求与成功结果:逐条跑通 188 个 Skill
验证分三层:CLI 层确认 Skill 可发现,路由层确认自然语言能命中,调用层确认 Agent 真的执行了 Skill。三层都过,才算这个 Skill 可用。
第一层,用verify做批量检查:
npx --yes hermes-edu-skills verify它会遍历catalog.json里的条目,检查每个 Skill 的SKILL.md是否存在、分类是否合法、索引是否可读。输出里会给出通过数和失败数。188 个全过是最理想状态,如果有失败项,记下 slug,后面单独排查。
第二层,测自然语言路由。用户不可能记住 188 个英文 slug,所以search和match是核心能力:
npx hermes-edu-skills search 学习计划 npx hermes-edu-skills match "孩子数学错题总是同一类,怎么复盘?"search返回候选列表,match返回最匹配的 Skill 及理由。成功结果应该能看到命中的 slug、所属分类和匹配依据。如果match返回空或命中一个明显不相关的 Skill,说明索引或分类有问题,回到doctor检查。
第三层,在 OpenClaw 和 Codex 里实际调用。以错题复盘为例,给 Agent 的输入是:
孩子这道题又错了,题目是「3/4 + 1/6」,他写成了 4/10。 请按错题复盘流程处理,输出知识点、错因、订正说明和同类练习建议。成功的返回应该包含几个部分:知识点识别(分数加法需要通分)、错因判断(把分子分母直接相加,属于概念错误)、订正说明、以及同类巩固建议。如果 Agent 只回了一句「正确答案是 11/12」,说明它没有加载 Skill,走的是普通对话路径,需要检查autoLoad和packPath。
批量验证 188 个时,建议写一个循环脚本,把每个 Skill 的 slug 喂给 CLI,记录返回状态:
for slug in $(jq -r '.skills[].slug' catalog.json); do result=$(npx --yes hermes-edu-skills match "$slug" 2>&1) if echo "$result" | grep -q "$slug"; then echo "PASS $slug" else echo "FAIL $slug" fi done结果记录方式建议用 CSV,字段包括 slug、分类、CLI 验证状态、路由命中状态、Agent 调用状态、备注。这样 188 行跑完,哪些 Skill 只是「存在」、哪些真正「可用」一目了然。我实测下来,最容易失败的是新增的preschool类,因为它们的触发语句偏口语化,索引关键词需要更贴近家长的真实问法。
成功结果的判断标准要统一:CLI 层返回非空、路由层命中正确 slug、调用层输出包含 Skill 定义的结构化字段。三者缺一,就记为部分通过,不要为了凑 188 这个数字把「能搜到」当成「能用」。
5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth
验证过程中会撞到几类固定报错,逐个对照处理。
401 Unauthorized。最常见,原因是 Key 无效、过期或没被正确读取。先确认环境变量在当前 shell 里可见:
echo $TAOTOKEN_API_KEY如果为空,说明 export 只在另一个终端生效。如果非空但仍 401,检查 Key 是否被复制时带了空格或换行,以及 Base URL 是否写成了带 UTM 的地址。Base URL 必须是https://taotoken.net/api,多一个字符都会导致鉴权失败。
local proxy failed。这个报错通常出现在工具试图走本地代理但代理未启动或端口不对。检查配置里有没有残留的代理字段,把它清掉,让请求直连 TaoToken 的 API 入口。同时确认系统环境变量里没有指向失效端口的HTTP_PROXY。
reading choices 相关报错。典型表现是解析响应时读不到choices字段,原因可能是模型 ID 不可用,返回了错误结构而不是正常对话结构。先用第 2 节的 curl 命令确认模型 ID 能正常返回choices,再把它填进 OpenClaw 或 Codex 配置。如果 curl 正常但工具报错,检查工具是否在请求里覆盖了 model 字段。
OAuth 相关报错。Codex 某些版本会优先走 OAuth 流程,如果你用的是 API Key 模式,需要在配置里显式声明凭据类型,避免它去读不存在的 OAuth token。auth.json里字段名要和版本匹配,升级 Codex 后配置结构可能变化,升级前先备份。
Skill 加载了但 Agent 不调用。这不是报错,但最容易被忽略。检查AGENT_SKILL_PACK.json是否在packPath指向的目录里,以及autoLoad是否为 true。如果索引文件存在但 Agent 仍不调用,用match命令确认路由层能命中,路由不通时 Agent 拿不到 Skill 描述,自然不会调用。
Windows 下 CLI 命令入口异常。doctor会专门检查这一项。如果 npx 能跑但命令找不到,尝试用完整路径调用,或检查 PATH 里是否有冲突的同名命令。repair命令会重建命令入口,多数情况下能解决。
排查顺序建议固定:先 curl 验通道,再doctor验本地,再verify验 Skill,最后在 Agent 里验调用。从下往上排,能避免在错误层反复折腾。每次改完配置,重跑一次doctor,确认状态再继续。
6. 把验证链固定下来:后续迭代与接入入口
188 个 Skill 跑通之后,真正有价值的是把这条验证链固定成可重复的流程。每次 Skill Pack 更新,你只需要重跑update、doctor、verify和批量 match 脚本,就能知道新版本有没有破坏既有能力。这比每次手动翻目录可靠得多。
如果你要继续扩展,重点放在三件事:提升 Skill 质量而不是堆数量,尤其是错题复盘、学习计划、阅读写作、考试复习、老师工具这些高频场景;增强路由能力,让自然语言问题更准确地命中 Skill,并让用户看得见匹配理由;推动更多开发者和教研人员共建,因为中文教育场景的教材、地区、考试体系差异太大,单靠一个人覆盖不完。
接入所需的入口整理如下,按你的场景选:
- 需要创建或管理 Key,去 API Keys 页面:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite
- 想先验证模型对话是否正常,用模型对话入口:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite
- 长期做编码或 Agent 开发,看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite
- 需要查接入文档和字段说明,去文档页:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite
- 管理控制台和用量,进 Console:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite
最后给一个实用技巧:把批量验证脚本和结果 CSV 一起提交到你的项目仓库,作为 Skill Pack 可用性的回归基线。下次升级时,对比新旧 CSV,就能快速定位是哪些 Skill 的路由或调用退化了。这比记住 188 个 slug 有用得多。