Skill 技能系统

一句话定义:Skill 是封装好的、可复用的 Agent 能力模块(含指令、工具、知识、示例),让 Agent 按需调用以完成特定领域任务——是 Agent 能力的"插件化"组织方式。


1. 定义

Skill(技能)指把完成某类任务所需的指令、工具、知识、示例打包成一个可复用模块,Agent 在需要时加载/调用该 Skill 即可获得对应能力。

类比:人学了一项技能(如"做菜"),需要时调用;Agent 的 Skill 即"可调用的能力包"。区别于一次性 Tool 调用,Skill 是完成一类任务的完整能力包,包含"怎么做"的指令,而非仅"能做什么"的接口。

2. 为什么需要 Skill

  • 复用:同一能力多处调用,避免重复写提示。
  • 解耦:能力独立维护与演进,不耦合具体 Agent。
  • 组合:Agent 按任务组合多个 Skill,灵活扩展。
  • 可移植:Skill 可跨 Agent/框架复用(配合 MCP 等协议)。
  • 可评测:每个 Skill 独立评测,能力质量可量化。
  • 可治理:能力集中管理,便于授权、审计、版本控制。

3. Skill 的组成

组成 作用 写作要点
指令 Instructions 如何完成该类任务的步骤与约束 可执行步骤 + 边界 + 失败处理
工具 Tools 该 Skill 专属的工具集 最小授权,列具体工具名
知识 Knowledge 领域知识/RAG 源 结构化,可指向外部知识库
示例 Examples Few-shot 样本对齐行为 正例 + 反例,覆盖典型场景
元数据 Metadata 名称、描述、适用场景、版本 描述决定 Agent 是否选用

元数据模板示例

name: code-review
description: 审查代码变更,按严重程度分级指出 bug/安全/性能问题
version: 1.2.0
appliesTo: ["**/*.ts", "**/*.py"]
tools: [eslint, semgrep, grep]
triggers: ["审查", "review", "code review"]
author: team-platform

4. 与相邻概念区别

概念 粒度 作用 类比
Tool 单个函数 单次行动 一把螺丝刀
Skill 能力包 一类任务 "修电脑"技能包
Agent 完整系统 端到端目标 一个修理工
MCP Server 工具协议层 标准化工具暴露 工具箱的标准接口

关系:Skill 可包含多个 Tool;Agent 可加载多个 Skill;MCP 是 Tool 的标准化暴露方式;Skill 可通过 MCP 暴露其工具,也可封装 MCP Server 提供的能力。

5. 设计要点

  • 单一职责:每个 Skill 聚焦一类任务,避免"全能 Skill"。
  • 清晰描述:Agent 按描述选 Skill,描述不清会误选——描述要写"做什么 + 何时用"。
  • 可组合:Skill 间可串联(如"搜索"Skill + "摘要"Skill)。
  • 版本化:Skill 演进需版本管理,破坏性变更走主版本号。
  • 可评估:每个 Skill 有自己的评测标准与回归用例。
  • 触发词明确:定义 triggers,让 Agent 可靠识别何时调用。
  • 作用域精确:用 appliesTo 限定文件/场景范围,避免误触发。

6. 最佳实践

6.1 设计层面

  • 职责边界清晰:一个 Skill 只解决一类问题,宁可多拆不要混杂。
  • 描述写"做什么 + 不做什么":如"审查代码,不直接修改"。
  • 指令可执行:写"按严重程度分级并附行号",而非"认真审查"。
  • 示例驱动:复杂 Skill 附 2-3 个正例/反例,比纯描述更有效。
  • 工具最小集:只声明真正需要的工具,避免过度授权。
  • 失败降级:定义工具失败时的兜底策略(重试/人工/降级)。

6.2 工程层面

  • 目录约定:统一放 .skills/skills/,每个 Skill 一个子目录。
  • 文件结构SKILL.md(指令+元数据)+ tools/ + examples/ + knowledge/
  • 版本与变更日志:文件头注明版本与最后更新,破坏性变更记录在 CHANGELOG。
  • 纳入评审:Skill 变更走 PR 评审,像改代码一样改 Skill。
  • 做评测集:为每个 Skill 构建回归用例,防止行为漂移。
  • 依赖声明:Skill 若依赖外部服务/知识库,显式声明,便于环境准备。

6.3 组合与编排层面

  • 显式编排:复杂任务用编排层串联 Skill,而非让 Agent 自由组合(可控性差)。
  • 输入输出契约:Skill 间约定输入/输出格式,便于串联。
  • 避免循环依赖:Skill A 调 Skill B 时,B 不应反向依赖 A。
  • 幂等性:尽量让 Skill 可重复调用不产生副作用累积。

6.4 安全层面

  • 最小工具授权:只给 Skill 完成任务所需的最少工具。
  • 敏感操作显式约束:如"删除/部署类 Skill 必须人工确认"。
  • 不存密钥:Skill 配置中绝不放密钥/Token。
  • 审计日志:记录 Skill 调用与工具使用,便于追溯。

7. 反模式

  • 全能 Skill:一个 Skill 塞满所有职责,边界模糊,难维护难评测。
  • 描述空泛:"帮助用户处理代码"——Agent 无法据此判断何时调用。
  • 无示例:纯指令无 few-shot,行为不稳定。
  • 过度授权:为图方便给所有工具权限,放大风险。
  • 从不版本化:Skill 静默变更,调用方无感知,行为漂移。
  • 强耦合:Skill 间隐式依赖,无法独立测试与复用。
  • 无评测:Skill 行为靠"感觉",无法回归。

8. 实战示例

场景:编程助手 Agent。

  • Skill: code-review —— 含代码审查指令 + 静态分析工具 + 规范知识 + 分级输出示例。
  • Skill: write-test —— 含测试生成指令 + 测试框架工具 + 正反例样本。
  • Skill: debug —— 含调试指令 + 日志工具 + 常见 bug 知识库。
  • Agent 按用户请求(触发词)加载对应 Skill 执行;复杂任务可编排 debugwrite-testcode-review

Skill 文件结构示例

skills/
  code-review/
    SKILL.md          # 指令 + 元数据
    tools/            # 工具配置
    examples/         # few-shot 样本
    knowledge/        # 规范知识
    CHANGELOG.md
    eval/             # 回归评测用例

9. 学习要点

  • Skill 是 Agent 能力的插件化组织,提升复用与可维护性。
  • 介于 Tool 与 Agent 之间,是"能力包"粒度。
  • 清晰描述、单一职责、示例驱动、最小授权是设计关键。
  • 工程化要点:目录约定、版本化、评测集、PR 评审。
  • 与 MCP 互补:MCP 标准化工具暴露,Skill 组织"如何用这些工具完成任务"。

10. 参考资料

  • VS Code Copilot Skills / Chat Participants 设计
  • "Cognitive Architectures for Language Agents"(技能/工具章节)
  • MCP 中 Prompts 与 Skills 的关系
  • 插件化架构设计原则(单一职责、显式依赖、可组合)