从 Prompt 转向 Agent Skills,本质上是从“手写指令”进化到“模块化能力封装”。这不仅是一次技术升级,更是一种开发范式的转变:让你从为每个任务编写一次性提示词,转变为构建可复用、可组合、可进化的 AI 能力单元。
下面我会从动机、核心差异、迁移步骤、实战案例、常见挑战五个方面,帮你系统性地完成这个转变。
一、为什么要从 Prompt 转向 Agent Skills?
| 问题 | Prompt 方式 | Agent Skills 方式 |
|---|---|---|
| 复用性 | 每次新任务都要重写或复制粘贴 Prompt | 一次编写,多次调用 |
| 稳定性 | 结果随模型版本、温度参数波动大 | 工作流固化,输出更一致 |
| 复杂性 | 长 Prompt 容易超出上下文、逻辑混乱 | 分步骤封装,底层细节隐藏 |
| 可调试 | 难以定位是哪段指令导致错误 | 可单独测试每个 Skill |
| 组合能力 | 多任务需人工串联 | Skills 可被 Agent 自主编排调用 |
一句话:当你需要重复执行类似任务、或者任务涉及多步骤逻辑时,Agent Skills 是必经之路。
二、核心差异:Prompt vs Agent Skills
| 维度 | Prompt | Agent Skills |
|---|---|---|
| 形态 | 文本字符串 | 结构化目录 + SKILL.md + 可选脚本/资源 |
| 执行方式 | 每次调用时完整送入 LLM | Agent 根据意图按需加载 |
| 上下文占用 | 每次请求都占用大量 token | 渐进式披露,仅加载所需部分 |
| 确定性动作 | 只能描述,无法精确执行 | 可调用脚本、API、本地命令 |
| 状态管理 | 无,每次独立 | 可在 Skill 内部维护状态 |
| 开发门槛 | 低,会写自然语言即可 | 中等,需理解目录结构及工具调用 |
关键认知转变:Prompt 是“教 LLM 怎么做”,Agent Skills 是“给 LLM 配一套专业工具+说明书”。
三、迁移四步法:从 Prompt 到 Agent Skills
第 1 步:盘点现有 Prompt,识别可封装单元
把你日常使用的 Prompt 拿出来,按以下标准判断是否适合封装为 Skill:
- 重复频率高:每周用超过 3 次
- 步骤明确:有清晰的输入→处理→输出流程
- 需要确定性操作:如文件读写、API 调用、数据库查询
- 跨模型稳定性要求高:不希望因模型变化而波动
示例:一个用于“总结周报并发送邮件”的 Prompt → 适合封装。
第 2 步:设计 Skill 的输入/输出契约
每个 Skill 应明确:
- 输入:用户需提供什么信息?(如:周报原始数据文件)
- 输出:返回什么格式的结果?(如:邮件正文 + 发送状态)
- 依赖:需要哪些外部工具/API?(如:邮件服务器、LLM 模型)
第 3 步:编写 SKILL.md,将 Prompt 结构化
原始 Prompt(仅示例):
你是一个周报助手。请根据以下数据生成一份周报,然后发送给老板@example.com。周报要包含:完成事项、下周计划、风险点。数据:...
转变为 Skill 的 SKILL.md:
---
name: weekly-report-mailer
description: 根据提供的原始数据生成周报,并通过邮件发送给指定收件人。
---
# 周报生成与发送流程
## 输入要求
用户需提供:
- 原始数据(可为文本、表格或文件路径)
- 收件人邮箱(可选,默认老板@example.com)
## 执行步骤
1. **数据解析**:读取用户提供的数据,提取以下字段:
- 完成事项(本周主要产出)
- 下周计划(最多3项)
- 风险点(如有,列出并标注等级)
2. **周报生成**:使用以下模板生成邮件正文:
主题:周报 - {当前日期}
各位好,
以下是本周工作摘要: 完成事项: {列表}
下周计划: {列表}
风险点: {列表}
祝好, AI周报助手
3. **发送邮件**:调用 `scripts/send_mail.py` 脚本,参数:
- 收件人: {提取的邮箱}
- 主题: 周报 - {日期}
- 正文: {上一步生成的文本}
- 附件: 可选,用户提供的原始数据文件
4. **返回结果**:告知用户邮件发送成功或失败。
## 注意
- 若数据中缺少某项,则对应部分写“无”。
- 发送前**必须**请求用户确认收件人和正文。
第 4 步:添加脚本与资源(如果需要确定性执行)
对于邮件发送这类需要确定性操作的任务,不能只靠 LLM 描述,要编写真实脚本。
scripts/send_mail.py 示例:
import smtplib
import sys
from email.message import EmailMessage
def send_mail(to, subject, body, attachment_path=None):
msg = EmailMessage()
msg.set_content(body)
msg['Subject'] = subject
msg['To'] = to
# ... 配置 SMTP
with smtplib.SMTP('smtp.example.com', 587) as server:
server.starttls()
server.login('user', 'pass')
server.send_message(msg)
return True
if __name__ == "__main__":
# 从命令行参数接收
to = sys.argv[1]
subject = sys.argv[2]
body = sys.argv[3]
send_mail(to, subject, body)
然后在 SKILL.md 中通过 Bash 工具调用该脚本。
四、实战对比:同一任务两种实现方式
任务:从 PDF 中提取所有表格,转成 CSV 并发送到 Slack。
Prompt 方式(脆弱、一次性)
你是一个 PDF 处理专家。请帮我打开 this_is_a_pdf.pdf,找到里面的所有表格,然后转换成 CSV 格式,最后通过 webhook 发送到 Slack 频道 #data。
- 问题:LLM 无法直接“打开 PDF”,无法“发送到 Slack”,依赖模型幻觉。
Agent Skills 方式(稳定、可复用)
目录结构:
pdf-table-exporter/
├── SKILL.md
├── scripts/
│ ├── extract_tables.py # 调用 pdfplumber 提取表格
│ └── slack_sender.py # 通过 webhook 发送
└── references/
└── slack_api.md # webhook 文档供 AI 参考
SKILL.md 核心内容:
---
name: pdf-table-exporter
description: 从PDF提取所有表格并发送到Slack。
---
# 执行流程
1. 使用 `scripts/extract_tables.py --input {file_path}` 提取表格,输出到临时 CSV 文件。
2. 读取每个 CSV 文件内容。
3. 调用 `scripts/slack_sender.py --webhook {url} --file {csv_path}` 发送。
4. 清理临时文件,返回发送状态。
用户只需说:“用 pdf-table-exporter 处理这个文件并发送到 #data”,Agent 自动按步骤执行。
五、常见挑战与应对
| 挑战 | 解决方案 |
|---|---|
| Skill 粒度如何把握? | 单一职责:一个 Skill 只解决一类问题。若描述超过 500 行,考虑拆分。 |
| 旧 Prompt 太多,全部迁移成本高 | 优先迁移高频、关键任务;低频任务可保留 Prompt 临时调用。 |
| AI 自动调用 Skill 的准确率不高 | 在 description 中明确触发词;使用 allowed-tools 限制权限,防止误用。 |
| Skill 执行失败如何回滚? | 设计幂等操作;在 Skill 内加入状态检查和确认步骤(人机回环)。 |
| 跨平台 Skill 格式不统一 | 目前主流是 Anthropic 的 SKILL.md 规范,已被 OpenClaw、Cursor、Copilot 等支持。尽量遵循该标准。 |
六、总结:从 Prompt 到 Skills 的思维迁移
| 旧思维 | 新思维 |
|---|---|
| “写一段话让 AI 理解” | “设计一个可执行的能力模块” |
| 依赖模型自身的“聪明程度” | 依赖明确的流程和脚本 |
| 每个任务从零开始 | 组合现有 Skills 解决新问题 |
| 输出质量不可控 | 通过脚本固化确定性部分,LLM 仅负责意图识别和生成 |
| 难以调试 | 可单独测试每个 Skill 和脚本 |
建议:从你最头疼的、反复写 Prompt 的任务开始,把它改造成第一个 Skill。尝到“一次编写,终身使用”的甜头后,你自然会主动将更多 Prompt 迁移到 Skills 体系。