☰
Spring AI 实战|深度解析 Agent Skill 原理、结构与运行机制
2026/9/29 7:22:27 网站建设 项目流程

一、为什么 Agent 需要 Skill?

1.1 什么是Skill ?

Skill 是预先封装好、可以重复调用的能力模块,它的作用就是给 AI Agent 补齐落地执行任务的手段。AI Agent 负责判断 “要做什么”,而 Skill 负责真正动手 “怎么做”。像天气查询、邮件发送、数据库检索这类具体操作,都可以封装成独立 Skill。新增业务能力时,只需要开发对应的 Skill,不用改动 Agent 的主体逻辑,实现能力的灵活扩展与复用。

1.2 Skill 的核心价值

Skill 是 Anthropic 提出的声明式能力封装方案,核心设计理念是:不用代码,用自然语言(Markdown)定义能力。它不是一段可执行代码,而是一份 “操作手册”+ 权限配置,本质是:

Skill = 提示词模板 + 权限管控 + 资源引用 + 工作流指引

对比 Tool,Skill 具备四大核心优势:

  • 低代码化:纯 Markdown 编写,无需 Java 代码,非开发人员也能配置;
  • 动态注入:无需重启 Agent,修改 Skill 即可生效,支持热更新;
  • 流程化引导:内置完整工作流,引导 Agent 按步骤完成复杂任务;
  • 精细化权限:可精准管控工具使用权限,降低安全风险;
  • 高复用性:独立文件封装,跨项目、跨 Agent 直接复用。
1.3 Tool 与 Skill 核心区别

对比维度

传统 Tool(@Tool)

Skill(技能)

本质

代码级可执行逻辑

自然语言操作手册 + 权限配置

编写方式

Java 代码 + 注解

Markdown(SKILL.md)

部署方式

与 Agent 同进程,需编译

独立文件,动态加载

能力范围

单一原子操作

复杂多步骤工作流

权限管控

统一授权,粒度粗

精细化授权,按需开放

复用性

项目内复用

跨项目、跨 Agent 复用

简单原子操作适合采用 Tool 实现,具备轻量高效的特点;而多步骤业务流程、需要跨项目复用以及频繁迭代的场景,则更推荐使用 Skill,它支持流程化编排、独立封装无需改造业务,还可实现热更新,便于维护与快速上线。

Skill 看似是智能能力模块,但其底层逻辑非常简洁,无复杂算法,完全依托大模型阅读理解能力驱动。核心优势是通过渐进式加载、按需指令注入,解决传统 Prompt 一次性全量注入导致的上下文溢出、指令失效问题,精准驱动 AI Agent 完成用户任务。

二、Skill 的底层原理

2.1 Skill 本质:轻量化文档能力,而非代码框架

Skill 无需服务部署、无需编写业务代码,本质是独立的文档化能力单元。每个 Skill 对应一个独立文件夹,以 `SKILL.md` 为核心载体,搭配少量可选资源文件即可实现完整能力定义,真正做到一份文档、一项可复用技能。

2.2 核心机制:渐进式加载(按需加载)

Skill 采用分步加载、按需披露的核心设计,大幅节省上下文资源:

  1. 启动轻量扫描:服务启动仅读取 SKILL.md 头部元数据(名称、描述、权限),快速生成技能清单,不加载全文,保证启动高效;
  2. 命中再加载全文:用户请求触发语义匹配、命中对应技能后,才加载完整文档内容;
  3. 执行按需引用:任务执行阶段,再按需调用配套资源、脚本,全程避免上下文冗余溢出。

Skill 不直接执行业务操作,核心价值是标准化、轻量化地给 AI Agent 植入专业工作流程,用文档驱动智能执行,实现能力可插拔、无需改代码即可扩展 Agent 功能。

三、Skill 的执行流程

Skill 的整体执行逻辑简洁清晰,可通过用户提问「今天热搜有哪些?」这一场景,完整拆解其运行流程,核心分为发现、匹配、激活、执行、响应五个阶段。

以你对 AI 说 “今天热搜有哪些?” 为例:

  • 发现(Discover):AI 启动时扫描所有 Skill 目录,只读取每个 SKILL.md 的 name 和 description。
  • 匹配(Match):用户输入后,AI 判断:“这句话是否匹配某个 Skill 的描述?”→ 比如 Skill 描述写了 “用户说‘今日简报’‘今天热点’时触发”。
  • 激活(Activate):匹配成功!AI 加载该 Skill 的完整 SKILL.md 内容作为上下文。
  • 执行(Execute):AI 按照 Workflow(工作流) 一步步操作: 调用 curl 获取天气 调用 API 拉取 V2EX 热帖 运行脚本处理数据(如有) 整理成指定格式
  • 响应(Respond)把结果返回给用户

核心运行机制说明

AI 运行 Skill 的核心逻辑并非自主编译、运行代码,而是通过读取配置文件中的指令规则,完成模拟执行与自动化调度。在此过程中,AI 可正常调用系统命令、读取本地文件、执行自定义脚本,实现多元化的自动化业务能力。

四、Skill 资源目录

目前,OpenClaw、Claude Code、GitHub Copilot 等主流 AI 工具,均遵循AgentSkills 开放规范。核心为SKILL.md 、存放脚本的script目录、存放参考文档的references目录 以及 assets模版目录。具体如下:

trip-planner/ ├── SKILL.md # 核心指令文件 ├── scripts/ # 可执行脚本(如行程计算逻辑) │ └── calculate.py ├── references/ # 参考文档(景点数据库、交通指南) │ └── attractions.md └── assets/ # 静态模板(行程输出模板) └── template.md
  • scripts/ :脚本目录,用于存放 Python/Bash 脚本,可处理复杂逻辑;
  • references/ : 存放参考文档,使用时加载到上下文;
  • assets/ :存放模板,不加载到上下文,仅引用路径。

上述配套资源文件夹中,仅 SKILL.md 的元信息会常驻加载,其余文件均按需引用,以此避免主文档内容臃肿。

五、Skill.md 标准结构

每个 Skill 的核心是 SKILL.md,由 元数据头(YAML)+ 正文(Markdown)两部分组成,格式固定、规范清晰。

5.1 第一部分:YAML 元数据头(配置区)

放在文件最顶部,用 --- 包裹,定义技能的基础信息、权限、规则,必填字段仅 name 和 description。具体示例如下:

--- # 1. 技能名称(必填,唯一标识) name: trip-planner # 2. 技能描述(必填,1-2句话,决定Agent能否匹配) description: 智能行程规划技能,自动查询天气、推荐景点、生成2-7天个性化行程 # 3. 技能版本(可选,用于迭代管理) version: 1.0.0 # 4. 权限配置(可选,开放工具白名单) allowed-tools: getWeather, recommendAttractions # 5. 模型指定(可选,默认继承Agent模型) model: inherit # 6. 禁用手动触发(可选,true=仅自动匹配) disable-model-invocation: false ---

标准字段说明

  • name:技能唯一标识,调用时用的指令名;
  • description:核心匹配依据,必须简洁精准,说明 “什么时候用、做什么”;
  • allowed-tools:工具的白名单,只开放技能必需的工具,最小权限原则;
  • model:复杂技能可指定更强模型,默认继承 Agent 配置。
5.2 第二部分:Markdown 正文(指令区)

元数据头下方是正文,用 Markdown 编写详细工作流、操作步骤、示例,控制 Agent 的行为逻辑。

正文标准结构

## 一、技能用途 自动生成个性化行程,流程:查询目标城市天气 → 推荐匹配景点 → 规划每日行程 → 输出完整方案 ## 二、前置条件 1. 已开放 getWeather(天气)、recommendAttractions(景点)工具权限 2. 用户需提供:城市、出行天数、偏好(人文/自然) ## 三、执行步骤 ### 步骤1:解析需求 提取用户输入的城市、天数、偏好,缺失则追问 ### 步骤2:查询天气 调用 getWeather 工具,获取目标城市实时天气,作为行程依据 ### 步骤3:推荐景点 调用 recommendAttractions 工具,筛选匹配偏好的高评分景点 ### 步骤4:规划行程 按天数拆分景点,平衡游玩强度,结合天气调整室内/室外安排 ### 步骤5:输出结果 生成结构化行程,包含每日安排、时间建议、出行提示 ## 四、输出格式 ### 行程标题:XX市X日游 ### 每日行程: - 上午:景点A(时长/亮点) - 下午:景点B(时长/亮点) - 晚上:住宿/美食推荐 ### 出行提示:天气、预约、交通 ## 五、错误处理 - 天气查询失败:提示无法获取天气,仍生成基础行程 - 无匹配景点:推荐热门地标,说明原因

五、实战:从零开发一个 Skill

本章完整落地一套可直接使用的 Skill。本案例使用外网公开免费 API 作为工具,不依赖私有内部接口;同时严格遵循前面章节的目录规范、SKILL.md 结构、五阶段执行流程,可直接放到 Agent 的 skills 目录加载,支持热更新。

5.1 需求定义

技能名称:trip-planner目标能力:用户提出旅游规划需求时自动触发,接收目的地、出行天数、旅行偏好,调用外网公共 API 获取天气、景点信息,生成结构化多日行程。工具选型(外网公共免费工具)

  1. publicWeatherApi:公开天气查询 API,获取目的地未来几天天气;
  2. publicAttractionApi:公开景点推荐 API,按城市 + 偏好推荐景点;

说明:两个都是外网公共只读 API,无私有鉴权,仅用于信息查询,不支持写入操作。

约束规则:

  1. 仅调用上面两个公共工具,禁止调用其他外部接口;
  2. 用户缺少城市、出行天数、旅行偏好任一信息时主动追问,不自行编造;
  3. 工具调用失败时,降级使用模型内置知识生成基础行程;
  4. 输出固定结构化 Markdown 行程模板;
  5. 遵循最小权限原则,仅开放本技能需要的 2 个工具。
5.2 创建 Skill 目录结构

按照第四章 AgentSkills 规范创建目录,完整结构如下:

本案例无需复杂本地脚本,不创建 scripts 目录。references 目录的文档会在技能激活时按需加载;assets 下的模板只引用路径,不会默认灌入上下文,节约 token。

5.3 编写 SKILL.md
--- name: trip-planner description: 旅游行程规划技能。用户请求规划旅游、出行方案、多日游玩路线时触发。调用公共外网API查询目的地天气与景点,生成个性化旅游行程。 version: 1.0.0 allowed-tools: publicWeatherApi, publicAttractionApi model: inherit disable-model-invocation: false --- # 旅游行程规划技能 ## 一、技能用途 接收用户的出行需求,调用外网公共API查询目标城市天气、景点信息,结合用户偏好生成2~7天个性化旅游行程。 ## 二、前置条件 1. Agent已注册外网公共工具 `publicWeatherApi`、`publicAttractionApi`; 2. 参考文档 `references/travel_tips.md` 存在,存放通用出行贴士; 3. 用户需要提供:目的地城市、出行天数、旅行偏好(人文/自然风光/美食)。 ## 三、执行步骤 ### 步骤1:解析需求,提取参数 读取用户输入,提取3个核心参数:目的地城市、出行天数、旅行偏好。 - 任意参数缺失:向用户追问缺失信息,不猜测、不编造; - 参数齐全,进入下一步。 ### 步骤2:调用公共天气API 调用`publicWeatherApi`,传入目标城市,获取出行时间段的天气。 > 天气将用于调整行程:雨天优先安排室内景点,晴天安排户外。 ### 步骤3:调用公共景点推荐API 调用`publicAttractionApi`,传入城市+用户偏好,获取推荐景点列表,包含景点简介、建议游玩时长。 ### 步骤4:编排每日行程 结合天气情况,拆分景点到每一天,均衡每日游玩强度: - 晴天优先户外景点; - 雨天替换为博物馆、展馆等室内景点; - 兼顾美食、休息,不要行程过度拥挤。 ### 步骤5:加载参考文档,填充模板 读取`references/travel_tips.md`获取通用出行贴士;引用`assets/trip_template.md`模板,把天气、景点、行程信息填入模板。 ### 步骤6:返回最终行程给用户 ## 四、输出格式 使用assets/trip_template.md模板输出Markdown结构化行程。 ## 五、错误处理 1. `publicWeatherApi`调用超时/失败:不再重试,提示天气获取失败,基于景点信息生成基础行程,并标注【天气数据获取失败,行程未结合天气调整】; 2. `publicAttractionApi`调用失败:降级使用模型内置知识库推荐景点; 3. API返回空景点列表:推荐该城市热门地标,备注“API未返回匹配偏好景点,使用通用推荐”; 4. 用户要求8天及以上行程:提示本技能支持2~7天规划,询问是否调整天数。 ## 六、边界约束 - 本技能只做行程规划,不预订机票、酒店、门票; - 不生成高危、违规出行建议; - 外网API仅做只读查询,禁止提交任何写入类请求; - 若API返回信息冲突,以景点API信息为主。

配套文件 1:references/travel_tips.md

# 通用出行贴士 1. 热门景点建议提前线上预约; 2. 山区景点注意防晒防滑; 3. 博物馆、展馆周一常闭馆; 4. 节假日景点人流量大,建议早出发。

配套文件 2:assets/trip_template.md

# {{city}} {{days}}日游行程方案 > 偏好:{{preference}} > 天气参考:{{weather_info}} ## 每日行程 {{daily_plan}} ## 出行小贴士 {{travel_tips}}
5.4 部署加载
  1. 将整个trip-planner文件夹,放到 Agent 的 skills 根目录;
  2. Agent 自动扫描目录,仅读取 SKILL.md 顶部 YAML 元数据,加入技能清单(此时不加载全文,符合渐进式加载机制);
  3. 修改 SKILL.md 或配套文件,无需重启 Agent,热更新即时生效。
5.5 测试验证

用户提问:帮我规划去成都 4日游,自然风光偏好,对照第三章的 5 阶段执行流程完整验证。skill 输出结果如下:

成都 4 日游行程方案

偏好:自然风光天气参考:全程小雨/阵雨为主(19~28℃),无晴天窗口;9/26 都江堰降水最低仅 25%,为最佳户外日;西岭雪山 4 天降水概率 100%(9~16℃)故排除

每日行程

Day 1|9/23(周三)成都市区 · 雨 63% —— 室内为主

  • 上午:大熊猫繁育研究基地(熊猫晨间活跃,建议 7:30 前入园)
  • 下午:成都博物馆 / 金沙遗址博物馆(雨天转室内)
  • 傍晚:人民公园鹤鸣茶社喝盖碗茶 → 晚上宽窄巷子小吃

Day 2|9/24(周四)都江堰 · 小雨 45% —— 世界遗产 + 古城夜

  • 都江堰景区:鱼嘴 → 飞沙堰 → 宝瓶口 → 安澜索桥 → 二王庙
  • 下午:灌县古城、西街;晚上:**南桥「蓝眼泪」**夜景

Day 3|9/25(周五)青城山前山 · 小雨 45% —— 雨中更「幽」

  • 建福宫 → 天师洞 → 上清宫 → 老君阁(建议索道省力)
  • 全程古树、青苔石阶、雾中森林;晚宿泰安古镇

Day 4|9/26(周六)青城山后山 · ☀ 最佳日 25% —— 自然风光核心

  • 小环线徒步:泰安古镇 → 五龙沟 → 又一村 → 翠映湖 → 泰安古镇
  • 溪流瀑布 + 青苔栈道,随手即古风山水大片;下午返蓉

出行小贴士

  1. 热门景点建议提前线上预约(都江堰、青城山门票分开买);
  2. 山区景点注意防晒防滑,青城山后山栈道湿滑务必穿防滑鞋;
  3. 博物馆、展馆周一常闭馆(本次行程已避开);
  4. 节假日景点人流量大,建议早出发;
  5. 山上下温差 3~8℃,带薄外套 + 雨具。

总结

本文围绕 Agent 的 Skill 能力展开,从需求背景出发,讲解 Skill 本质是基于 Markdown 文档的声明式能力封装。然后 拆解了底层按需加载原理、五阶段执行流程,给出标准目录结构与 SKILL.md 文档规范,并通过旅游行程规划案例做完整实战演示。

Skill依靠文档定义工作流与权限,可引用外网公共 API,支持热更新,不用修改 Agent 主体代码。相比传统 Tool,它更适合多步骤业务场景,能跨项目复用,降低业务能力扩展成本,为企业级 Agent 落地提供一套轻量化、可维护的工程化方案。

资料展示:

下面是我整理的AI大模型 学习资料和工具包预览,适合收藏后按主题逐步学习

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询