随着Claude Code、Codex、Cursor等智能编程工具逐渐从“代码补全助手”升级为可执行复杂任务的Agent,开发者开始需要一种能够长期复用业务经验的方法。过去,人们通常把代码规范、审查流程和输出模板全部写进System Prompt,但这种方式不仅占用大量上下文,也很难进行版本管理和质量评估。

Agent Skill解决的正是这个问题。它将特定任务需要的知识、流程、脚本和资源封装成独立能力包,并由模型根据当前任务按需加载。Anthropic官方将Skill定义为由指令、脚本和资源构成的文件夹,用于帮助Claude稳定、重复地完成专业任务。

一、Skill为什么不是普通Prompt

普通Prompt通常是一段临时指令,当前对话结束后便失去作用。Skill则具备持久化、模块化和可组合特征,能够放入项目目录,通过Git管理,并在多个会话中重复使用。

一个标准Skill目录可以写成:

code-review/
├── SKILL.md
├── scripts/
│   └── scan_security.py
├── references/
│   └── review-rules.md
└── assets/
    └── report-template.md

其中,SKILL.md负责定义触发条件与执行流程;scripts/存放Python、Bash或JavaScript脚本;references/保存较长的技术规范;assets/则用于存放报告模板、Schema或静态资源。

这种设计把“模型应该如何完成任务”从对话中抽离出来,使团队经验能够像代码一样沉淀、复用和迭代。

二、SKILL.md的标准格式

每个Skill必须包含SKILL.md,文件由YAML frontmatter和Markdown正文两部分组成。YAML告诉模型什么时候调用Skill,Markdown正文则描述Skill触发后应该执行哪些步骤。

---
name: code-review
description: >
  对Git diff、Pull Request或代码变更执行结构化审查。
  当用户要求检查代码缺陷、安全风险、性能问题或合并风险时使用。
license: MIT
compatibility: Requires Git and Python 3.10+
---

# Code Review Workflow

1. 读取当前Git diff。
2. 按严重、高、中、低四个级别分类问题。
3. 检查安全、性能、可维护性和测试覆盖情况。
4. 按模板输出审查报告。

有几项精确限制:name最多64个字符,只能使用小写字母、数字和连字符,并且要与目录名称一致;description长度为1至1024个字符;compatibility最多500个字符。Skill正文建议控制在500行以内,过长内容应拆分到参考文件。

三、三层渐进式加载如何节省上下文

Agent Skill最重要的设计是渐进式加载。

第一层是目录层。会话启动时只加载所有Skill的namedescription,估算每个Skill约占50至100个Token。

第二层是指令层。只有当模型判断当前任务与某个Skill匹配时,才读取完整的SKILL.md正文,官方建议正文低于5000个Token。

第三层是资源层。脚本、参考文档和模板不会一次性进入上下文,而是在正文明确引用时才按需读取。

即使系统安装20个Skill,启动阶段也只需约1000至2000个Token,相比将全部规则塞进单体System Prompt,上下文占用可下降约90%。

四、description决定Skill能否被正确触发

Skill没有传统规则引擎,模型主要根据description自主判断是否加载。因此,描述不能只写“处理PDF”或“帮助审查代码”,而应同时说明能力、适用场景和触发表达。

# 过于模糊
description: Helps with code.

# 更容易正确触发
description: >
  审查Git diff和Pull Request中的缺陷、安全漏洞与性能问题。
  当用户提出code review、检查PR、分析代码风险或合并前审查时使用。

需要注意,description应该重点描述“什么时候使用”,不要把完整工作流全部写进去。描述过于详细时,模型可能直接依照摘要执行,反而跳过完整正文。

五、Skill-Creator如何把Prompt开发变成工程流程

Skill-Creator本身也是一个Skill,其目标不是简单生成一份Markdown,而是建立类似机器学习训练的开发流程。它强调三项原则:追求泛化而不是迎合少数测试用例;解释规则背后的原因,而不是堆砌ALWAYSNEVER;发现重复操作后,将其提炼为可复用脚本。 其完整生命周期包含六个阶段:

需求捕获
→ 编写Skill
→ 设计并执行测试
→ 评分与人工评审
→ 迭代改进
→ 优化description并打包发布

测试阶段通常设计2至3个用例,并同时运行with_skillwithout_skill两组任务,以判断Skill究竟带来了真实提升,还是仅仅增加了上下文。

在多模型应用中,团队还可以在模型调用层通过TreeRouter统一接入Claude、GPT、GLM等模型,减少不同SDK、接口地址和密钥配置的重复维护;Skill则继续负责定义任务触发条件、执行步骤与输出边界,两者分别解决模型接入和行为标准化问题。

六、三个评估Agent如何分工

Skill-Creator设计了三类评估角色。

Grader负责检查任务断言是否真正成立,而不是只看文件是否存在。Comparator在不知道结果来源的情况下对A、B两份输出进行盲评,内容正确性、完整性、准确性分别按1至5分评分,结构与可用性同样按1至5分评价,最后形成1至10分综合结果。Analyzer则负责揭盲,分析获胜方案的原因,并从指令、工具、示例、异常处理和结构等维度输出改进建议。

测试用例可以采用JSON保存:

{
  "skill_name": "code-review",
  "evals": [
    {
      "id": 1,
      "prompt": "检查这个JWT登录模块的安全问题",
      "expected_output": "包含安全风险分级的结构化报告"
    },
    {
      "id": 2,
      "prompt": "审查数据库迁移脚本是否存在数据丢失风险",
      "expected_output": "指出潜在破坏性操作并给出修复建议"
    }
  ]
}

这种方式让Skill优化从“感觉变好了”转变为可比较的通过率、Token消耗、耗时和输出质量。

七、工程化评估也有成本边界

Skill-Creator并非适合所有任务。以3个测试用例为例,一次评测可能产生6个执行Agent、3个Grader和1个Analyzer,总计10个子Agent。复杂Skill反复迭代时,调用量会快速增加。

GitHub Issue #514显示,一次包含20个评估查询、每个查询运行3次的description优化,会启动60个会话,并消耗约69%的5小时配额。该Issue建议使用较轻量模型执行触发判断,成本可能降低10至20倍。需要强调的是,这属于特定配置下的社区案例,不代表所有Skill评估都会产生相同消耗。

因此,简单的格式转换或固定模板任务可以直接手写SKILL.md;只有当任务存在复杂判断、多人维护、长期复用或严格质量要求时,完整评估体系才更有价值。

总结

Agent Skill的价值,不是把Prompt换成Markdown,而是将个人经验转化为可以版本管理、按需加载、自动触发和持续评估的工程资产。

SKILL.md解决行为定义问题,三层加载机制控制上下文成本,description决定触发准确性,而Skill-Creator则通过A/B测试、子Agent评分与迭代优化保证结果质量。对于准备构建企业Agent、代码审查系统或自动化研发流程的团队而言,真正需要掌握的已经不只是“如何写提示词”,而是如何设计、测试和维护一套可长期复用的Agent能力。