Skill 是 2026 年面试高频词:它把 Prompt 从"一段话"升级成"一个可版本化、可评测的能力单元"。面试官爱问的是:Skill 和普通 Prompt 到底差在哪?三段式结构怎么落地?
💡 答案要点
Skill 定义:
Skill(技能)是把 Prompt 模板 + 处理流程 + 工具调用 + 输出契约 封装成一个可复用、可版本化、可评测的能力单元。它不是一段 Prompt,而是一套可执行的 SOP。
Skill vs 普通 Prompt(核心对比):
| 维度 | 普通 Prompt | Skill |
|---|---|---|
| 形态 | 一段文本 | 代码/配置 + 输入输出契约 |
| 复用 | 复制粘贴,改一处全乱 | 注册即用,跨场景复用 |
| 版本 | 没有版本概念 | 发版、回滚、灰度 |
| 评测 | 凭感觉 | 回归样例集,改动可验证 |
| 异常 | 模型自由发挥 | 显式异常处理 + 兜底 |
三段式结构(标准做法):
┌─────────────────────────────────────────┐
│ 1. 输入定义(Input Schema) │
│ 参数、类型、必填、校验规则 │
│ → 决定"这个 Skill 接受什么" │
├─────────────────────────────────────────┤
│ 2. 处理与工具调用(Processing) │
│ Prompt 模板 + 工具调用 + 异常处理 │
│ → 决定"怎么执行" │
├─────────────────────────────────────────┤
│ 3. 结构化输出(Output Schema) │
│ JSON Schema、字段约束、置信度 │
│ → 决定"产出什么,下游怎么消费" │
└─────────────────────────────────────────┘示例:合同风险识别 Skill
json
{
"skill": "contract_risk_review",
"version": "1.3.0",
"input": {
"type": "object",
"required": ["contract_id"],
"properties": {
"contract_id": {"type": "string"},
"focus": {"type": "array", "items": {"type": "string"}}
}
},
"processing": {
"prompt_template": "你是资深法务,分析以下合同条款...",
"tools": ["get_contract", "search_precedent"],
"fallback": "工具失败时返回降级结果并标记 REVIEW_REQUIRED"
},
"output": {
"type": "object",
"required": ["risks", "confidence"],
"properties": {
"risks": {"type": "array", "items": {"type": "object"}},
"confidence": {"type": "number"}
}
}
}版本管理(像代码一样管 Skill):
- 每次改动发新版本号(语义化版本),记录变更说明;
- 线上 Agent 显式声明使用的 Skill 版本,可整体回滚;
- 同一 Skill 新旧版本可并行跑灰度对比。
回归评测(Skill 能"证明没退化"的关键):
- 每个 Skill 配套 不少于 20 条可回归评测样例(输入 → 期望输出/期望工具序列);
- 改动后全量跑回归:输出结构校验通过率、工具调用准确率、关键场景得分;
- 红了就回滚,不带着退化上线。
职责边界: 一个 Skill 只做一件事,Skill 之间不互相调用(组合靠 Agent 编排),避免循环依赖和上下文污染。
面试话术:
"Skill 是把 Prompt 升级成工程资产:输入定义、处理流程、结构化输出三段式,外加版本管理和回归评测。它和普通 Prompt 最大的区别是确定性——输入输出有契约,可以单测、可以 mock、可以发版回滚。我做的合同风险识别 Skill,每个 Skill 配 20+ 条回归样例,改一次跑一遍,输出结构校验通过率和工具调用准确率不降才允许上线。一句话:Prompt 是草稿,Skill 是交付物。"