简介:Skill是最近大模型领域的热词:它把专业能力、重复工作与SOP封装成可被大模型调用的技能包,以文件夹形式存在,必备一份技能说明文件。本文将Skill与传统函数调用、提示词模板做系统对比,从封装粒度、上下文占用、执行确定性、维护成本等维度讲清差异,并给出场景化选型建议与迁移注意事项,帮你判断哪种方案适合自己的Agent应用。
大模型应用正从“对话问答”走向“任务执行”。让模型可靠地使用外部能力,过去主要有两条路径:函数调用与提示词模板。而最近爆火的 Skill 提供了第三条路:把专业能力、重复工作、SOP 封装成可被大模型调用的技能包。三种方案的目标高度重合,工程取舍却完全不同。很多团队在“要不要引入 Skill”上反复纠结,本质是不清楚它与传统做法的能力边界。本文就围绕这一问题,从架构、功能、成本、适用场景等维度做一次系统对比。
Skill 就是将专业的能力、重复的工作、SOP,封装成一个可以被大模型调用的技能包。它有三个关键特征:
典型的 Skill 目录结构示意:
skills/└── quarterly-report/├── SKILL.md # 技能说明(必备):触发条件、步骤、输入输出约定├── reference.md # 参考文档:指标口径、报告模板└── scripts/└── calc_metrics.py # 确定性计算脚本
技能说明文件的典型内容:
---name: quarterly-reportdescription: 当用户需要生成季度经营分析报告时使用本技能---## 使用步骤1. 与用户确认报告周期与统计口径2. 调用 scripts/calc_metrics.py 计算核心指标3. 严格按 reference.md 中的模板结构组织输出
从架构视角看,Skill 的本质是“把知识当作外部资源,按需注入上下文”,再配合可选的脚本执行,形成文档驱动 + 代码兜底的混合执行模型。
函数调用(也称工具调用)是更早成熟、工程化程度更高的方案。开发者预先定义一组结构化工具描述(名称、功能描述、参数 Schema),随请求提供给模型;模型根据用户意图决定调用哪个函数、生成什么参数;实际执行发生在应用侧,执行结果回传给模型继续推理。模型自始至终只做“决策与参数生成”,不做执行。
示意性的工具定义:
{"name": "query_revenue","description": "查询指定季度的营收数据","parameters": {"type": "object","properties": {"quarter": { "type": "string", "description": "季度,如 2024Q3" }},"required": ["quarter"]}}
提示词模板把常用指令、格式约束、领域知识固化成带变量的模板,填充后发给模型。它没有独立执行环节,完全依赖模型的生成能力,适合简单、格式稳定的任务。
函数调用面向“一个动作”:查一笔数据、下一张单、改一个状态。粒度细、组合自由,但复杂流程需要应用代码自行编排。Skill 面向“一类任务”:一个季度报告技能内部可能组合多步取数、计算与成文,流程知识就写在说明文件与参考文档里,由模型驱动执行。前者是“给模型一堆零件”,后者是“给模型一本操作手册”。
函数描述被压缩在几十字的功能说明与参数定义里,复杂的业务口径、判断规则写不下,往往散落在应用代码或工程师的脑子里。Skill 的说明文件加参考文档可以把“指标怎么算、边界怎么判、格式怎么写”这类 SOP 显性化,本身就是可积累的知识资产。
传统函数调用的全部工具描述会常驻在上下文中:工具越多,token 消耗线性上涨,且描述之间相互干扰,容易诱发误调用。Skill 机制下,系统提示里通常只保留极简的技能索引,详细内容在触发后才加载,更适合“技能数量多、单次任务只用其中几个”的场景。
函数调用中模型只决定“调什么、传什么”,执行由代码完成,确定性最高,适合事务性操作。Skill 的步骤由模型按说明推进,中间推理由模型生成,确定性居中;提示词模板则几乎完全依赖模型发挥,确定性最低。实践中,Skill 内的重要计算与副作用操作,建议落到其携带的脚本或底层函数上执行,形成“模型管流程、代码管确定性”的分工。
函数调用的成本在工程:写代码、注册接口、维护描述与实现的同步,有编译期与测试保障,问题暴露得早。Skill 的成本在文档:前期门槛低,业务专家也能参与沉淀 SOP,但缺少静态检查,描述含糊、步骤冲突这类问题往往到运行时才暴露,需要评审与评测机制兜底。
函数定义与特定运行时代码绑定较深,更换平台往往要重写接入层。Skill 本质是“文件夹 + 说明 + 资源”,与具体运行环境耦合低,跨项目、跨团队复用摩擦更小;但也要注意,说明文件里若混入特定环境的私有约定,同样会损害可移植性。
| 对比维度 | Skill 技能包 | 传统函数调用 | 提示词模板 |
|---|---|---|---|
| 封装粒度 | 完整任务流程(SOP 级) | 原子操作(函数级) | 单条指令或格式约束 |
| 知识承载 | 说明文件+参考文档+脚本 | 参数 Schema 与短描述 | 模板文本 |
| 上下文占用 | 索引常驻,详情按需加载 | 工具描述全量常驻 | 常驻或每次拼接 |
| 执行确定性 | 中(模型管流程、脚本管计算) | 高(代码执行) | 低(纯生成) |
| 开发门槛 | 低(以写文档为主) | 中(需编码与接口维护) | 低 |
| 质量保障 | 依赖评审与运行时评测 | 有编译、测试等工程手段 | 依赖人工调试 |
| 可移植性 | 高(文件夹化,环境耦合低) | 中(与运行时代码绑定) | 中 |
| 典型场景 | 复杂专业流程、SOP 沉淀 | 事务性接口操作 | 固定格式输出 |
从函数调用引入或迁移到 Skill,建议关注以下几点:
回到最初的问题:爆火的 Skill 到底是啥?一句话:把专业能力、重复工作与 SOP 封装成文件夹形式的技能包,以一份必备的技能说明文件向模型“自我介绍”,按需加载、按流程执行。它与传统函数调用并不对立:函数调用赢在确定性与工程成熟度,Skill 赢在知识承载、上下文效率与 SOP 沉淀的低门槛。选型的核心不是“哪个更好”,而是“任务形态是什么、团队的资产在哪里”,事务型操作交给函数,流程型任务交给 Skill,简单格式化交给模板,三者分层组合,往往才是大模型应用落地最稳的形态。