当前位置: 首页 > news >正文

Spring AI Agentic 模式(第1部分):Agent Skills——模块化、可复用的能力

原文链接:https://spring.io/blog/2026/01/13/spring-ai-generic-agent-skills
这是一篇翻译的文章,其中部分内容可能不是非常准确,如果有提出来。或者直接对照原文

Agent Skills 是包含指令、脚本和资源的模块化文件夹,AI Agent 可以按需发现和加载它们。相比于将知识硬编码到提示词中或为每个任务创建专门的工具,Skills 提供了一种灵活的方式来扩展 Agent 的能力。

Spring AI 的实现将 Agent Skills 带到了 Java 生态系统中,确保了 LLM 的可移植性——只需定义一次技能,即可在 OpenAI、Anthropic、Google Gemini 或任何其他受支持的模型中使用。

这是我们 Spring AI Agentic 模式系列的第一篇文章。本系列探讨 spring-ai-agent-utils 工具包——这是一个受 Claude Code 启发、为 Spring AI 提供的大量 Agentic 模式集合。我们将涵盖 Agent Skills(本文)、Task Management、用于交互式工作流的 AskUserQuestion,以及用于复杂多 Agent 系统的 Hierarchical Sub-Agents。

🚀 想直接上手?跳到"入门指南"部分。

让我们从 Agent Skills 开始——它是组织 Agent 知识的基础。

什么是 Agent Skills?

Agent Skills 是打包为带有 YAML frontmatter 的 Markdown 文件的模块化能力。每个技能都是一个包含 SKILL.md 文件的文件夹,该文件包含元数据(至少包括名称和描述)以及告诉 Agent 如何执行特定任务的指令。Skills 还可以捆绑脚本、模板和参考资料。frontmatter 支持简单的字符串值和复杂的 YAML 结构(列表、嵌套对象),适用于高级用例。

my-skill/ ├── SKILL.md # 必需:指令 + 元数据 ├── scripts/ # 可选:可执行代码 ├── references/ # 可选:文档 └── assets/ # 可选:模板、资源

Skills 使用渐进式披露来高效管理上下文:

  • 发现:启动时,Agent 只加载每个可用技能的名称和描述,刚好足够知道何时可能相关。
  • 激活:当任务匹配技能的描述时,Agent 将完整的 SKILL.md 指令读入上下文。
  • 执行:Agent 遵循指令,可选地按需加载引用的文件或执行捆绑的代码。

这种方法允许你注册数百个技能,同时保持上下文窗口的精简。

💡提示:在官方规范中了解更多关于 Agent Skills 的信息。

为什么在 Spring AI 中使用 Agent Skills

无缝集成- 只需注册几个工具,即可将 Agent Skills 添加到现有的 Spring AI 应用程序中——无需架构更改。

可移植性和模型无关性 - 无供应商锁定- 与绑定到特定 LLM 平台的实现不同,此 Spring AI 实现适用于许多 LLM 提供商,让你无需重写代码或技能即可切换模型。

可复用和可组合- Skills 可以在项目间共享,与代码一起进行版本控制,组合以创建复杂的工作流,并通过辅助脚本和参考资料进行扩展。Spring AI Skills 无缝支持任何现有的 Claude Code Skills。

相关的 Spring AI 工具:Agent Skills 与其他基于 Spring AI 工具的功能配合良好,如用于高效工具选择的 Dynamic Tool Discovery 和用于在技能执行期间捕获 LLM 推理的 Tool Argument Augmentation。

Spring AI Skills 如何工作

Spring AI 使用基于工具的集成方法,实现允许任何 LLM 触发技能和访问捆绑资产的工具。该实现紧密遵循 Claude Code 针对 Skills、Bash 和 Read 的工具规范。

核心工具集包括:SkillsTool(必需)、ShellTools(可选)和 FileSystemTools(可选)。SkillsTool 提供了一个 Skill 函数,使 AI 模型能够按需发现和加载指定的技能,与 FileSystemTools(用于读取参考文件)和 ShellTools(用于执行辅助脚本)协同工作。

Skills 通过三步流程运作:

1. 发现(启动时)

在初始化期间,SkillsTool 扫描配置的技能目录(如.claude/skills/),并解析每个 SKILL.md 文件中的 YAML frontmatter。它提取namedescription字段,构建一个轻量级的技能注册表,直接嵌入到 Skill 工具的描述中,使其对 LLM 可见而不消耗对话上下文。

2. 语义匹配(对话期间)

当用户提出请求时,LLM 检查嵌入在工具定义中的技能描述。如果 LLM 确定用户请求在语义上与某个技能的描述匹配,它将以技能名称作为参数调用 Skill 工具。

3. 执行(技能调用时)

当 Skill 工具被调用时,SkillsTool 从磁盘加载完整的 SKILL.md 内容,并将其连同技能的基础目录路径一起返回给 LLM。然后 LLM 遵循技能内容中的指令。如果技能引用额外的文件或辅助脚本,LLM 按需使用 FileSystemTools 的 Read 函数或 ShellTools 的 Bash 函数来访问它们。

Skills 实战

本节通过实际示例演示技能如何工作。

示例:带有参考资料和脚本的 Skills

第 3 步的按需加载在技能捆绑额外资源时变得强大。Skills 可以包含带有补充指令的参考文件和用于数据处理的可执行脚本——所有这些仅在需要时加载。

以下来自my-skill技能的示例,包含一个 YouTube 字幕提取助手和补充的research_methodology.md指令:

技能目录结构:

.claude/skills/my-skill/ ├── SKILL.md ├── scripts/ │ └── get_youtube_transcript.py └── research_methodology.md

在 SKILL.md 中:

... **如果概念不熟悉或需要研究:** 加载 `research_methodology.md` 获取详细指导。 **如果用户提供 YouTube 视频:** 调用 `uv run scripts/get_youtube_transcript.py <video_url_or_id>` 获取视频字幕。 ...

当用户问"解释这个视频中的概念:https://youtube.com/watch?v=abc123。遵循研究方法论"时,AI:

  • 调用my-skill技能并加载其 SKILL.md 内容
  • 识别出需要研究方法论,使用 Read 加载research_methodology.md
  • 识别出 YouTube URL,使用 Bash 通过 ShellTools 执行辅助脚本
  • 使用视频字幕按照研究方法论指令解释概念

脚本代码永远不会进入上下文窗口——只有输出会,这使得这种方法具有极高的令牌效率。

💡演示:查看实现此工作流的 Skills-Demo。

⚠️安全提示:脚本直接在本地机器上执行,没有沙箱。你需要预装任何所需的运行时(Python、Node.js 等)。为了更安全的操作,请考虑在容器中运行你的 Agentic 应用程序。

入门指南

准备好在 Spring AI 项目中添加 Agent Skills 了吗?

1. 添加依赖:

<dependency><groupId>org.springaicommunity</groupId><artifactId>spring-ai-agent-utils</artifactId><version>0.4.2</version></dependency>

注意:对于最新的稳定版本,请查看 GitHub releases 页面。

注意:你需要 Spring-AI 2.0.0-M2+。

2. 配置你的 Agent:

@SpringBootApplicationpublicclassApplication{@BeanCommandLineRunnerdemo(ChatClient.BuilderchatClientBuilder){returnargs->{ChatClientchatClient=chatClientBuilder.defaultToolCallbacks(SkillsTool.builder().addSkillsDirectory(".claude/skills").build()).defaultTools(FileSystemTools.builder().build()).defaultTools(ShellTools.builder().build()).build();Stringresponse=chatClient.prompt().user("你的任务在这里").call().content();};}}

💡生产环境提示:对于打包的应用程序,你可以使用 Spring Resources 从 classpath 加载技能:

.defaultToolCallbacks(SkillsTool.builder().addSkillsResource(resourceLoader.getResource("classpath:.claude/skills")).build())

这在将技能作为 JAR/WAR 部署的一部分分发时特别有用。

3. 创建你的第一个技能:

mkdir-p.claude/skills/code-reviewercat>.claude/skills/code-reviewer/SKILL.md<<'EOF' --- name: code-reviewer description: 审查 Java 代码的最佳实践、安全问题和 Spring Framework 约定。当用户要求审查、分析或审计代码时使用。 --- # 代码审查器 ## 指令 审查代码时: 1. 检查安全漏洞(SQL 注入、XSS 等) 2. 验证 Spring Boot 最佳实践(正确使用 @Service、@Repository 等) 3. 查找潜在的空指针异常 4. 提出可读性和可维护性的改进建议 5. 提供带有代码示例的具体行级反馈 EOF

4. 使用带有技能配置的 Agent:

Stringresponse=chatClient.prompt().user("审查这个控制器类的最佳实践:"+"src/main/java/com/example/UserController.java").call().content();System.out.println(response);

当你运行这段代码时,LLM 将:

  • 将"Review this controller"与code-reviewer技能的描述匹配
  • 调用 Skill 工具从 SKILL.md 加载完整指令
  • 使用 Read 工具(来自 FileSystemTools)访问UserController.java文件
  • 遵循审查指令并提供详细反馈

技能的指令指导 LLM 的行为,而无需你将审查逻辑硬编码到提示词中——只需更新技能文件即可改变审查的工作方式。

当前限制

虽然 Spring AI Agent Skills 实现功能强大且灵活,但需要注意一些当前限制:

脚本执行安全- 通过 ShellTools 执行的脚本直接在本地机器上运行,没有沙箱。这意味着可能不安全的代码可以访问你的文件系统、网络或系统资源。使用前务必审查技能脚本,尤其是来自第三方的脚本。考虑在容器化环境(Docker、Kubernetes)中运行你的 Agentic 应用程序以限制风险暴露。

无人参与审批- 目前没有内置机制在执行技能或脚本前要求人工批准。LLM 可以自动调用任何注册的技能并执行任何捆绑的脚本。对于处理敏感操作的生产环境,你可能需要使用 Spring AI 的工具回调机制实现自定义审批工作流,例如,一个 ToolCallback 包装器。

有限的技能版本控制- 目前没有内置的技能版本控制系统。如果你更新了技能的行为,所有使用该技能的应用程序将立即使用新版本。对于生产部署,考虑通过目录结构(如.claude/skills/v1/.claude/skills/v2/)实现你自己的版本控制策略。

相关:Anthropic 的原生 Skills API

Spring AI 还与 Anthropic 的原生 Skills API 集成,它提供了一种不同的方法:

  • Skills 在 Anthropic 的沙箱云容器中运行(无网络访问,仅预装包)
  • 预构建的文档生成:Excel、PowerPoint、Word、PDF
  • Skills 上传到 Anthropic 的服务器并在你的工作区中共享
  • 需要 Claude 模型(Sonnet 4、Sonnet 4.5、Opus 4)

关键区别:Anthropic Skills 在 Anthropic 的云基础设施中运行;通用 Agent Skills 在你的环境中运行。

当你需要安全的沙箱执行或预构建的文档生成能力时,使用 Anthropic 的原生 Skills。当你需要 LLM 可移植性、本地资源访问,或希望将技能与应用程序捆绑时,使用通用 Agent Skills。

可以同时使用两者吗?可以。你可以在同一个应用程序中使用 Anthropic 的原生 Skills 进行文档生成,同时使用通用 Agent Skills 处理其他可移植能力。它们服务于不同的目的,可以相互补充。

详见 Spring AI 中的 Anthropic Skills 文章。

结论

Agent Skills 为 Spring AI 应用程序带来了模块化、可复用的能力,且没有供应商锁定。通过按需提供领域知识,你可以在不更改代码的情况下更新 Agent 行为,在项目间共享技能,并在 LLM 提供商之间无缝切换。

spring-ai-agent-utils 实现通过简单、基于工具的方法,使 Java 开发者能够轻松使用这种模式。无论是构建编码助手、文档生成器还是领域特定的 Agent,Skills 都为组织 Agent 知识提供了可扩展的基础。

这仅仅是个开始。本系列的其他文章将深入探讨更高级的 Agentic 模式:

系列链接:

  • AskUserQuestionTool - Agent 在执行过程中收集用户偏好的交互式工作流
  • TodoWriteTool - 透明、可追踪的 Agent 工作流,支持多步骤任务管理
  • Subagent Orchestration - 具有专用上下文窗口的分层多 Agent 架构
  • A2A Integration - 使用 Agent2Agent 协议构建可互操作的 Agent
  • Subagent Extension Framework(即将推出)- 协议无关的 Agent 编排(A2A、MCP、自定义)

从示例项目开始探索,或深入了解 Agent Skills 规范以了解更多信息。

资源

Spring AI Agent Utils 工具包

  • GitHub 仓库:spring-ai-agent-utils
  • 完整文档:README.md
  • 工具文档 - 本文涉及的工具:SkillsTool、FileSystemTools、ShellTools
  • Spring AI 文档:docs.spring.io/spring-ai

示例项目

  • skills-demo - 专注的技能演示(本文)
  • code-agent-demo - 完整的工具包集成(第 2-3 部分)
  • subagent-demo - 分层 Agent 和 A2A 集成(第 4-5 部分)

Agent Skills

  • 规范:agentskills.io
  • Claude Code 文档:code.claude.com/docs

系列链接

  • 第 1 部分:Agent Skills(本文)- 模块化、可复用的能力
  • 第 2 部分:AskUserQuestionTool - 交互式工作流
  • 第 3 部分:TodoWriteTool - 结构化规划
  • 第 4 部分:Subagent Orchestration - 分层 Agent 架构
  • 第 5 部分:A2A Integration - 使用 Agent2Agent 协议构建可互操作的 Agent
  • 即将推出:Subagent Extension Framework(即将推出)- 协议无关的 Agent 编排

相关的 Spring AI 博客

  • Dynamic Tool Discovery - 实现 34-64% 的令牌节省
  • Tool Argument Augmentation - 在工具执行期间捕获 LLM 推理
http://www.jsqmd.com/news/1145270/

相关文章:

  • web作业10
  • 房地产顾问如何突破单一业务模式转型为家族资产配置顾问?
  • 还在为 API 调用踩坑?这款中转站帮你省成本、提效率、保稳定
  • ETCD 集群写满导致集群退出
  • 多通道数据采集仪
  • 在家也能安全连内网数据库:MariaDB监控与公网访问实战
  • AI核心组件:从感知到行动,打造超级智能体!
  • Vite原理与Webpack对比
  • 两年的AI说删就删!豆包千问集体下线智能体,大厂都在偷偷换赛道了
  • 茅台酱香酒旗舰店中的迎宾酒官方保真吗——渠道解析+鉴真指南
  • 量化派:构建物理AI通用技术底座,开启“卖能力”产业拐点
  • WebToEpub完整教程:三步将网页小说转换为电子书
  • Python正则表达式完整教程:从入门到实战,解决文本匹配所有难题
  • 看完Chronos后,这个0.3B的小模型居然超过π0.5六倍!
  • 2026最新企业低代码软件盘点:CRM、ERP、流程管理都能做
  • Vatee:把风控思路做到位——视角拆解与提示整理
  • 2026年7月中旬AI工具速报:ChatGPT推出项目模板,Claude上线批量处理,Gemini支持代码仓库分析
  • 计算机毕业设计之教材管理系统的设计与实现
  • 【2027最新】基于SpringBoot+Vue的高校实习管理系统管理系统源码+MyBatis+MySQL
  • Python正则如何处理带换行符的多行文本|解决匹配空白、提取失败问题
  • 郴州夜宵好去处实测测评|理性避坑选型指南
  • Carina:Java 写的自动化测试框架,把测试那几层全统一了
  • GHelper完整指南:用轻量级控制工具彻底解放华硕笔记本性能
  • 酒水品牌策划设计公司怎么选?从东莞视维(SIVIBRAND)的酒水案例看专业分工
  • 软考高级系统架构师之Spring AOP篇
  • Python开发中的项目结构:如何组织代码更清晰
  • 单目稠密SLAM多机协同系统:面向GPS拒止环境的鲁棒实时建图
  • 从 Spring Boot 到 NestJS:项目快速上手指南
  • 2026微信商城搭建有哪些平台
  • 计算机毕业设计之基于web的曙光社区生鲜团购平台