Skill 机制解析:从定义、触发到调用外部工具
转发请注明出处:
一、什么是 Skill
Skill 是一套 “AI 调度 + 脚本执行”的分工协作机制。它的核心思想是关注点分离:AI 大模型擅长理解意图、做判断和调度,但不擅长精确计算和复杂文件操作;因此,Skill 让 AI 专注于“什么时候调用什么工具”的决策,而把“重型”的实际执行工作交给封装好的专用脚本。
一个 Skill 通常由以下部分构成:
- 指令文件(如
SKILL.md):写给 AI 看的“操作指南”,用自然语言描述这个 Skill 能做什么、在什么场景下触发、具体执行步骤是什么。 - 脚本目录:存放实际干活的代码,比如处理 Excel 的 Python 脚本、生成 PPT 的程序等。
- 参考文档:存放该领域的知识文档,供 AI 在需要时查阅。
- 资源目录:存放模板、图片等输出时需要的素材。
二、Skill 如何产生作用:触发与执行逻辑
Skill 的触发并非魔法,而是基于一套精心设计的调度机制,核心在于解决“AI 怎么知道该用哪个 Skill”的问题。
1. 三层渐进式加载,管理上下文
AI 的“记忆容量”(上下文窗口)有限,因此采用分层策略:
- 第一层(始终在线):只有 Skill 的名称和描述这一小段元数据会一直待在 AI 的“记忆”里。AI 根据对话内容判断是否匹配某个 Skill 的描述,来决定“要不要触发它”。
- 第二层(触发后加载):一旦 AI 决定触发某个 Skill,才会加载完整的指令正文,了解具体执行步骤。
- 第三层(按需加载):执行过程中,如果指令要求查阅参考文档或调用脚本,AI 才会按需加载对应的脚本或参考资料。
2. 触发匹配
AI 根据对话内容和用户输入的关键词,自动匹配最合适的 Skill。为了让匹配更精准,Skill 的描述需要写得非常清晰,明确告知“我能处理什么意图”。
3. 主动发现与边界管理
为解决“装了 Skill 但 AI 想不起来用”的问题,一些进阶机制也被引入,比如在对话开始时主动扫描意图方向,列出当前可用的相关 Skill;当需求超出当前 Skill 的能力范围时,主动告警并建议调用其他 Skill。
三、Skill 如何调用外部工具
Skill 可以调用外部工具,这是它从“告诉 AI 怎么想”进化到“帮 AI 真的去做”的关键一步。
调用外部工具通常通过“连接器”这座桥梁来实现。可以把连接器想象成给 AI 装的“USB 接口”,专门用来对接外部的各种软件和服务。
整个调用流程:
- 配置连接器:在连接器市场里找到需要的服务,手动点击“信任”并完成授权。这一步的核心是安全,遵循“最小权限”原则。
- Skill 声明依赖:在写 Skill 指令时,明确告诉 AI 这个 Skill 需要用到哪个连接器里的哪个工具,相当于列出它“被允许”使用的工具箱。
- AI 调度执行:用户下达任务后,AI 理解意图,自动匹配并加载对应的 Skill,再按照 Skill 里写的流程,通过配置好的连接器去调用外部工具完成具体操作。
四、Skill 与 Function Calling 的区别
Function Calling 是模型“能调用函数”的原生能力,而 Skill 是“如何用好工具”的完整说明书和流程编排。
| 对比维度 | Function Calling(函数调用) | Skill(技能) |
|---|---|---|
| 核心定义 | 一种底层机制,让大模型能输出结构化的 JSON,表示“我要调用哪个函数,参数是什么”。 | 一个上层封装,是包含指令、脚本、资源的完整模块,用来指导 AI 完成一个复杂任务。 |
| 所在层次 | 执行层:解决“怎么调用”的问题,是模型和外部代码之间的桥梁。 | 能力层/调度层:解决“为什么调用、何时调用、按什么流程调用”的问题。 |
| 主要形态 | 通常是 JSON Schema,定义了函数的名称、参数和类型。 | 通常是一个指令文件,用自然语言写明任务目标、操作步骤、触发条件和示例。 |
| 核心职责 | 让 AI 能生成代码可以理解的、格式化的调用指令。 | 封装领域知识、标准操作流程(SOP)、多步骤编排和异常处理,让 AI 像有经验的专家那样工作。 |
| 两者关系 | 是 Skill 的基础。Skill 最终还是要通过 Function Calling 来触发对具体工具的调用。 | 是 Function Calling 的指挥官。它告诉 AI 在什么场景下,按什么顺序,去调用哪些 Function Calling。 |
简单说,Function Calling 给了 AI “手”去操作工具,而 Skill 给了 AI 一张“施工图纸”,告诉它什么时候该动手,第一步做什么,第二步做什么,以及做到什么标准才算合格。
五、如何定义一个 Skill
定义一个 Skill,核心是写好一个指令文件,它由两部分组成:
1. YAML Frontmatter(元数据)
文件顶部的元信息,必须包含 name 和 description,它们决定了 Skill 的触发时机:
name:技能的唯一标识,需与文件夹名一致。命名规则严格,只能用小写字母、数字和连字符(-),且不能以连字符开头或结尾。description:最关键的一行。它需要清晰地告诉 AI “这个技能能做什么”以及“什么时候该用它”。写得好的 description 应包含核心功能和具体的触发关键词。agent_created:如果 Skill 是通过自动生成方式创建的,需要加上agent_created: true,否则后续可能无法修改。
2. Markdown 正文(指令)
这是 Skill 的“灵魂”,指导 AI 如何执行任务。建议包含以下结构:
- 角色设定:给 AI 一个专业身份,比如“你是一名资深后端工程师”。
- 工作流(SOP):分步骤描述执行流程,比如“先通读 diff,再分模块检查,最后输出报告”。
- 约束与边界:设定必须遵守的规则或要避免的坑点,比如“必须考虑生产环境影响”。
3. 一个简单示例
---
name: code-review-expert
description: 专业后端代码审查技能。当用户提交代码 diff、PR 链接,或提到“代码审查”、“PR Review”时触发。按安全性、性能、规范三个维度输出 Markdown 格式报告。
agent_created: true
---
# 角色设定
你现在是拥有 10 年经验的 Senior Backend Engineer。
# 标准操作流程(SOP)
1. 通读 diff,理解变更意图。
2. 分模块检查:安全性、性能、规范。
3. 输出 Markdown 格式报告。
# 常见坑点
- 必须考虑生产环境影响
- 拒绝模糊结论
六、定义 Skill 时需要注意的关键点
1. 描述决定成败
Description 是整个 Skill 体系中最关键的一行文字,直接影响 Token 消耗和响应速度。写得不好会导致“该用时不用”(under-triggering)或“不该用时乱用”(over-triggering)。好的 description 应同时回答三个问题:能做什么、核心能力有哪些、什么情况下触发。
2. 保持单一职责
一个 Skill 只做一件事。不要把多个不相关的功能塞进同一个 Skill,因为规则之间容易冲突,导致 AI 执行混乱。如果需要多个能力协同,可以把它们拆成独立的 Skill,再通过流程编排组合使用。
3. 从高频场景开始
首个自定义 Skill 建议只解决一个明确且高频的问题,比如“整理会议记录”或“生成周报”。越高频的重复操作,越值得沉淀成 Skill。
4. 注意边界与安全
- 明确边界:在 Skill 中写清楚哪些事情不能做,比如“不评价年龄、婚育等合规敏感项”。
- 注意安全:Skill 可以调用本地文件或外部 API,安装第三方 Skill 时需要检查其权限和脚本内容,优先选择可信来源。
5. 多 Skill 协作与共享
复杂任务可以被拆解,由多个 Skill 接力完成。例如,“收集信息 → 生成报告 → 发送邮件”这个流程,可以分别调用网页搜索 Skill、PDF 生成 Skill 和邮件发送 Skill。它们之间通过共享知识池传递上下文,比如上一个 Skill 生成的文件路径、关键结论等,确保信息不断链。
此外,自定义 Skill 还可以共享给团队成员,统一团队的工作方式。
七、总结
Skill 体系是一个精密的“AI 调度系统”,它通过标准化的封装,让 AI 能够按需调用各类专业能力。这既解决了大模型“会聊不会做”的痛点,也让用户能通过创建和组合 Skill,把经验固化成可复用的自动化工具。
它与 Function Calling 的关系可以概括为:Function Calling 是底层执行机制,Skill 是上层能力封装与流程编排。两者配合,才能让 AI 从“能说”真正走向“能做”。
原文地址: https://www.cveoy.top/t/topic/qHxu 著作权归作者所有。请勿转载和采集!