一、Skill 的出现
随着大模型能力的提升,越来越多的系统开始尝试使用 Agent 架构 来完成复杂任务,例如自动化运维、数据分析、代码生成等场景。
在最早期的 Agent 设计中,整体结构其实非常简单
在这种模式下,大模型通过 Tool Calling 的方式选择合适的工具,并根据工具返回结果继续推理,从而完成任务。
例如:
- 查询天气 → 调用
get_weather - 查询数据库 → 调用
run_sql - 搜索文档 → 调用
search_docs
这种方式在 工具数量较少时非常有效。但随着 Agent 能力不断增加,系统接入的工具越来越多,问题也逐渐开始显现。
1. 工具规模增长
在早期 Agent 系统中,通常只接入少量工具,例如:查询天气、查询数据库、搜索文档。大模型通过 Tool Calling 选择工具即可完成任务。
但在真实系统中,随着能力不断增加,Agent 往往会接入越来越多的工具,当工具数量从 几个增长到几十个甚至上百个 时:
- Prompt 中需要包含大量 Tool 定义
- 模型选择工具难度增加
- 推理成本显著上升
2. 任务复杂度提升
很多真实任务并不是一次工具调用可以完成,而是包含多个步骤,并且步骤之间存在依赖关系。
例如:规划一次五一南京旅行
查询车票
确定出行时间
预订酒店
查询景点
规划每日行程
生成旅行计划
这些步骤存在明显依赖,例如:
- 酒店需要在车票时间确定后再预订
- 景点安排需要结合住宿地点和交通时间
因此,大模型不仅要选择工具,还需要推理 执行顺序和依赖关系。
当工具数量和任务步骤增加时,这种推理难度也会迅速上升。
3. 能力模块化需求
当 工具规模不断增长、任务复杂度不断提升 时,Agent 系统需要一种方式来管理这些能力。
在传统软件工程中,我们通常通过模块化来控制复杂度,例如:函数、模块、微服务
Agent 系统同样需要类似机制,将复杂能力拆分为 可管理、可复用的能力模块。例如:旅行规划、日志分析、SQL优化、文档生成
在这样的背景下,Skill 作为能力模块化的机制逐渐出现。
二、什么是 Skill
1. Skill 的定义
Skill 是 Agent 的一个能力单元,用于封装完成某一类任务所需的逻辑和资源。
与单个 Tool 不同,Skill 描述的是一类 完整能力或任务流程。在执行过程中,Skill 可以根据需要调用多个 Tool,并组织它们完成任务。
在 Agent 系统中,Agent 会根据用户问题选择合适的 Skill,然后由 Skill 负责组织具体的工具调用与任务执行。
因此可以简单理解为:
- Agent:负责推理和任务决策
- Skill:负责组织能力流程
- Tool:负责执行具体操作
从系统结构上看,Skill 是 Agent 的能力模块,用于将复杂任务组织为可复用的执行流程。
2. Skill 的结构
在 Anthropic 的设计中,一个 Skill 通常以 目录的形式组织,用于封装完成某一类任务所需的说明、知识和执行资源。
一个典型的 Skill 结构如下:
skill/
├── SKILL.md
├── references/
└── scripts/
- SKILL.md:定义 Skill 的能力说明和使用规则,是 Agent 选择和理解 Skill 的主要依据
- references:提供 Skill 相关的知识资源,在执行过程中按需加载
- scripts:提供完成任务所需的脚本或代码,用于执行具体操作
通过这种结构,Skill 将能力描述、知识资源和执行逻辑统一封装,从而形成可复用的能力模块。
3. Skill 与 Tool 的关系
在 Agent 系统中,Skill 和 Tool 扮演不同角色。
- Tool:表示具体的执行能力,例如调用 API、执行 SQL 或运行脚本,用于完成某一个明确操作
- Skill:表示更高层的能力或任务流程。在执行过程中,Skill 可以调用多个 Tool,并组织它们完成任务
从系统结构上看:
- Skill:负责组织能力流程
- Tool:负责执行具体操作
Skill 通过组合多个 Tool,从而完成更复杂的任务。
三、Skill 的执行流程
Skill 在 Agent 中的执行通常包含三个阶段:选择、加载和执行。
为了更清晰地说明 Skill 的执行流程,我们以一个典型的 xiaohongshu_publish Skill 为例
xiaohongshu_publish/
├── SKILL.md
├── references/
│ └── style-examples.md
└── scripts/
└── publish_xiaohongshu.py
└── save_xiaohongshu_payload.py
- SKILL.md:定义该 Skill 的能力和使用规则,如何生成并发布小红书内容
- references/style-examples.md:提供小红书内容的风格示例,供模型在生成内容时参考
- scripts/save_xiaohongshu_payload.py:用于保存生成内容,方便记录或后续处理
- scripts/publish_xiaohongshu.py:负责调用接口,将生成的小红书内容发布到平台
接下来,我们基于这个 Skill 来说明其在 Agent 系统中的执行流程。
1. Skill 选择
当 Agent 接收到用户请求时,需要从可用的 Skill 中选择最合适的一个。
通常情况下,Agent 会根据用户问题与 Skill 的 name 和 description 进行匹配,从而判断是否需要使用该 Skill。
例如,一个 xiaohongshu_publish Skill 的基本信息可能如下:
---
name: xiaohongshu
description: 将用户输入的任意中文内容改写为成小红书风格文案,输出吸引点击的标题、有节奏的正文和话题标签。适用于用户要求“改;支持先提炼生成小红书风格”“写种草文案”“写小红书笔记”“优化稿,再通过独立发布脚本调用发布接口分享内容”等场景。
---
实际系统中,Skill 的选择通常分为两个阶段:
- 粗召回匹配:根据用户输入语义与 Skill 的 name 和 description 进行向量化匹配,筛选出可能相关的 Skill
- 大模型决策:将召回的 Skill 提供给大模型,由模型结合上下文选择最合适的 Skill
2. Skill 加载
Skill 不会一次性加载全部资源,而是采用 按需加载 的方式。Agent 通常会先读取 SKILL.md 中的能力说明和执行规则,以理解该 Skill 的整体能力。
xiaohongshu_publish/
├── SKILL.md
├── references/
│ └── style-examples.md
└── scripts/
└── publish_xiaohongshu.py
└── save_xiaohongshu_payload.py
在这一阶段,Agent 会优先读取 SKILL.md。只有在任务确实需要时,才会进一步读取 references/ 中的内容,或选择性执行 scripts/ 中的脚本。
这种方式被称为 渐进式加载(Progressive Disclosure),可以避免一次加载大量无关信息,从而降低上下文复杂度并提升推理效率。
需要注意的是,scripts/ 中的脚本并不一定都会执行。根据任务流程的不同,脚本既可能在大模型生成前执行,也可能在生成后执行。例如在小红书发布任务中,发布脚本和保存脚本通常会在内容生成之后执行,而其他脚本则可能用于生成前的数据准备。
3. Skill 执行
在完成 Skill 的选择和加载之后,Agent 会按照 SKILL.md 中定义的规则执行该 Skill。
在执行过程中,Agent 可能会读取 references/ 中的内容作为上下文,并根据任务需要调用 scripts/ 中的脚本完成具体操作。
例如在小红书发布任务中,Agent 会先根据参考示例生成小红书内容,然后调用 publish_xiaohongshu.py 脚本将内容发布到平台,同时通过 save_xiaohongshu_payload.py 保存生成结果。
通过这种方式,Skill 将大模型能力与外部工具结合起来,从而完成完整的任务执行。
四、Skill 的设计原则
1. 单一能力原则
每个 Skill 应当只负责一类明确的能力,而不是同时承担多个不相关的任务。
- web_search
- xiaohongshu_publish
- sql_analyze
2. 合理的 Skill 粒度
Skill 的粒度需要保持适中。
- 如果 Skill 过大,可能会包含过多逻辑,导致模型难以理解;
- 如果 Skill 过小,则会导致 Skill 数量过多,增加选择复杂度。
例如:
- 不推荐
- content_agent
- generate_title
- generate_content
- 推荐
- xiaohongshu_publish
3. 资源按需加载
Skill 中的资源应尽量按需加载,而不是一次性全部提供给模型。
例如:
SKILL.md用于描述能力references/存放参考资料scripts/提供执行脚本
这种设计可以减少上下文长度,并提升推理效率。
4. 工具与能力解耦
Skill 负责组织任务流程,而 Tool 或 Script 负责具体执行。
- Skill:xiaohongshu_publish
- Tool:publish_xiaohongshu.py
通过这种方式,可以将能力逻辑与具体执行实现解耦,从而提升系统的灵活性和可维护性。
五、总结与展望
Skill 为 Agent 提供了一种能力模块化的方式,使复杂任务能够被拆分为可管理、可复用的能力模块。
通过 Skill 的结构化组织和渐进式加载机制,Agent 可以在保持能力扩展性的同时,避免上下文膨胀的问题。
在实际系统中,Skill 已成为连接大模型能力与外部工具的重要桥梁。
但从技术发展的角度来看,Skill 很可能只是当前阶段的一种工程实现。随着大模型能力的持续提升,未来可能会出现更加自然的能力组织方式,例如由模型直接理解和调用能力接口,或通过更智能的任务规划与能力路由机制来组织各种能力。
某种意义上看,Skill 更像是 Agent 时代的函数封装。而未来的 Agent 系统,也许会像操作系统一样,通过更加动态的能力调度机制来管理这些能力。至于最终会演进成什么形态,现在还很难确定,但可以确定的是,让 Agent 更高效地组织能力、完成复杂任务,仍然是这一领域持续探索的重要方向。