Skill 知识图解(chalkboard 风格)

是什么

Skill(技能) 是把”完成某类任务所需的流程、知识、提示词、乃至配套工具”打包成一个可复用的能力单元。AI 遇到对应场景时,自动加载这个 Skill 来更靠谱地干活。

例如一个”代码审查 Skill”里会写明:按什么清单审查、关注哪些风险点、输出什么格式——AI 加载后就会按这套方法论执行,而不是凭空发挥。

与 MCP 的区别(关键)

很多人把 Skill 和 MCP 搞混,记住一句话:

  • MCP 是”怎么连工具”的通信协议(解决”能调用”)。
  • Skill 是”怎么把事做好”的能力封装(解决”会干活”)。

类比:MCP 像是给了你一把能开各种锁的万能钥匙接口;Skill 是”开锁的标准作业流程 + 经验 checklist”。一个 Skill 内部完全可以使用多个 MCP 工具。

维度MCPSkill
本质通信协议 / 接口标准任务能力封装
关心工具如何被调用任务如何被高质量完成
例子读文件、查数据库代码审查、写周报、做数据分析

常见 Skill 类型举例

  • 代码审查:按规范检查 PR,标注潜在风险、坏味道。
  • 文档生成:根据代码/接口自动产出 README、API 文档。
  • 数据分析:读 CSV/数据库,做统计、出图表、写结论。
  • 网页抓取:按规则提取网页结构化信息(常配合 Playwright MCP)。
  • 测试生成:针对函数/接口生成单元测试用例。
  • 部署发布:串联构建、打包、上线流程。
  • 笔记整理:把零散要点归纳成结构化文档(就是本系列笔记的”元”用法)。

核心结构

一个 Skill 不是一段散装提示词,而是一套有目录结构的文件夹。Agent 按约定自动识别并加载它。一个典型的 Skill 目录长这样:

my-skill/
├── SKILL.md        # 必需:入口文件,定义"是什么、何时用、怎么做"
├── references/     # 可选:详细参考文档、规范、知识库(按需读取)
│   └── api-spec.md
├── scripts/        # 可选:可直接运行的脚本(Python / Shell 等)
│   └── validate.py
└── assets/         # 可选:模板、图片、配置文件等静态资源
    └── template.md

SKILL.md:技能入口

每个 Skill 必须有且只有一个 SKILL.md,它是 Agent 唯一最先读取的文件,分两部分:

  • 元数据(YAML frontmatter):文件最前方用 --- 包裹,声明这个技能”叫什么、什么时候该被用”。
    ---
    name: code-review
    description: 审查 Pull Request,标注潜在风险与坏味道,输出规范清单。
    ---
    
    • name:技能的唯一标识(建议小写 + 连字符)。
    • description:一句话说明”能做什么、什么时候用”。Agent 主要靠它判断何时触发本技能,写得好不好直接决定技能会不会被正确调用。
  • 正文指令:用自然语言写清”怎么做”——执行步骤、checklist、输出格式、注意事项等。

references / scripts / assets:按需加载

SKILL.md 本身应保持轻量(只放核心方法论),细节塞进子目录,避免一次性占满上下文:

  • references/:长篇参考文档(API 规范、领域知识、范例)。SKILL.md 里只写”需要某细节时去读 references/xxx.md”,Agent 真正用到时才加载。
  • scripts/:可执行的确定性操作(校验、转换、调用 CLI)。交给代码跑比让模型”手搓”更可靠、更稳定。
  • assets/:模板、图片、配置等静态资源,供脚本或输出结果复用。

为什么要”按需加载”

Agent 的上下文窗口(见 Token 笔记)是有限的。如果把所有 Skill 的全部内容一次性塞进上下文,会迅速吃掉 Token、稀释注意力。

按需加载的思路是:先让 Agent 只读每个 Skill 的轻量 SKILL.md(元数据 + 概要),只有当识别到相关场景时,才深入加载该 Skill 的 references/scripts/。就像你不会把整本手册背下来,而是先记住”哪本会讲什么”,用到时再翻开对应章节。

这样既保证知识随时可用,又把上下文成本压到最低。