08.05概念更新于 2026年9月17日

写好一个 Skill

触发描述、步骤粒度、示例、验证与迭代。

08.05 · 课时讲解

写好一个 Skill

准确触发的描述 + 只写不知道的 + 自带验证 + 评测驱动迭代。

1 / 11

一句话理解:好 Skill = 能被准确触发的描述 + 只写 Agent 不知道的内容 + 自带验证的步骤 + 用评测驱动的迭代。

让模型“帮我写一个销售分析 Skill”,几秒钟就能得到一份看起来很专业的文档:“确保数据准确”“遵循最佳实践”“注意异常值”。问题是这些话 Agent 本来就知道,真正会让它出错的东西(退款单还留在订单表里、华东区口径包含哪些城市、测试账号怎么识别)一条都没写。

写 Skill 的难点不在格式,而在内容取舍。这一课按写作顺序,讲清楚每一步的要点。

五个步骤不是走一遍就结束,而是一个闭环:

写 Skill 的五个步骤及其迭代闭环 ① 真实经验 任务与纠错记录 ② description 做什么 + 何时用 ③ 正文 只写不知道的 ④ 步骤与验证 清单 · 验证回路 ⑤ 评测迭代 触发 + 效果 每纠正一次 Agent,就把这条补进踩坑清单;评测失败,回到对应步骤修改
图 1 · 五步写作顺序:从真实经验出发,用评测结果回头修改

第一步:从真实经验出发

agentskills.io 的最佳实践指出,一个常见的失败模式是:不提供任何领域材料,只让模型凭通用知识生成 Skill,结果得到的都是空泛的步骤。有效的 Skill 来自真实经验,主要有两种提炼方式:

  • 从一次真实任务里提炼:先和 Agent 一起完整做一遍任务,过程中你会不断补充背景、纠正做法、说明偏好。做完后回头看:哪些步骤是有效的?你纠正过它什么?提供了哪些它原本不知道的事实?这些就是 Skill 的原材料。
  • 从已有资料中综合:内部 Runbook、故障复盘、Code Review 意见、历史工单的处理记录。基于你们团队真实处理记录写成的工单排查 Skill,一定比基于“客服最佳实践”文章写成的好用。

Anthropic 的文档推荐一种 “Claude A / Claude B” 的迭代方式:用一个会话(A)和你一起设计、修改 Skill,再用一个装了该 Skill 的全新会话(B)去做真实任务。观察 B 在哪里卡住,再带着具体现象回到 A 修改。一定要用全新会话测试,否则写 Skill 时留下的上下文会掩盖指令里的缺口。

这个迭代方式可以画成一个循环:

Claude A / Claude B 迭代循环:一个会话写 Skill,另一个全新会话用 Skill Claude A · 设计会话 和你一起写、改 Skill SKILL.md 与附属文件 写入新的规则与踩坑 Claude B · 全新会话 装上 Skill 做真实任务 观察卡点 记录具体现象,带回 A 保存修改 加载 暴露缺口 反馈 A 负责写,B 负责用 测试一定用全新会话
图 2 · A 写、B 用:全新会话 B 暴露的问题,带回会话 A 修改

第二步:写好 description

描述承担了全部触发责任。好描述要同时回答两个问题:做什么,以及什么时候用。

对比两个版本:

# 差:太宽泛,触发时机不明
description: 帮助处理销售数据。

# 好:能力具体,场景覆盖到用户的日常说法,也划清了边界
description: 分析销售数据的变化原因:按区域、渠道、SKU 逐层下钻,对照库存与促销记录定位下降或增长的驱动因素,并输出带数据证据的结论。当用户询问业绩为什么变化、某区域或产品表现异常、需要解释周报或月报中的波动时使用,即使用户没有提到“分析”二字。只做原因分析,不负责生成常规周报。

几条写法要点:

  1. 写用户意图,不写内部实现。 Agent 拿用户的话去和描述比对,“业绩为什么掉了”比“执行多维下钻算法”更容易匹配。
  2. 主动覆盖不含术语的说法。 agentskills.io 甚至建议写得“积极”一点,明确列出用户没有点名领域时也适用的情况。
  3. 写清边界。 最后一句“不负责生成常规周报”能减少和相邻 Skill 的误触发。
  4. 人称保持一致。 Anthropic 建议用第三人称描述(“分析……”而不是“我可以帮你……”),因为描述会被注入系统提示词;agentskills.io 则建议用“当……时使用此 Skill”的祈使句式。两种都可以,关键是不要写成“我能帮你做 XX”。
  5. 关键场景放在最前面。 规范上限是 1024 个字符,某些产品在 Skill 很多时还会截短描述。

看一个真实案例。本站作者的 Search Router 的 SKILL.md 在描述里直接写进了“搜索 XXX”“帮我查一下”“网络查询”这些口语化触发说法,这是对的。它还额外写了一个 triggers 列表字段,但 triggers 不在 Agent Skills 规范的字段里。在遵循规范的产品中,能保证起作用的是 description,所以触发说法一定要写进描述本身。

第三步:正文只写 Agent 不知道的

每写一段,都问自己一句:“没有这句话,Agent 会做错吗?” 不会,就删掉。不确定,就去测试。

最有价值的部分:踩坑清单

agentskills.io 认为,很多 Skill 里价值最高的内容是一份“踩坑清单”:违反常识、只有在你们的环境里才成立的事实。例如销售分析 Skill:

## 注意事项

- 退款订单不会从 orders 表删除,而是 status = 'refunded'。计算 GMV 时必须排除,否则会高估。
- “华东区”在销售口径里包含上海、江苏、浙江、安徽,但在市场活动口径里不含安徽。
- 测试账号的 user_id 以 9999 开头,任何统计都要先过滤。
- 大促当周的环比没有参考意义,改用去年同期对比,并在结论里说明。

每当你在使用中纠正了 Agent 一次,就把这条纠正补进清单。这是迭代 Skill 最直接的方法。

给默认选项,不给菜单

“可以用 A、B、C 或 D 方法”会让 Agent 反复尝试。更好的写法是:给一个默认方案,再说明例外情况下用什么。

教方法,不教某一题的答案

“把 orders 表和 customers 表按 customer_id 关联,筛选华东区求和”只对一个问题有用。“先读 references/schema.md 找到相关表,用 _id 外键关联,按用户问题加筛选条件,结果用 Markdown 表格输出”适用于一类问题。

按任务的脆弱程度决定约束强度

自由度 适用情况 写法 例子
高 多种做法都可以,取决于具体情况 给检查要点和判断原则,解释原因 代码评审、竞品调研
中 有推荐做法,允许适度变化 给模板或带参数的脚本 销售周报、SEO 报告
低 操作脆弱、必须严格一致 给确切命令,并写明“不要修改参数” 数据库迁移、批量更新线上配置

第四步:步骤、清单与验证回路

多步骤任务最常见的失败是跳步和“自以为完成”。三个模式可以显著改善:

进度清单:让 Agent 把清单复制到回复里,逐项勾选。

复制以下清单并随进度更新:
- [ ] 1. 对每个页面运行 check_page.py
- [ ] 2. 按 references/rules.md 判定每一项
- [ ] 3. 汇总问题并按严重程度排序
- [ ] 4. 按模板输出报告
- [ ] 5. 核对报告中每个问题都有脚本输出作为证据

验证回路:做完 → 运行校验 → 修正 → 再校验,直到通过才继续。校验器可以是脚本,也可以是一份对照清单。

验证回路的结构如下,关键是“通过才继续”:

验证回路:完成一步后运行校验,不通过就修正并再次校验,通过才继续 完成一步 运行校验 脚本或对照清单 通过? 继续下一步 修正 按报错指引 是 否 再校验 报错信息要具体到能指导修正
图 3 · 验证回路:校验不通过就修正再校验,直到通过才进入下一步

先计划、再校验、后执行:批量或不可逆的操作,先让 Agent 生成结构化的变更计划,用脚本对照真实数据校验,通过后再执行。比如批量修改 50 个页面的 meta description:先生成 changes.json,脚本检查每个 URL 是否存在、长度是否合规,全部通过才真正写入。

写脚本时还有一条原则:脚本自己处理错误,不要把问题甩给模型。 报错信息要具体到能指导修正,比如“字段 signature_date 不存在,可用字段:customer_name、order_total”。

第五步:用评测驱动迭代

Anthropic 建议先建评测,再写大量内容:先让 Agent 在没有 Skill 的情况下做几个代表性任务,记录它具体错在哪里;针对这些缺口设计至少三个测试场景,测出基线;然后只写刚好能弥补缺口的内容。

评测分两类,要分开做:

评测什么 怎么做 通过标准
触发是否准确 准备约 20 条真实风格的提问:8–10 条应该触发,8–10 条不应该触发;负例优先选“近似但不该触发”的说法;每条运行 3 次,计算触发率 应触发的触发率高于阈值(agentskills.io 给的默认值是 0.5),不应触发的低于阈值
效果是否更好 同一批任务,分别在装了 Skill 和没装 Skill 的全新会话中运行,对比结果 装了 Skill 后质量明显提升,Token 与耗时的增加可以接受

优化描述时,为了避免“只对这 20 句话有效”,可以把提问按约 60% / 40% 分成训练集和验证集,只根据训练集的失败修改描述,用验证集判断改动是否真的有效。Claude Code 用户可以安装官方的 skill-creator 插件,自动完成测试用例管理、有无 Skill 对比和描述调优。评测集的更多方法见「构建评测集」。

常见误区

  • 写成百科全书。 过度详尽的 Skill 反而有害:Agent 难以找到与当前任务相关的部分,还可能去执行根本不适用的指令。
  • 只测“应该触发”。 不测负例,就发现不了描述太宽导致的误触发。最有价值的负例是共享关键词但需求不同的说法,比如“帮我写个脚本把 CSV 导入数据库”对 CSV 分析 Skill 来说就是一个近似负例。
  • 写完就不管。 业务口径会变,系统会升级。Skill 需要负责人,随着踩坑清单和评测结果持续更新。
  • 把时效性信息写死。 “2025 年 8 月之前用旧接口”这类内容迟早会过期。当前做法写在正文,历史做法单独放到“旧版本说明”里。

Skill 评审清单

  • 描述同时写了“做什么”和“什么时候用”,覆盖用户的口语说法,并写清边界
  • 正文的每一段都通过了“没有它会做错吗”的检验
  • 有一份来自真实纠错的踩坑清单
  • 多步骤任务有进度清单,关键步骤有验证回路
  • 确定性操作交给脚本,脚本的报错信息可以直接指导修正
  • 至少有三个测试场景,并有无 Skill 时的基线对比
  • 触发测试包含近似负例,并且多次运行
  • 明确了 Skill 的负责人和更新机制

练习

改写一个“坏 Skill”(约 50 分钟)。下面是一份典型的初稿:

---
name: support-helper
description: 客服相关的帮助。
---

# 客服助手

客服是连接产品与用户的重要环节。处理客服问题时要认真细致,
确保信息准确,遵循最佳实践,必要时可以查询各种系统。
  1. 找出它的问题:名字太泛、描述没有触发时机、正文全是 Agent 本来就知道的内容。
  2. 基于「客服工单处理 Agent」的场景重写:新名字、完整描述、排查步骤、至少 3 条踩坑清单、输出格式。
  3. 写出 6 条触发测试提问(3 条应触发、3 条近似负例),并说明每条负例“近似”在哪里。

延伸阅读

下一步

下一课「实操:把一个 SOP 做成 Skill」会带你把 SEO 诊断流程从零做成一个 Skill,并在 Claude Code 中验证触发和效果。

试试:上下文、MCP、沙箱、Prompt 注入、外链