
1. 技能为什么会悄悄过期一个真实场景你三个月前写了一个 Claude Skill专门教模型怎么生成落地页文案。当时模型确实不擅长这件事你写了详细的步骤、语气要求、结构模板效果立竿见影。然后 Anthropic 发布了新模型新模型自己就能把落地页写得很好甚至比你那个技能指导下的表现还强。但你的技能还在那儿每次调用都固执地告诉 Claude「按我说的步骤来」结果反而拖累了输出质量。这种情况最麻烦的地方在于技能不会报错不会崩溃它只是安静地让你的结果变差。你如果不做对比测试根本发现不了。这就是 AI 时代的「技术债务」——技能也会过期而且你往往后知后觉。Claude Skills 2.0 引入的 Comparator Agents 和 Skill Creator 的 benchmark 模式就是来解决这个问题的。它让你能像做产品 A/B 测试一样用数据判断一个技能到底还在不在起作用。这篇文章会给你一套可复制的技能基准配置骨架以及完整的 A/B 测试验证动作让你在本地就能复现技能对比流程判断技能是否已经失效。适合谁看已经在用 Claude Skills 做工作流的人、维护多个技能库的团队、以及任何想知道「我的技能是不是在帮倒忙」的开发者。核心检索词就三个Claude Skills、技能基准、A/B 测试。2. 前置准备TaoToken 接入与 Skill Creator 环境2.1 为什么需要 TaoTokenComparator Agents 的 A/B 测试需要同时跑两个版本的技能对比这意味着 API 调用量会翻倍。如果你直接用官方 API成本和速率限制都会成为瓶颈。TaoToken 提供了兼容 Anthropic 接口的接入方式你可以在不改变代码结构的前提下把请求指向 TaoToken 的端点。官网地址https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentAPI 端点https://taotoken.net/api注意API 地址后面不加 UTM 参数直接使用即可。2.2 获取 API Key进入控制台创建密钥https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite在 API Keys 页面生成一个新的 keyhttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite拿到 key 之后设置环境变量。我习惯用.env文件管理避免 key 泄露到代码仓库# .env ANTHROPIC_BASE_URLhttps://taotoken.net/api ANTHROPIC_API_KEYsk-你的key如果你用的是 Claude Code 或者 Anthropic SDK这两个环境变量会被自动读取。不需要改任何业务代码。2.3 安装 Skill CreatorSkill Creator 是 Anthropic 官方提供的技能创建与测试工具。如果你还没装用 npm 全局安装npm install -g anthropic-ai/skill-creator安装完成后验证版本skill-creator --version确认输出包含 benchmark 模式支持。如果版本太旧benchmark 子命令可能不存在需要升级到最新版。3. 可复制的技能基准配置骨架3.1 目录结构一个标准的技能基准测试项目长这样skill-benchmark/ ├── skills/ │ ├── landing-page-v1/ │ │ └── SKILL.md │ └── landing-page-v2/ │ └── SKILL.md ├── evals/ │ └── landing-page-eval.yaml ├── benchmark.config.yaml └── .envskills/下放你要对比的两个技能版本。evals/下放评测用例。benchmark.config.yaml是核心配置文件。3.2 benchmark.config.yaml 配置骨架# benchmark.config.yaml benchmark: name: landing-page-skill-ab description: 对比 landing-page 技能 v1 与 v2 以及无技能基线 variants: - name: no-skill skill_path: null description: 不加载任何技能测试基础模型能力 - name: skill-v1 skill_path: ./skills/landing-page-v1 description: 三个月前的旧技能 - name: skill-v2 skill_path: ./skills/landing-page-v2 description: 优化后的新技能 eval: file: ./evals/landing-page-eval.yaml runs_per_case: 3 temperature: 0.7 comparator: enabled: true model: claude-sonnet-4-20250514 blind: true criteria: - 文案说服力 - 结构清晰度 - 语气一致性 - CTA 有效性 output: format: markdown path: ./reports/landing-page-ab-report.md include_raw: false关键参数说明variants里定义你要对比的版本。no-skill这一项很重要它是基线用来判断基础模型是否已经能独立完成这个任务。如果no-skill的得分接近甚至超过skill-v1说明你的技能可能已经多余了。runs_per_case: 3表示每个评测用例跑三次取平均减少随机性带来的误判。comparator.blind: true开启盲评评判代理不知道哪个输出对应哪个版本消除偏见。3.3 评测用例文件# evals/landing-page-eval.yaml cases: - id: lp-001 prompt: 为一款面向开发者的 API 监控工具写落地页首屏文案包含标题、副标题和 CTA 按钮文字 expected_traits: - 标题不超过 12 个字 - 副标题说明核心价值 - CTA 使用动词开头 - id: lp-002 prompt: 为一款团队协作笔记应用写落地页的价值主张部分三个要点 expected_traits: - 每个要点一句话 - 包含具体使用场景 - 避免空洞形容词 - id: lp-003 prompt: 为一款 AI 代码审查工具写落地页的社会证明部分包含两条客户评价 expected_traits: - 评价包含具体数字或结果 - 语气真实不浮夸评测用例不需要多5 到 10 条就能看出趋势。关键是expected_traits要写清楚你关心的维度Comparator Agents 会围绕这些维度做对比评判。4. 运行 A/B 测试并验证结果4.1 执行 benchmark配置好之后一行命令启动skill-creator benchmark --config ./benchmark.config.yaml如果你用的是 TaoToken 的端点确保.env已经加载。可以用dotenv或者直接在 shell 里 exportexport $(cat .env | xargs) skill-creator benchmark --config ./benchmark.config.yaml运行过程中你会看到每个 variant 在每个 case 上的执行进度。三个 variant 乘以三个 case 乘以三次运行一共 27 次调用。根据网络情况大概需要几分钟。4.2 理解 Comparator Agents 的输出跑完之后报告会输出到./reports/landing-page-ab-report.md。核心部分长这样## 对比结果 | Case | no-skill | skill-v1 | skill-v2 | 胜出 | |------|----------|----------|----------|------| | lp-001 | 7.2 | 6.8 | 8.1 | skill-v2 | | lp-002 | 7.5 | 7.0 | 7.9 | skill-v2 | | lp-003 | 6.9 | 6.5 | 7.4 | skill-v2 | ## 综合评分 - no-skill: 7.2 - skill-v1: 6.8 - skill-v2: 7.8 ## 关键发现 skill-v1 在三个用例上均低于 no-skill 基线说明该技能可能已经过期。 基础模型在 landing page 任务上的能力已经超过旧技能的指导效果。这里最重要的信号是skill-v1的得分低于no-skill。这意味着你的旧技能不是在帮忙而是在拖后腿。基础模型自己就能做得更好你的技能反而限制了它的发挥。4.3 判断技能是否失效的决策规则根据多轮实测我总结了一个简单的判断规则场景判断动作no-skill 胜出技能已过期考虑退役或重写skill 险胜差距 0.5技能边缘化保留但持续监控skill 大比分胜出差距 1.0技能有效保持并优化skill-v2 胜出 skill-v1新版本更好替换旧版本关注趋势比关注单次分数更重要。如果你每次模型更新后都跑一遍 benchmark把每次的分数记录下来就能看到技能的「健康曲线」。一条持续下降的曲线比一次低分更能说明问题。4.4 用模型对话快速验证单个技能如果你不想跑完整的 benchmark只想快速验证某个技能在当前模型下是否还有效可以直接用模型对话做一次手动对比https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite在对话界面里先不加载技能问一次再加载技能问一次对比两次输出。虽然不如 Comparator Agents 严谨但能快速给你一个直觉判断。5. 本篇常见错排查5.1 benchmark 报错「skill_path not found」检查benchmark.config.yaml里的路径是相对路径还是绝对路径。Skill Creator 默认以配置文件所在目录为基准解析相对路径。如果你在项目根目录运行命令但配置文件在子目录里路径就会错位。统一用相对于配置文件的路径或者直接写绝对路径。5.2 Comparator Agents 评判结果不稳定如果你发现每次跑出来的胜出方不一样说明评测用例的区分度不够。expected_traits写得太模糊评判代理就没有明确的对比维度。把 traits 写具体比如「标题不超过 12 个字」比「标题简洁」好得多。另外runs_per_case可以调到 5用更多次运行取平均来降低方差。5.3 API 调用超时或速率限制三个 variant 同时跑并发量是单次调用的三倍。如果你用的是免费额度或者低配 key很容易触发速率限制。两个解决办法一是把runs_per_case降到 1 先跑通流程二是用 TaoToken 的 Coding Plan 获得更稳定的调用配额https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite5.4 技能加载了但没生效检查SKILL.md的格式是否符合 Claude Skills 2.0 的规范。常见问题是 frontmatter 缺少必要字段或者技能描述和触发条件写得太窄导致模型没有正确加载。用skill-creator validate命令可以检查技能文件的合法性skill-creator validate ./skills/landing-page-v1如果输出有 warning 或 error按提示修正。5.5 报告里 no-skill 得分异常高这通常说明你的评测用例太简单了基础模型随便就能做好。这种情况下技能的价值本来就有限。你需要设计更有区分度的用例比如加入团队特定的流程要求、特殊的语气规范、或者复杂的多步骤任务。技能的价值在于「教模型做它本来做不好的事」如果任务本身不难技能自然就没有存在感。6. 把技能体检变成常规动作技能基准测试不是跑一次就完事的事情。每次模型大版本更新后你都应该重新跑一遍 benchmark记录分数变化。我自己的做法是在项目里建一个reports/目录每次跑完把报告按日期存档这样就能看到技能的健康趋势。如果你维护的技能比较多建议用 Coding Plan 来支撑批量 benchmark 的调用量https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite接入文档在这里里面有完整的 SDK 配置示例和 Comparator Agents 的进阶用法https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite如果你用 Claude Code 做日常开发也可以把 benchmark 命令挂到 pre-commit hook 里每次修改技能文件后自动跑一次快速验证https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude-code-anthropicutm_campaignrewrite真正的问题从来不是「能不能写技能」而是「写了之后它还在不在起作用」。会维护技能的人比会写技能的人更有价值。