许多初次接触 Skill 这个概念的人,常常会产生这样的印象:
“这恐怕是程序员才能用的工具吧?”“是不是必须掌握大量编程知识?”
然而,如果深入拆解 Skill 的本质,你会发现一个有趣的现象:
Skill 本质上就是将你已经熟悉的操作,转化为一套“可稳定重复、减少出错概率的自动化流程”。
本文不需要你具备任何技术背景。我们将一步步地,用通俗易懂的方式把这件事说明白。
一、不急于讨论 Skill,先从日常的“按步骤执行”谈起
我们先暂且放下 Skill 这个术语。
想象一个非常熟悉的场景:
你打算制作一道固定菜色的菜肴。
初次尝试时,你可能需要边看菜谱边摸索;多次重复后,你会发现整个过程已经形成固定的节奏:
- 先准备材料
- 再按顺序处理
- 最后得到结果
假如你请别人替你完成,你通常会说:“按照这个流程做就好,不要随意改动。”
而 Skill 实际上就是在做同样的事情——只不过执行对象从“人”换成了“机器”。
二、Python 究竟是什么?为何它如此适合“按步骤执行”?
在深入探讨 Skill 之前,我们先来认识一下 Python。
1️⃣ Python 可以理解成什么?
如果用一个生活化的类比:
Python 并非用来展示技巧的语言,而是用于将任务一步步清晰地描述出来。
先执行什么,再执行什么,遇到特殊情况如何处理。
你可以把 Python 写出的内容看作是一份极其严谨的步骤说明书。
2️⃣ Python 通常用于哪些场景?
你无需先掌握语法,只需了解它常被应用的领域:
文件处理、重复性任务的自动执行、不同数据格式之间的转换、以及将枯燥的步骤自动化。
这些任务的共同特点是:
无需复杂的逻辑判断,但对步骤的完整性要求极高——不能遗漏或多余。
而 Python 恰好擅长将这类流程描述得清晰明确。
3️⃣ 这跟 Skill 有什么关系?
现在让我们回到 Skill。
Skill 的核心目标是:
将可重复执行的任务转化为稳定的流程。
而 Python 正是一种极其擅长“描述步骤”的编程语言。
因此,在 Skill 中我们通常会看到这样的分工:
Skill 负责说明“这件事是什么”,Python 负责说明“这件事如何一步步实现”。
虽然并非唯一选择,但在“易于理解、降低出错率”方面,Python 表现得非常出色。
三、一个 Skill 的典型结构是怎样的?
现在,我们可以正式审视 Skill 的样貌了。
请牢记一句话:
这个文件夹中最重要的不是代码,而是一份说明文档。
一个最小但完整的 Skill 示例
my-skill/
├─ SKILL.md
├─ scripts/
│ └─ main.py
└─ references/
└─ ...
即使你完全不懂技术也没关系,接下来我们将逐项解释。
SKILL.md:向机器和人说明这个能力的用途
SKILL.md 通常包含三方面的信息:
何时使用这个 Skill,输入数据是什么,输出结果是什么样的。
你可以把它看作:
一份“使用说明书 + 注意事项”。
scripts:将说明转化为实际可执行的动作
scripts 文件夹中的内容并非面向人类阅读,而是供机器严格执行的步骤。
你可以理解为:
将写在 SKILL.md 中的描述翻译成机器能精确执行的版本。
references:防止理解偏差的参考材料
有时,仅靠文字描述仍可能产生理解歧义。
此时,可以提供示例输入和示例输出,让机器参照执行。
四、现在让我们亲手构建一个最简单的 Skill
前面我们一直在强调,Skill 是大模型可调用的外部能力。接下来,我们将用一个贴近真实应用场景的示例,完整走一遍流程。
假设用户对大模型说了一句话:
帮我整理一下今天要做的事情:买牛奶,下午三点开会,晚上跑步。
这句话对人类来说非常自然,但对系统而言却是一个结构不稳定的输入。
如果要进一步做规划、提醒、任务拆解,这个输入就需要被“定型”。
这正是 Skill 的职责所在。
这个 Skill 要完成的任务其实很简单
我们先明确目标:
用户仅提供自然语言输入。大模型负责理解“这是在描述待办事项”。Skill 负责将这段话整理成一个固定、可复用的结构化格式。
Skill 不参与语义理解,它只做一件事:将结果转化为系统后续能够稳定使用的形状。
期望的输出(稳定结构)
无论用户如何表达,只要意思是“要做的事情”,这个 Skill 返回的结果都应采用统一格式:
{
"tasks": ["买牛奶", "下午三点开会", "晚上跑步"]
}
重点不在于解析有多智能,而在于:这个结构本身是稳定的、可依赖的。
一个最小但完整的 Skill 目录结构
nl-to-tasks/
├─ SKILL.md
└─ scripts/
└─ main.py
这个目录结构本身就已经构成一个完整的 Skill。
SKILL.md(说明该 Skill 何时被调用)
SKILL.md 不是写给最终用户看的,而是供系统和大模型参考的。
它回答两个问题:什么情况下应该调用这个 Skill?调用后能得到什么?
---
name: nl-to-tasks
description: 将自然语言中的待办事项整理为稳定的 tasks 列表结构,供大模型后续使用。
---
# Natural Language to Tasks
当用户用自然语言描述「要做的事情」时,使用这个 Skill。
## Input
- text: 用户的自然语言输入
## Output
- tasks: 待办事项数组,每一项是一个字符串
## Rules
- 输出必须是 JSON 对象,且只包含 tasks 字段
- 如果无法识别任何待办事项,返回空数组
scripts/main.py(入门级但真实可用的代码)
下面的代码并不追求“智能”,它只完成一件事:将一段文本拆解为稳定的列表结构。
import sys
import json
import re
def extract_tasks(text: str):
# 使用最直观的分隔规则:逗号、顿号、换行
parts = re.split(r"[,,、\n]", text)
tasks = [p.strip() for p in parts if p.strip()]
return tasks
if __name__ == "__main__":
text = sys.stdin.read()
result = {"tasks": extract_tasks(text)}
print(json.dumps(result, ensure_ascii=False, indent=2))
在实际应用中,这个脚本并非由用户直接运行。
而是由大模型在判定“需要整理待办事项”时,在后台自动调用。
这个示例未来可以自然扩展成什么?
一旦拥有了这样一个稳定的结构化输出,后续能力的扩展会非常顺畅:
- 将
tasks直接转化为真正的 TODO 列表 - 为每项任务添加时间、优先级,实现任务规划
- 将单句需求拆解为多个步骤,完成项目拆解
- 将结构化结果写入文件或数据库,接入其他自动化流程
这些升级都不需要推翻 Skill 的基本设计。你只需在这个“稳定结构”之上不断演进即可。
五、若要完全定制自己的 Skill,你只需补齐这一点:Python 的基础思维
如果仅仅按照示例运行一遍,你或许已经感到满足:原来 Skill 并没有那么神秘,它确实可以帮助实现自动化。
但当你希望更进一步——例如将输入替换为自定义格式、调整输出结构、或将流程拆解为多个可复用步骤——你会发现挑战不再是“会不会写代码”,而是:
你是否能清晰地区分哪些地方只是改变了表述方式,哪些地方真正修改了内容。
这听起来不像编程,而更像一种日常能力。你给事物起名字,但修改名称与修改事物本身是两回事。
只要你能分辨清楚这一点,你编写的脚本就会非常稳定。哪些步骤在生成新结果,哪些步骤在原地处理内容,你心中将一清二楚。
因此,下一篇文章我将专门讲解这种最基础但至关重要的理解方式,帮助你真正掌握开发 Skills 所需的 Python 基础心智模型。
