Skill学习
Skill(技能)学习思路
目标:理解 Skill 作为一种"给 AI 描述能力"的范式,掌握不同形态下的设计方法,能够根据场景选择合适的 Skill 形态。
核心认知:Skill 不是某种固定的技术实现,而是一种"让 AI 知道它能做什么、什么时候做"的开发方式。它可以是一个 yaml 文件、一段代码、一个接口、甚至一句话。
一、学习地图(总览)
第一层:理解本质(知道)
Skill 是什么、为什么出现、和传统开发方式的区别
第二层:掌握三要素(会写)
任何 Skill 都包含:触发条件 + 能力描述 + 执行方式
第三层:选择形态(会用)
yaml 形态、代码形态、接口形态、Prompt 形态,根据场景选择
第四层:设计原则(用好)
契约设计、粒度控制、错误处理、副作用声明
第五层:组合编排(用巧)
多个 Skill 串成工作流
第六层:生产级治理(用久)
版本、权限、监控
二、Skill 的本质
2.1 一句话理解
Skill = 给 AI 写的能力说明书。
说明书里写清楚三件事:
- 什么时候用(触发条件)
- 能干什么(能力描述)
- 怎么干(执行方式)
2.2 为什么 Skill 是一种"范式"
以前的开发方式:
程序员写代码 → 代码控制所有逻辑 → 用户按固定流程操作
Skill 范式:
程序员写能力说明书 → AI 自己决定什么时候用什么能力 → 用户用自然语言交互
区别:以前是人告诉机器"第一步做什么、第二步做什么";现在是机器自己看说明书,决定"用户需要我做什么"。
2.3 Skill 的多种形态
不要纠结格式。Skill 可以长这样:
| 形态 | 例子 | 适用场景 |
|---|---|---|
| YAML 文件 | Claude Code 的 skill.yaml |
定义触发条件、prompt 模板、可用工具 |
| 代码类/函数 | class RefundSkill |
封装确定的业务逻辑 |
| HTTP 接口 | POST /api/refund |
调用远程服务 |
| Prompt 里的一句话 | “你可以查天气” | 简单能力声明 |
| JSON 配置 | {"name": "查询订单", "endpoint": "..."} |
注册到能力中心 |
核心不是形态,而是三要素。只要包含"什么时候用、能干什么、怎么干",就是 Skill。
三、Skill 的三要素
任何 Skill,不管长什么样,都包含这三个部分:
3.1 触发条件(When)
定义:什么情况下,这个 Skill 应该被激活。
常见触发方式:
| 方式 | 说明 | 示例 |
|---|---|---|
| 关键词触发 | 用户话里出现特定词 | “部署”、“退款”、“查订单” |
| 意图识别 | AI 判断用户意图匹配 | 用户说"我不想买了"→意图是"退款" |
| 主动触发 | AI 自己决定该用 | 检测到异常日志,主动调用告警 Skill |
| 定时触发 | 到点就执行 | 每天凌晨调用"生成日报"Skill |
触发条件示例:
description: |
## 触发词
"部署到服务器", "deploy to server", "远程部署"
3.2 能力描述(What)
定义:这个 Skill 具体能做什么、需要什么、返回什么。
能力描述通常包含:
- 名称和简介:这个 Skill 是干嘛的
- 输入参数:需要什么数据
- 输出结果:返回什么数据
- 约束条件:什么情况下不能用
- 副作用:执行后会改数据吗?会发通知吗?
能力描述示例:
description: |
## 能力声明
提供服务器部署能力
## 负面约束
未经用户确认不执行命令
## 边界排除
不处理本地部署
args:
- name: target
description: 部署目标路径
required: false
3.3 执行方式(How)
定义:Skill 被触发后,具体怎么执行。
常见执行方式:
| 方式 | 说明 | 示例 |
|---|---|---|
| AI 推理执行 | AI 自己写步骤、调用工具 | Claude Code Skill,AI 读 prompt 后自己决定怎么部署 |
| 代码执行 | 调用写好的代码逻辑 | RefundSkill.execute() 执行确定性的退款流程 |
| 接口调用 | 调用远程 API | 调用天气查询接口、支付接口 |
| 工作流执行 | 按预设流程执行 | 先 A 再 B 再 C,配置好的流程 |
执行方式示例:
prompt: |
### 服务器配置信息(示例)
- 生产服务器: 192.168.1.100
- 用户名: deploy_user
- 端口: 22
### 执行前确认
1. 确认目标路径: {{args.target}}
2. 确认操作环境
3. 获得用户明确授权后再执行
tools:
- Bash
- AskUserQuestion
AI 读到这个 prompt,知道服务器信息后,自己决定怎么执行(问用户确认、用 Bash 连接服务器)。
四、Skill 的形态详解
4.1 YAML 形态(Claude Code 风格)
特点:定义触发条件 + prompt 模板 + 可用工具,AI 自己推理执行。
name: deploy-app
description: |
## 触发词
"部署到服务器", "远程部署"
## 能力声明
提供服务器部署能力
## 负面约束
未经用户确认不执行命令
args:
- name: target
description: 部署目标路径
required: false
prompt: |
用户请求部署到服务器...
tools:
- Bash
- AskUserQuestion
适用场景:
- 需要 AI 自主决策(判断用户意图、选择执行方式)
- 流程不固定,需要灵活处理
- 开发助手类场景
优点:灵活、易修改、不需要写代码
缺点:执行不确定(AI 每次可能做法不同)、难测试、难监控
4.2 代码形态
特点:用代码封装确定的业务逻辑,AI 只负责决定"调不调用",不负责"怎么执行"。
class ProcessRefundSkill:
def execute(self, input_data: dict) -> dict:
# 1. 查订单
order = self.order_repo.get(input_data["order_id"])
if not order:
return {"success": False, "fail_reason": "订单不存在"}
# 2. 校验条件
if order.days_since_delivery() > 7:
return {"success": False, "fail_reason": "已超过退款期限"}
# 3. 创建退款单
refund = self.order_repo.create_refund(...)
# 4. 发起退款
payment_result = self.payment.refund(...)
return {"success": True, "refund_id": refund.id}
适用场景:
- 需要确定性的业务逻辑(退款、支付、库存扣减)
- 涉及资金、安全、合规
- 需要精确的错误处理和回滚
优点:执行确定、可测试、可监控、性能高
缺点:开发成本高、修改需要重新部署
4.3 接口形态
特点:Skill 本身就是个远程服务,通过 HTTP 调用。
name: query_weather
endpoint: GET https://api.weather.com/v1/current
input_schema:
city: {type: string, required: true}
output_schema:
temperature: {type: number}
condition: {type: string}
适用场景:
- 调用第三方服务(天气、地图、翻译)
- 企业内部已有微服务
- 需要跨系统复用
优点:复用现有服务、语言无关
缺点:网络依赖、需要处理超时和降级
4.4 Prompt 形态
特点:在系统提示里用一句话声明能力,最简单。
你是一位智能助手,你可以:
1. 查询天气(告诉我城市名)
2. 查询订单(告诉我订单号)
3. 处理退款(告诉我订单号和原因)
适用场景:
- 极简场景,只有一两个能力
- MVP 验证阶段
- 内部原型
优点:最简单,零成本
缺点:没有结构化约束,容易出错
4.5 形态选择指南
| 场景 | 推荐形态 | 理由 |
|---|---|---|
| AI 开发助手(Claude Code) | YAML | 灵活,AI 自主决策 |
| 支付/退款/库存 | 代码 | 确定性高,可回滚 |
| 调用第三方 API | 接口 | 复用现有服务 |
| 内部工具/原型 | Prompt | 快速验证 |
| 需要版本管理的企业级应用 | YAML + 代码混合 | 触发用 YAML,执行用代码 |
五、Skill 的设计原则
5.1 契约设计(输入输出)
任何 Skill 都要明确:给什么、返回什么。
❌ 差的契约:
输入:随便给
输出:看着办
✅ 好的契约:
输入:
订单号: string, 必填, 格式 ORD-YYYYMMDD-XXXX
退款原因: string, 必填, 枚举:[质量问题, 不想要了, 发错货]
输出:
成功: boolean
退款单号: string, 成功时返回
失败原因: string, 失败时返回
5.2 粒度控制
粒度过细:一个简单业务调 8 个 Skill,AI 决策负担重。
粒度过粗:一个 Skill 500 行代码,内部逻辑复杂。
判断标准:
- 一个 Skill 对应一个"用户能听懂"的业务动作
- 执行时间 < 5 秒
- 输入参数 < 10 个
- 可以被多个场景复用
5.3 错误处理
Skill 的错误信息要分层:
| 错误类型 | 用户看到 | 开发者看到 |
|---|---|---|
| 参数错误 | “请检查输入信息” | 订单号格式错误:expected ORD-YYYYMMDD-XXXX |
| 业务规则 | “该订单已超过退款期限” | BUSINESS_RULE: delivery_age=15, max=7 |
| 系统异常 | “系统繁忙,请稍后重试” | DB_CONNECTION_TIMEOUT: retry_count=2 |
5.4 副作用声明
必须声明:执行这个 Skill 会改数据吗?会发通知吗?会扣款吗?
side_effects:
- 修改订单状态
- 创建退款记录
- 调用支付网关(扣款)
- 发送短信通知
AI 调用前可以检查:“这个操作会扣款,需要用户二次确认吗?”
六、Skill 的组合编排
多个 Skill 可以组合成复杂流程。
6.1 串行
Skill A → Skill B → Skill C
前一个的输出作为后一个的输入。
例子:创建订单 → 发起支付 → 确认支付
6.2 并行
┌→ 查询库存
输入 ──┼→ 查询价格
└→ 查询优惠券
多个 Skill 同时执行,互不影响。
例子:同时查库存、价格、优惠券,汇总后展示给用户。
6.3 条件分支
输入 → 判断用户等级
├── VIP → 快速退款
├── 普通 → 标准退款
└── 企业 → 对公退款
例子:根据用户类型选择不同的处理流程。
七、生产级治理
7.1 版本管理
Skill 修改会影响线上效果,需要版本管理。
skills/
├── process_refund/
│ ├── v1.0.0/
│ ├── v1.1.0/
│ ├── v2.0.0/
│ └── latest -> v1.1.0/
版本号含义:
- 主版本 +1:不兼容的契约变更(删必填参数)
- 次版本 +1:新增功能(新增可选参数)
- 修订号 +1:Bug 修复
7.2 权限控制
permissions:
callers: # 谁可以调用
- after_sales_system
- admin_portal
data_scope: # 数据范围
region: [华东, 华南]
environments: # 环境限制
- production
- testing
7.3 监控
| 指标 | 说明 |
|---|---|
| 调用次数 | 每秒/每分钟调用量 |
| 成功率 | 成功调用 / 总调用 |
| 延迟 | P50/P90/P99 响应时间 |
| 错误分布 | 按错误类型分类 |
八、常见陷阱
陷阱 1:把业务逻辑全写在 prompt 里
现象:YAML Skill 的 prompt 里写了 50 行业务规则,AI 执行时经常漏步骤。
解决:复杂业务逻辑用代码封装,YAML 只写触发条件和调用说明。
陷阱 2:Skill 粒度过细
现象:一个简单业务调 8 个 Skill,AI 决策负担重。
解决:检查这些 Skill 是否总是一起调用,如果是,合并成一个。
陷阱 3:契约变更不兼容
现象:Skill 升级后,下游调用方报错。
解决:保持向后兼容,不兼容变更走主版本升级。
陷阱 4:副作用未声明
现象:AI 调用 Skill 后发现数据被改了、短信被发了。
解决:注册时必须声明副作用列表,重要操作需要二次确认。
陷阱 5:错误信息太技术
现象:返回 ERROR_CODE_5003: DB_CONNECTION_TIMEOUT,用户看不懂。
解决:错误信息分层,用户看业务提示,开发者看技术日志。
九、实战场景
场景 1:电商售后
用户说"我要退款"
↓
AI 识别意图 → 触发"处理退款"Skill
↓
"处理退款"Skill(代码形态)执行:
1. 查订单 → 2. 校验条件 → 3. 创建退款单 → 4. 发起退款 → 5. 通知用户
↓
返回结果给 AI → AI 组织语言回复用户
形态选择:触发用 YAML(AI 识别意图),执行用代码(退款流程确定性高)。
场景 2:智能客服
用户提问
↓
AI 判断意图(查订单/退款/改地址/投诉)
↓
调用对应 Skill
↓
返回结果 → AI 生成回复
形态选择:意图识别用 YAML 配置,各 Skill 根据复杂度选择代码或接口。
场景 3:数据报表
用户说"生成上周销售报表"
↓
AI 触发"生成报表"Skill
↓
并行调用:
├→ 查询销售数据
├→ 查询用户数据
└→ 查询商品数据
↓
汇总 → 生成图表 → 生成 PDF
↓
返回下载链接
形态选择:编排用 YAML/配置,数据查询用接口,PDF 生成用代码。
十、与知识图谱的对应关系
| 知识图谱条目 | 本章对应章节 | 说明 |
|---|---|---|
| Skill 抽象定义 | 二、Skill 的本质 | 范式定义 + 多种形态 |
| Skill 输入输出契约 | 五、设计原则 5.1 | 契约设计 |
| Skill 注册与发现机制 | 三、3.1 触发条件 | 什么时候激活 |
| Skill 组合编排 | 六、组合编排 | 串行/并行/条件 |
| Skill 与 Tool/Function 的层级关系 | 四、形态详解 | 不同形态的对比 |
| Skill 热更新与版本控制 | 七、生产级治理 7.1 | 版本管理 |
| Skill 权限与作用域 | 七、生产级治理 7.2 | 权限控制 |
| Skill 市场/生态 | 四、4.5 形态选择 | 根据场景选择形态 |
最后更新:2026-05-12
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)