Skill = 给Agent使用的“可复用能力包”,里面封装了某类任务的操作经验、步骤、约束、示例、脚本和资源。

它不是单纯Prompt,也不是单个Tool,而是介于二者之上的一层。


1. Skill是什么?

目前的主流语境中,尤其是Claude/Codex这类Agent里,Skill通常指的是一个文件夹。里面最核心的是SKILL.md文件,再加上一些脚本、模板、参考资料等。Agent Skills官方说明也是把Skill描述为一种轻量开放格式:一个Skill通常是包含SKILL.md的文件夹,里面有元数据、说明、脚本、模板或者其他资源。

大概是这个样子的:

android-code-review-skill/
├── SKILL.md
├── checklists/
│   ├── rxjava.md
│   ├── lifecycle.md
│   └── performance.md
├── scripts/
│   └── analyze_gradle.py
└── templates/
    └── review_report.md

SKILL.md里面可能写:

---
name: android-code-review
description: Use this skill when reviewing Android Java/Kotlin code for lifecycle, memory leak, RxJava, RecyclerView, and architecture issues.
---

# Android Code Review Skill

When reviewing Android code:

1. First identify the component type:
   - Activity
   - Fragment
   - Presenter
   - ViewModel
   - RecyclerView Adapter
   - Custom View

2. Check lifecycle safety:
   - subscriptions must be disposed
   - context should not be leaked
   - view references should be cleared

它不是告诉模型“你是Andorid专家”这么简单,而是把一类任务的经验流程写下来,让Agent每次遇到类似的任务时都能稳定复用。


2. Skill解决什么问题?

Agent有一个问题:

大模型很聪明,但它每次做事都可能不稳定。

比如让它review代码,它可能今天看生命周期,明天可能只看命名,后天可能忘了检查RxJava dispose。

Skill解决的是:

把隐形的经验显式化,把一次性的能力沉淀成可复用模块。

类似于Android代码中的业务模块封装,比如网络请求、缓存、埋点、权限申请:

NetworkModule
ImageLoader
PermissionManager
Logger
BasePresenter

Skill在Agent系统里的角色类似:

QuestionEvaluationSkill
MarkdownExportSkill
AndroidCodeReviewSkill
ObsidianWritingSkill
ResearchSummarySkill

3. Skill一般由什么组成?

一个完整Skill通常有5部分

1)触发条件

告诉Agent什么时候应用这个Skill 例如:

Use this skill when the user asks to review Android code, analyze lifecycle bugs, or inspect RxJava subscription issues.

这很重要,因为Agent不可能每次把所有技能塞进上下文,它需要根据任务判断该加载哪个Skill。

2)任务流程

告诉Agent做这件事的步骤。 比如一个qa-learning-skill

When running a learning session:

1. Ask one question at a time.
2. Wait for the user's answer.
3. Evaluate correctness.
4. Identify missing concepts.
5. Ask a follow-up question if the answer is incomplete.
6. Only move to the next question when the answer is acceptable.
7. Save the final session as Markdown.

这就是流程经验

3)判断标准

这是Skill最有价值的部分。 因为很多Agent失败不是因为不会做,而是因为“不知道什么算好”。

比如“回答是否合格”要有标准:

A good answer should include:
- core definition
- one concrete example
- common mistake
- relation to real development

对于Andorid生命周期问题:

A correct answer about Activity lifecycle must mention:
- onCreate initializes
- onStart makes visible
- onResume enters foreground
- onPause may still be partially visible
- onStop is no longer visible
- onDestroy is not guaranteed for all cleanup

Skill的核心不只是“步骤”,还有:

评判标准

4)输出格式

让Agent每次产出稳定结构。

例如:

Output format:

## 结论
## 问题点
## 修改建议
## 示例代码
## 风险等级

这都产品化非常重要。

因为如果做App,不能每次让AI每次返回格式都不一样,否则前端展示、存储、解析都会很难说。

5)附加资源

Skill还可以带脚本、模板、参考文档。

例如:

scripts/export_md.py
templates/learning_session.md
references/android_lifecycle.md

Claude官方文档也把Agent Skills描述为模块化能力,里面可以打包instructions、metadata,以及可选的scripts、templates等资源。

这就是Skill比Prompt更强的地方。


4. Skill和Prompt的区别

Prompt是一句或一段指令。

Skill是一个完整能力包。

比如Prompt: 你是一个Android面试官,请根据我的回答进行追问。

Skill:

android-interview-skill/
├── SKILL.md
├── question_bank.md
├── scoring_rubric.md
├── weak_points_schema.json
└── session_template.md

所以关系是:

Prompt是Skill的一部分
Skill是Prompt的工程化封装

5. Skill和Tool的区别

Tool是一个具体动作。

比如

saveMarkdown(content)
searchNote(query)
runUnitTest()
readFile(path)
createCalendarEvent()

MCP官方文档里,Tools是让模型调用外部系统的能力,比如查询数据库、调用API、执行计算等,每个工具有名称和参数schema。

Skill则告诉Agent:

什么时候调用工具,按什么顺序调用,调用完怎么判断结果。

比如一个markdown-export-skill

When exporting a learning session:

1. Summarize the question.
2. Extract user's wrong points.
3. Generate review suggestions.
4. Format as Markdown.
5. Call saveMarkdown.
6. Return the saved file path.

这里的saveMarkdown是Tool。

真个导出过程是一个Skill。

所以:

Tool = 一个函数
Skill = 使用函数完成任务的方法论

6. Skill和MCP的区别

MCP是协议,Skill是能力包。

MCP解决的是:

Agent怎么连接外部工具、文件、数据库、API

Skill解决的是:

Agent拿到这些工具之后,怎么把事情做好

MCP官方把Resources定义为服务器给模型提供上下文的标准方式,比如文件、数据库schema、应用信息等;Tools则让模型调用外部系统。

MCP:连接层
Skill:能力层
Tool:动作层
Workflow:流程层

比如做一个App:

MCP:
连接 Obsidian、GitHub、本地 Markdown、日历

Tools:
read_note()
write_markdown()
search_review_history()
create_question()

Skill:
如何进行一轮高质量问答学习
如何评估答案
如何生成复盘
如何根据弱点安排下次问题

可以组合成:

Learning Skill
    ↓
调用 MCP 暴露的工具
    ↓
读取 Obsidian 笔记
    ↓
生成问题
    ↓
保存复盘 Markdown

7. Skill在Agent里的运行流程

用户请求
   ↓
Agent 判断任务类型
   ↓
检索/加载相关 Skill
   ↓
读取 SKILL.md 的说明
   ↓
按照 Skill 的流程执行
   ↓
必要时调用 Tools / MCP
   ↓
产出结果

8. 一个Skill应该怎么写?

结构:

1. 什么时候使用
2. 目标是什么
3. 输入是什么
4. 操作步骤是什么
5. 判断标准是什么
6. 能调用哪些工具
7. 输出格式是什么
8. 常见错误是什么
9. 示例是什么   

最小模板:

---
name: skill-name
description: Use this skill when ...
---

# Goal

...

# When to use

...

# Steps

1. ...
2. ...
3. ...

# Quality criteria

A good result must:
- ...
- ...

# Output format

...

# Common mistakes

Avoid:
- ...