Codex 初学者笔记:Skill 到底是什么?它和 Prompt 有什么区别?
用初学者视角讲清楚 Skill 和 Prompt 的区别——Prompt 解决一次问题,Skill 固化一套流程。
前言
我一开始以为 Skill 只是一个更长的 Prompt,但后来发现它更像一套可复用的工作流说明书。
这个认知转变花了我一些时间。如果你也是 Codex / Claude Code 的初学者,这篇文章希望帮你少走一些弯路。
文章会回答三个问题:
- Skill 是什么?
- Skill 和 Prompt 有什么区别?
- 初学者应该如何理解和使用 Skill?
一、直觉解释:Prompt 像临时指令,Skill 像 SOP
在正式定义之前,先建立一个直觉:
- Prompt 像是你临时告诉助手的一句话:”帮我把这段代码检查一下。”
- Skill 像是你提前写好的一份标准操作手册(SOP):检查什么、按什么顺序、输出什么格式、有哪些注意事项。
当 Agent 遇到类似任务时,它不需要你每次重复说明,而是直接按照这份 SOP 来执行。
类比的失真点:这个类比不完全准确,因为 Skill 不只是文字说明,它还可以包含资源文件、模板、脚本等辅助材料。SOP 通常只是文字流程,而 Skill 是一个更完整的”工具包”。
二、Prompt 是什么
Prompt 就是你每次给 AI 的任务输入——一次性的、临时的指令。
它的重点是 “这一次怎么做”。
几个典型例子:
1
帮我解释一下什么是 overfitting。
1
帮我把这段话改得更自然。
1
帮我检查这个函数有没有明显 bug。
这些都是一次性的任务:你说完,AI 做完,任务结束。下次遇到类似问题,你需要重新描述一遍。
Prompt 非常灵活,但它的缺点也很明显:不可复用、不稳定。同一个任务,你今天写的 Prompt 和明天写的可能不一样,输出质量也可能不一样。
三、Skill 是什么
Skill 是一个可复用的结构化 workflow。
它通常以一个 SKILL.md 文件为核心,定义了任务的名称(name)、触发条件(description)、执行步骤(instructions)等信息。除了文字说明,Skill 还可以包含参考资料、模板文件、辅助脚本等。
一个典型的 Skill 目录结构:
1
2
3
4
5
my-skill/
SKILL.md # 核心说明文件
scripts/ # 辅助脚本
references/ # 参考资料
assets/ # 模板或其他资源
Skill 的重点不是”比 Prompt 更长”,而是 “可复用、结构化、稳定执行”。
你可以把它理解为:把你反复使用的 Prompt 升级成了一套有结构、有规范、可以被 Agent 自动调用的工作流。
四、Skill 和 Prompt 的区别
| 对比项 | Prompt | Skill |
|---|---|---|
| 作用范围 | 当前任务 | 可复用任务 |
| 形式 | 一段临时指令 | 一个结构化工作流 |
| 稳定性 | 每次可能不同 | 更稳定、更一致 |
| 内容 | 主要是文字 | 指令 + 模板 + 参考资料 + 可选脚本 |
| 适合场景 | 偶发任务 | 重复流程 |
一句话总结:
Prompt 解决的是”这一次怎么做”,Skill 解决的是”以后遇到同类任务都怎么做”。
五、Skill 的工作原理
一个常见的疑问是:Agent 怎么知道该用哪个 Skill?
可以这样理解(这里是一个简化模型,帮助建立直觉):
- Agent 不会一开始就把所有 Skill 的完整内容全部读进去。
- 它通常先看到每个 Skill 的 name 和 description。
- 当用户提出任务后,Agent 判断任务和哪个 Skill 的 description 最匹配。
- 如果匹配上了,它才会进一步读取完整的
SKILL.md,然后按其中的 workflow 执行。
所以,description 非常重要——它决定了 Agent 能不能在对的时候找到对的 Skill。
flowchart TD
A[用户提出任务] --> B[Agent 查看可用 Skills 的 name 和 description]
B --> C{是否有匹配的 Skill?}
C -- 否 --> D[直接根据当前 Prompt 执行]
C -- 是 --> E[读取对应 SKILL.md]
E --> F[按 Skill 中的 workflow 执行任务]
F --> G[输出结果]
注意:真实系统的匹配机制不一定只是简单的关键词匹配,可能涉及语义理解等更复杂的逻辑。上面的流程图是为了帮助理解而做的简化。
六、一个最小例子
假设你配置了 3 个 Skills:
1
2
3
blog-writer → description: "帮助撰写博客文章,生成标题、大纲和正文"
code-review → description: "对代码进行审查,检查 bug、风格和安全问题"
experiment-report → description: "总结机器学习实验结果,包含 metrics、figures、风险分析和下一步计划"
现在你输入一个任务:
1
请帮我总结一次机器学习实验结果,包含 metrics、figures、风险和下一步。
Agent 会怎么选?
从直觉上看,experiment-report 的 description 和任务高度相关——”实验结果”、”metrics”、”figures”、”风险”、”下一步”这些关键概念都对得上。所以 Agent 更可能选择 experiment-report 这个 Skill,然后按照它定义的 workflow 来组织输出。
再次强调:真实系统不只是关键词匹配,这里只是为了帮助理解。Agent 的选择过程可能涉及对任务语义的更深层理解。
七、常见误解
误解 1:Skill 就是一个更长的 Prompt
不对。长度不是关键区别。Skill 是一个可复用的 workflow,可能包含说明、资源、模板、脚本。一个 Skill 哪怕只有 10 行,只要它结构化且可复用,就比一个 500 字的临时 Prompt 更有价值。
误解 2:只要写了 Skill,Agent 就一定会自动用对
不一定。如果 description 写得不好——太模糊、太宽泛、或者和任务不匹配——Agent 可能不会调用它,甚至可能误调用另一个 Skill。写好 description 是让 Skill 生效的关键。
误解 3:Skill 会让模型永久学会新能力
不准确。Skill 更像是当前任务可用的说明书和工具包,而不是对模型的重新训练。模型本身的能力没有因为你写了一个 Skill 而改变——它只是在执行任务时多了一份可以参考的 workflow。
八、初学者应该如何使用 Skill
适合做成 Skill 的任务
- 经常重复的任务(比如每周写实验报告)
- 有固定流程的任务(比如代码审查的检查清单)
- 有安全规则的任务(比如修改代码前必须先备份)
- 有固定输出格式的任务(比如统一的文档模板)
- 需要多个步骤才能完成的任务(比如”先读代码 → 再分析 → 再输出报告”)
不一定需要 Skill 的任务
- 一次性问题(”帮我解释一下这个概念”)
- 简单文本修改(”帮我把这句话改通顺”)
- 临时聊天或头脑风暴
- 不会重复出现的任务
判断清单
1
2
3
4
5
如果这个任务以后还会重复出现 → 考虑 Skill
如果这个任务有固定流程 → 考虑 Skill
如果这个任务有安全限制 → 考虑 Skill
如果只是问一个简单概念 → Prompt 就够了
如果只是临时改一句话 → Prompt 就够了
九、一个适合初学者的 SKILL.md 模板
如果你想开始写自己的第一个 Skill,可以参考这个简化模板:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
---
name: example-skill
description: Use when the user asks to [describe the trigger scenario].
---
# Goal
这个 Skill 用来帮助 Agent 完成 [具体任务描述]。
# When to use
- 当用户要求 [场景 A] 时
- 当用户要求 [场景 B] 时
# Workflow
1. 先做什么
2. 再做什么
3. 最后做什么
# Constraints
- 不要做什么
- 必须检查什么
- 修改代码前必须确认什么
# Output format
请按以下格式输出:
1. Summary
2. Files inspected
3. Findings
4. Risks
5. Next steps
各部分的作用:
- name:Skill 的唯一标识,方便管理和调用。
- description:最重要的字段,决定 Agent 能否正确匹配到这个 Skill。写清楚”什么时候用”。
- Goal:简述这个 Skill 要完成什么。
- When to use:列出具体的触发场景,帮助你自己和 Agent 理解适用范围。
- Workflow:核心步骤,按顺序写清楚。
- Constraints:安全边界和注意事项——什么不能做、什么必须检查。
- Output format:统一输出格式,让结果更稳定、更可比较。
总结
回到开头的三个问题:
- Skill 是什么? 一个可复用的结构化 workflow,以
SKILL.md为核心,可以包含说明、模板、脚本等。 - 和 Prompt 有什么区别? Prompt 是一次性指令,Skill 是可复用流程。
- 初学者怎么用? 先用 Prompt 把任务跑通,发现重复出现的流程后,再沉淀成 Skill。
Prompt 解决的是这一次怎么做,Skill 解决的是以后遇到同类任务都怎么做。
对初学者来说,真正重要的不是把 Prompt 写得越来越长,而是把反复出现的工作流沉淀成 Skill。
这也是我自己的学习体会:与其每次花时间写一个完美的 Prompt,不如花一次时间写一个好用的 Skill,之后每次都能省下重复的沟通成本。