第10章 Skills 让 Agent 按照专业流程工作
10-1 Agent的牛马小弟:SubAgent




10-2 Agent Skills就是个专属工作流
第一个提出MCP 第一个提出Skills 第一个提出SubAgent
10-3 Skills装载的是专业知识和工作流程
讲述了Agent Skills与MCP协议的本质区别:MCP是统一的外部工具调用标准,而Agent Skills是涵盖专业知识、工作流程与工具调用逻辑的标准化专业技能系统,以文件夹形式赋予智能体,并强调其SOP属性及与Workflow在制定主体、封装方式与执行机制上的根本差异。
Agent Skills的核心认识:
工具选择与正确使用的自主性 : Agent Skills使得智能体能够自主判断完成任务所需调用的具体工具,并掌握该工具的正确使用方法,无需每次向语言大模型请示。
整套专业技能流程
- 产品领域技能包的完整性 以产品经理为例,Agent Skills不仅包含使用墨刀(Mockplus)或Axure绘制原型图的能力,更涵盖产品定型、与老板沟通需求、将口头需求转化为圆形图(即原型图)、检索竞品信息、与前后端开发人员就标注、尺寸及功能摆位进行协同确认等全流程。
- Agent Skills的本质定位 它是一个标准的专业技能流程(SOP),工具使用仅是其中一环。
Agent Skills的底层构成三要素
- 专业知识 包括产品知识、用户心理学、用户行为学及消费习惯等跨学科领域知识。
- 工作流程 具有明确起始与终点的标准化步骤序列,例如从需求沟通→需求文档化→竞品调研→原型初稿→老板确认→与开发协同细化→最终交付带数据指标与功能步骤的完整原型图。
- 执行逻辑(工具调用) 具体工具(如墨刀、Axure)的操作规范与调用方式。
Agent Skills的赋值方式:文件夹结构
- 文件夹内容组成 包含工具使用脚本、相关资源及说明文档,通过该文件夹整体赋予智能体在特定专业领域内的专业知识、工作流程与工具执行逻辑。
MCP协议的核心定位与划时代意义
- MCP的本质 是一个外部工具连接标准,而非技能系统。
- MCP的实现机制 第三方工具(如携程网、百度地图)按MCP协议开发服务端后,所有语言大模型(如DeepSeek、Qwen)均可遵循同一标准调用该工具。
- MCP解决的历史问题 彻底终结了不同大模型各自为政、调用同一工具需适配多种接口的碎片化局面。
Agent Skills与Workflow的根本性对比
- Workflow(工作流)的特征 由主管手动设计与封装,包含显式节点(第一步、第二步)、分支、并行、汇总等逻辑,业务规则硬编码于流程中。
- Agent Skills中工作流程的特征 以静态文件形式内置于Agent Skills包中,由智能体自动遵循执行,无需人工实时编排;其流程是领域公认的、固定的SOP,具有普适性与可迁移性。
二者应用场景的区分
- Agent Skills适用场景 面向具有成熟、固定、可复用专业流程的任务(如标准产品经理工作)。
- Workflow适用场景 面向高度定制化、个性化、需动态调整的业务流程。
10-4 Skills的渐进式加载机制
Agent Skills与MCP的核心区别及Agent Skills的三层渐进式加载机制:原数据(索引)加载、工具按需加载、附加资源按需加载,阐明其如何解决上下文窗口拥堵问题并实现专业领域知识的高效集成。
- **MCP与Agent Skills的概念区分 **
- MCP的定义与意义:MCP是AI调用外部工具连接的标准,外部工具只需制定符合该标准的服务端,大模型(如DeepSeek、千问、OpenAI)即可基于此标准调用,避免重复造轮子。
- Agent Skills的定义与划时代意义:Agent Skills是智能体的技能系统标准,不仅包含工具调用,更涵盖专业领域知识、专业工具使用逻辑及固定工作流程,使任意智能体继承后即具备该领域专业能力。
- Agent Skills工作流程的固定性 :其工作流程为严格三步模板:第一步做什么、第二步做什么、第三步做什么,最终输出形式亦固定;所有继承该skills的智能体均按此唯一路径执行,无分支。
- Agent Skills与Workflow的本质区别 :Workflow需人工封装节点,内含业务逻辑分支、汇总与并行;而Agent Skills的工作流程仅适用于具有严格固定流程的专业领域场景。
- Agent Skills对MCP调用效率的优化机制 =
- MCP服务端的原始缺陷 :MCP服务端将全部工具一股脑返回给Agent,导致无关工具挤占上下文窗口,实际任务中大量工具无法使用。
- Agent Skills赋能后的调用范式转变:继承Agent Skills的智能体明确知晓完成专业任务所需的具体工具及正确使用方式,可主动向MCP精准索取对应工具,杜绝冗余信息。
- **Agent Skills的三层渐进式加载机制 **
- 第一层:原数据(元数据)加载——索引先行:首先加载轻量级原数据,即专业领域知识、工具调用流程模板等资源的索引目录,仅含技能领域名称、描述、操作步骤概要;体积极小,不占用上下文窗口。
- 第二层:工具按需加载——精准索取:智能体依据已加载的原数据索引,明确识别任务所需工具名称,主动指令MCP仅返回指定工具,屏蔽其余无关工具。
- 第三层:附加资源按需加载——执行时加载:工具执行过程中所需的脚本、指令等附加资源,存储于Agent Skills文件夹内;仅在实际调用该工具的瞬间才加载对应资源,实现资源调用零冗余。
- 三层加载的渐进性本质 :三者为严格递进关系:先载索引以建立认知方向;再依索引精准获取工具;最后在具体执行步骤中动态加载所需附加资源,全程避免一次性全量加载。

10-5 Skills的文件结构标准
Agent Skills文件结构的设计原理与组成要素,包括作为索引的skill.md原数据文件(含唯一名称、场景化描述、执行步骤及指令结构三大部分)以及技能文件夹中存放的脚本文件(.py为主)、指令代码文件和资源文件(如样例、模板、文档),并强调其可移植性与按需加载机制。
**Agent Skills整体架构与加载机制 **
- 文件系统本质:Agent Skills是一个专业领域技能体系,以文件夹形式组织全部知识,包含工作流程、领域知识和工具调用逻辑。
- 分层加载设计:不一次性加载整个文件夹,而是先加载原数据(索引),再按需定位并调用具体文件。
- 原数据核心作用:原数据作为索引,使智能体快速定位对应文件,并明确“做什么”与“如何做”。
- 原数据即skill.md文件:skill.md是Markdown格式的原数据文件,包含三个强制字段:技能名称(name)、技能描述(description)、正文(body)。
**skill.md原数据文件的三大核心字段 **
- 技能名称(name)——唯一标识符 :是技能的唯一ID,如“make_ppt”“excel_analysis”,用于精确区分不同技能。
- 技能描述(description)——场景触发依据:描述该技能适用的具体场景;提示词中若与描述语义匹配,智能体即自动调用该技能;要求描述丰富、具体,避免低效单句。
- 正文(body)——执行逻辑载体:包含目标(objective)、步骤(steps)、输出格式(output format)三要素,构成固定工作流程模板,指导智能体执行。
**正文(body)的细化结构 **
自定义技能名称:如“旅游路线制定的技能”,用于内部标识与可读性。
执行步骤(steps)——流程刚性约束 :明确规定执行顺序与动作:① 理解中文问题;② 调用百度API(通过执行指定Python文件);③ 将API返回结果组装为JSON格式反馈。
指令结构(instruction structure)——操作规范细则
定义调用Python脚本的具体约束条件,包括:
- 前置条件:需理解百度地图API文档;
- 入参规范:明确参数类型(数字型/流式)及取值范围;
- 查询策略:优先按通行时间最短、驾车时间最短或公共交通费用最少等维度排序;
- 错误处理:定义异常发生时的行为;
- 输出模板:强制返回JSON结构,提供标准字段与样例;
- 执行场景说明:明确何种输入条件下应触发该指令。
**技能文件夹的完整内容组成 **
- 脚本文件(scripts)——可执行程序:当前仅支持
.py文件(如调用百度API的route_query.py),未来可能扩展支持Shell、C++、Java或JAR包。 - 指令文件(instructions)——预置代码片段:已编写完成的代码文件,智能体可直接调用执行。
- 资源文件(resources)——支撑性材料:包括样例数据(
.json/.txt)、说明文档、模板文件等;外部文件可通过链接写入资源文件后被引用。
- 脚本文件(scripts)——可执行程序:当前仅支持
**文件引用与可移植性实现 **
- skill.md内文件引用语法:使用相对路径引用同文件夹内资源,例如
[reference](./reference.txt)或[execute](./route_query.py)。 - 跨智能体可移植机制:Agent Skills以独立文件夹形式存在,具备完整封装性;将同一文件夹加载至A智能体或B智能体,即可使其获得完全一致的专业领域技能系统。
- skill.md内文件引用语法:使用相对路径引用同文件夹内资源,例如
**cloud code官方文档示例印证 **
- name与description强制性与规范: name须为小写字母+数字+下划线,长度≤64字符;description长度≤1024字符,且必须具象化、场景化。
- skill.md完整结构重申: 严格由三部分构成:① 必填字段(name + description);② 执行步骤(steps);③ 指令结构(instruction structure)。
10-6 总结Agent从助手到自主协作的进化过程
AI智能体发展的五个阶段演进过程,从早期语言大模型的被动响应,到智能体调用工具解决实际问题,再到引入React框架实现自主决策、工作流支持多步骤任务、自主协作系统实现任务动态编排,最终发展为专业领域子代理与技能系统协同的工程化体系,系统性解决了幻觉、自主决策与复杂任务分解等核心问题。

**AI智能体发展五阶段总览 **
第一阶段:语言大模型(LLM)被动响应
- 用户通过prompt向语言大模型发问,模型仅返回文本(后扩展至多模态如图片、视频)。
- 模型不具备自主决策能力,无法将问题A拆解为子问题A→B→C并主动执行,仅充当对话角色。
**第二阶段:智能体(Agent)引入工具调用 **
- 工具赋能解决实际问题 :Agent通过调用外部工具解决用户真实需求,例如:
- 调用本地PPT软件生成文档;
- 请求第三方API获取实时数据。
- 工具调用的标准化需求
- 各厂商此前自建函数调用工具,导致重复开发;
- MCP(Model Context Protocol)标准由此提出,使不同大模型可统一基于同一协议调用相同工具,避免“重复造轮子”。
**第三阶段:赋予自主决策与多步骤任务支持 **
- React框架实现自主决策
- 框架包含三步循环:思考(规划下一步)、行动(执行操作)、验证(检查结果是否符合目标);
- 若验证失败,则动态调整后续步骤,赋予Agent真正自主决策能力。
- 工作流(Workflow)支持复杂任务
- Workflow由多个节点构成,每个节点部署一个Agent;
- 标志多智能体时代来临,实现任务分段、并行或串行处理。
**第四阶段:自主协作系统(Autonomous Collaboration) **
- 全流程自动化编排
- 代表框架为Manners;
- 系统自主完成:理解用户意图 → 拆解目标 → 分配子任务 → 协同执行;
- 全程无需人工介入,实现端到端任务自治。
第五阶段:专业领域子代理与技能系统
- 专业领域智能体分工:针对不同领域(如数据库、金融、医疗)分配专业化Agent。
- 子代理(Subagent)处理固定流程任务
- 对具有确定性流程的任务(如“连接数据库→查询指定字段→返回结果”),启用Subagent;
- Sub agent在封闭上下文中执行单一任务,保障隔离性与可靠性。
- Agent Skills技能系统
- Agent Skills是标准化的技能定义协议,包含:
- 完成该固定流程所需的完整步骤序列;
- 每一步所依赖的具体工具调用规范(含MCP接口);
- Sub agent加载对应Skills后,即可按预设流程与工具链自动执行任务。
- Agent Skills是标准化的技能定义协议,包含:
系统级优势:缓解幻觉与增强可靠性
- 反思与校验机制贯穿全层级 :从宏观任务分配到微观子任务执行,均继承React式“思考-行动-验证”闭环;
- 工程化幻觉抑制
- 自主协作系统通过多智能体交叉验证、步骤回溯、结果一致性比对,显著降低单一LLM输出错误(幻觉)风险;
- 最大限度保障最终答案的准确性与可追溯性。
10-7 SpringAi 1.1.2实现Agent装载Skills
推荐使用最新版+1.1.2.0,只有在这个版本及其之后才支持Skill,同时使用bom的方式,依赖包如下
<properties>
<!-- SpringAi Alibaba 版本 -->
<spring-ai-alibaba.version>1.1.2.0</spring-ai-alibaba.version>
<!-- SpringAi Alibaba扩展 的版本 -->
<spring-ai-alibaba-extensions.version>1.1.2.1</spring-ai-alibaba-extensions.version>
<!-- SpringBoot 版本 -->
<spring-boot.version>3.5.10</spring-boot.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<!-- SpringAi Alibaba 的 bom 版本管理 -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-bom</artifactId>
<version>${spring-ai-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SpringAi Alibaba扩展 的 bom 版本管理 -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-extensions-bom</artifactId>
<version>${spring-ai-alibaba-extensions.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SpringBoot 的 bom 版本管理 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-agent-framework</artifactId>
</dependency>
<!-- 必须引入 SpringAi Alibaba扩展 的Bom -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
</dependency>
<!--需要用到SpringBoot的 Jackson注解,所以需要导入SpringBoot Web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>构建可支持Skill的Agent
public class HelloSkills {
public static void main(String[] args) throws GraphRunnerException {
//将 DashScope 模型平台的 ApIKey放到环境变量
DashScopeApi dashScopeApi = DashScopeApi.builder()
.apiKey(System.getenv("AI_DASHSCOPE_API_KEY"))
.build();
// 创建 ChatModel
ChatModel chatModel = DashScopeChatModel.builder()
.dashScopeApi(dashScopeApi)
.build();
//Skills.md 文件
SkillRegistry skillsMarkdown = ClasspathSkillRegistry.builder()
.classpathPath("skills")
.build();
//将Skills注册到Hook
SkillsAgentHook skillsHook = SkillsAgentHook.builder()
.skillRegistry(skillsMarkdown)
.build();
//创建 ReAct Agent
ReactAgent agent = ReactAgent.builder()
.name("skills-agent")
//需要传入ChatModel对象
.model(chatModel)
//通过Hook挂载Skills
.hooks(List.of())
.build();
//运行 Agent
AssistantMessage response = agent.call("请介绍你有哪些技能");
//打印出Agent的回答
System.out.println(response.getText());
}
}技能文件创建在resources下创建skills文件夹,在它下面放各种的skills,例如:resources\skills\baidu-map\SKILL.md
注意:技能的名称name要与skills下的名称一致
---
name: baidu-map
description: 基于百度地图开放平台 Web 端 JavaScript API / 服务端 API发起接口调用,传入起点、终点两个目标地点的有效地理信息,接口自动完成路线规划计算,筛选出对应出行方式下的最优行程路线,并将该最优路线的全量结构化数据以标准 JSON 格式完整返回
----
# 技能名称
百度地图技能