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。

相关推荐
doiito18 小时前
【Agent Harness】Gliding Horse 本体论系统设计:给 AI Agent 装上“语义大脑”
ai·rust·架构设计·系统设计·ai agent
doiito2 天前
【Agent Harness】为什么我把 JSON‑LD “编译成 DAG” 后,整个 Agent 平台立刻聪明了
ai·rust·架构设计·系统设计·ai agent
xiezhr2 天前
折腾半小时,终于让AI 能直接帮我写飞书文档了
ai·飞书·ai agent·飞书cli·飞书文档
Super Scraper7 天前
如何批量抓取 TikTok 数据而不被封锁?完整指南
爬虫·ai·自动化·抖音·tiktok·ai agent
DogDaoDao7 天前
【GitHub】CL4R1T4S:AI 系统提示词的透明革命
人工智能·python·ai·大模型·github·ai agent·cl4r1t4s
-星空下无敌7 天前
Skills详解(2万字详细教程),Skills是什么,如何安装并使用Skills
人工智能·ai·提示词·codex·mcp·skills·agent skills
智海观潮8 天前
OpenClaw生态全景解析 - 9大核心工具赋能 AI 自动化落地
ai·agent·skills·ai 自动化·openclaw
海天一色y8 天前
深入理解 Function Calling、MCP 与 Skills:AI Agent 的三层能力架构
人工智能·mcp·skills
Mininglamp_27188 天前
Vibe Coding 之后是 Vibe Operating?
后端·开源·多智能体·ai agent·mano-p
android_cai_niao8 天前
安装Adnroid官方Skills
skill·skills·android cli·android skills·adnroid skill