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:
- ...