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 执行;复杂任务可编排
debug→write-test→code-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 的关系
- 插件化架构设计原则(单一职责、显式依赖、可组合)
评论
评论加载中…