ai-agent框架spring ai/alibaba原理源码分析(三) 外部调用III-skills

简介

spring ai alibaba是java的ai agent框架,本系列将深入剖析 Spring AI Alibaba 的源码实现与核心原理,不仅指导agent的开发,更可以改造框架,增加新特性,贡献Spring AI Alibaba的发展。

系列内容:

系列( 一) 架构 完成

系列( 二) 模型,chat 模型,提示词,消息,结构化转换,chat 记忆;chat client ,advisor 组件 ß 本文

系列( 三) 外部调用 工具/skills ,MCP ,nacos

系列( 四) graph :StateGraph ,CompiledGraph ;图执行,节点和边

系列( 五) agent ,ReactAgent ;钩子和拦截器,上下文工程

系列( 六) RAG 知识库,包括文档读取,分块,嵌入,向量store ;检索增强生成

系列( 七) multi agent ,FlowAgent ,a2a agent ,handoffs 模式,toolcalling 模式;agent team ,调度,容错

agent 管理运行平台,spring ai alibaba admin ,agent 发布,管理,执行,提示词管理,评估,观测

本文分析外部调用III skills

based spring ai alibaba v1.1.2.2,spring ai v1.1.2

关键词

skills

缩写

spring ai缩写sa

spring ai alibaba 本文缩写saa

参考资料

https://java2ai.com/docs/overview spring ai alibaba官网文档

组件视图

上图是saa原理源码分析场景视图,每个包对应着saa/sa组件或特性,是本文分析的目录

model 大模型的封装,模型包括Chat,嵌入,audio,image等类型,其中chat模型包括,advisor组件,提示词,记忆等

agent/graph agent和图紧密相关,可以认为agent是一种既定的"图"形,开发人员可以使用graph低层api直接构建graph,也可以使用agent获得既定的图形,简化和加快agent的开发

调用(calling) 调用包括工具,mcp, skills,CLI,

RAG

MAS 多个agent协同工作,每个agent有独立职能

studio 简易的agent管理工具,嵌入到agent,带有agent面板,列表agent;提供chat界面,用于调试agent,是开发agent的便利工具

admin 管理台, agent的发布,列表,管理,执行;提示词工程,评估和数据集,观测

本文分析的skill属于外部调用场景

调用

如果说agent是一个人,大模型是大脑,调用是手脚,执行动作干实事,调用在不断发展演变中,目前已有工具,MCP,skills等多种方式

Skills

skills是目前最新的调用方式,可以认为skills是任务的操作手册,大模型学习skill手册实现完整的功能,skill利用现有工具,通过提示词,大模型便完成新功能,作为对比,使用工具,MCP,需要开发。skilll渐进式披露机制,减少提示词的规模。

同时,我们也看到skill的问题,调试工作比较复杂,没有断点,目前只有依赖可观测,大模型理解是不是正确的,开展的工作是不是正确的。

saa支持skills,sa还没有支持

设计原理

本节分析saa的skill类设计,工作的原理

上图skills及其相关设计类图

SkillsAgentHook 负责初始化SkillsInterceptor,给SkillsInterceptor设置SkillRegistry,向agent框架提供该拦截器;负责初始化ReadSkillTool,向agent框架提供ReadSkillTool

SkillsInterceptor 负责生成skills摘要说明,给model 请求增加skills用到的工具

GroupedTools 以skill分组的工具,这是渐进披露的一部分,提示词只包含skills需要的工具

SkillRegistry skills注册器,拥有SystemPromptTemplate,用于生成skills摘要说明,最后合并到系统提示词

ReadSkillTool 工具,BiFunction实现,返回String,也就是skills的详细说明

关于groupedTools

groupedTools是渐进披露的一部分,提示词只写入skill使用到的工具,但目前需要手动设置,Skill.md没有标准的属性存放skill使用的工具。据了解,目前社区有各自的解决方案,个人觉得Skill.md增加标准字段allowed-tools是比较好的方案。

skill注册

本节分析skill注册

上图skills注册类图

SkillMetadata skill的元素据,包括名称,说明,详细内容等,其中source有两种,user, project

skills 注册有两个实现,ClasspathSkillRegistry和FileSystemSkillRegistry,两者都是从文件/文件夹载入skills,前者是jar包,后者本地文件夹

SkillRegistry实现提供SystemPromptTemplate,用于生成skills详细说明,

skill描述

大模型是通过skill描述学习skill,skill描述可分为摘要描述和完整描述,这也是渐进式披露的核心

skill摘要

用户输入查询,调用agent,agent提取skills的名字和描述,写入系统提示词,skills的名字和描述内容少,不会让提示词爆炸式增长,完整的描述通常内容多

SkillsInterceptor.interceptModel

buildSkillsPrompt方法拼接skills的名称,描述成字符串

buildSkillsPrompt

skills_list, skills_load_instructins为系统提示词模板的占位符

大模型怎么学会skills

agent偷偷的通过系统提示词模板塞了一份skills说明给大模型。

skills_list skill的名称列表,解释了read_skill使用,skills_load_instructins是skills文件位置信息,没有使用

skill详细说明

大模型从系统提示词获得skills摘要,若用户问题适用某个skill,大模型调用`read_skill`工具,即类设计介绍的ReadSkillTool,获取skill的详细说明,如下图

ReadSkillTool

大模型获得skill使用详细的使用指南,学习skill

示例分析

本节分析skill示例代码,saa的skills example,类似text2sql的示例,用户输入分析需求,返回sql

示例结构

本节分析示例结构

上图是示例的结构

上图配置类,声明skills注册类,SkillsAgentHook,ReactAgent

上图是示例执行类,应用启动后runner直接调起测试,查询:

"Write a SQL query to find all customers who made orders over $1000 in the last month"

客户销售查询,应用集成了studio,可以使用chat ui测试

上图sales_analytics Skill.md示例,可以预见,runner的请求,大模型使用sales_analytics skill

观测示例运行

本节使用ide的debug,观测示例skills的运行

构建skills摘要提示词

skills注册了两个skills

skills的摘要合并到系统提示词,上图红框是上面提到的系统提示词模板的skills列表

大模型返回tool call

AgentToolNode

大模型返回toolCalls,read_skill,参数 {"skill_name": "sales_analytics"}

*ChatModel实现类(如, DashScopeChatModel**)也负责处理工具调用,默认开关设为否,来到AgentToolNode** 处理,系列 ( )-agent/graph 详细分析

调用read_skill

大模型调用read_skill工具,获取skill详细说明

生成sql

最后返回大模型的思路和生成sql

总结:示例比较简单,但也足够清晰描述skills的工作原理,渐进式披露原理。skills是用户描述好任务,剩下的大模型理解和执行,从中看到AGI的影子,只需要基本工具,任务描述好,大模型可以学会新的功能。另外,我们也提到,skills的正确性依赖开发人员的描述和大模型的理解,在两者中间,开发人员使用可观测调整和迭代skills。

相关推荐
且去填词4 小时前
Claude Code Skills 实践:从提示词到专业化 AI 开发工作流
人工智能·ai编程·开发·claude code·skills
XD7429716365 小时前
科技早报晚报|2026年5月12日:GUI Agent、编程会话工作台与 npm 安装门禁,今晚更值得做的 3 个技术机会
前端·科技·npm·供应链安全·ai agent·开发者工具
夜影风6 小时前
AI Agent初探:让LLM自己决定该调用什么工具
人工智能·langchain·ai agent
fly_over7 小时前
AI Agent 开发实战教程(二):Prompt 工程与工具调用
开发语言·python·langchain·prompt·ai编程·ai agent
XD7429716361 天前
科技早报晚报|2026年5月11日:AI 工具链开始从“能用”走向“可治理”,今天更值得二次开发的 3 个机会
人工智能·科技·科技新闻·ai agent·开发者工具
南宫乘风1 天前
从 Prompt 到工程化能力:写好 AI Agent Skill 的实践方法
prompt·skills
qcx231 天前
GenericAgent 源码级拆解——3K 行种子如何长成全系统控制 Agent,Token 消耗仅 1/6
人工智能·prompt·ai agent·工作提效·harness
曲幽1 天前
让FastAPI Agent真正记住你:聊聊会话记忆与持久化存储的落地实践
redis·python·postgresql·fastapi·web·chat·async·session·ai agent
XD7429716361 天前
科技晚报|2026年5月11日:AI 开始接手语音执行、机器支付和搜索分发入口
人工智能·科技·科技新闻·ai agent·科技晚报