ai-agent框架spring ai/alibaba原理源码分析(三) 外部调用III-skills 简介spring ai alibaba是java的ai agent框架本系列将深入剖析 Spring AI Alibaba 的源码实现与核心原理不仅指导agent的开发更可以改造框架增加新特性贡献Spring AI Alibaba的发展。系列内容系列(一) 架构系列(二) 调用I 工具II MCP MCP能力工具资源sampling。。。springboot 集成分布式MCPIII skills系列(六) RAG知识库文档读取分块嵌入向量store检索增强生成混合检索融合重排(saa)系列(三) I 模型chat模型; chat client提示词消息结构化转换II advisor组件chat记忆会话管理系列(四) graph节点和边StateGraphCompiledGraph图执行系列(五) I agentReactAgent, AgentLlmNode, AgentToolNode另外FlowAgainA2A agentagent tools放在MASII 钩子和拦截器上下文工程系列(七) MAS I FlowAgent子agentagent toolhandoffs模式toolcalling模式II A2A分布式agent集群III 集成agentscopeagentic模式消息hub系列(八) 模型评估和观测系列(九) agent管理平台(admin) agent发布列表提示词管理会话管理skill管理评估观测本文分析外部调用III skillsbased spring ai alibaba v1.1.2.2spring ai v1.1.2关键词skills缩写spring ai缩写saspring ai alibaba本文缩写saa参考资料https://java2ai.com/docs/overview spring ai alibaba官网文档组件视图上图是saa原理源码分析场景视图每个包对应着saa/sa组件或特性是本文分析的目录model大模型的封装模型包括Chat嵌入audioimage等类型其中chat模型包括advisor组件提示词记忆等agent/graphagent和图紧密相关可以认为agent是一种既定的”图”形开发人员可以使用graph低层api直接构建graph也可以使用agent获得既定的图形简化和加快agent的开发调用(calling)调用包括工具mcp skillsCLIRAGMAS多个agent协同工作agent集群/蜂群studio简易的agent管理工具嵌入到agent带有agent面板列表agent提供chat界面用于调试agent是开发agent的便利工具admin管理台 agent的发布列表管理执行提示词工程评估和数据集观测本文分析的skill属于外部调用场景调用如果说agent是一个人大模型是大脑调用是手脚执行动作干实事调用在不断发展演变中目前已有工具MCPskills等多种方式Skillsskills是目前最新的调用方式可以认为skills是任务的操作手册大模型学习skill手册完成完整的功能skill利用现有工具通过提示词大模型便完成新功能作为对比使用工具MCP需要开发。skilll渐进式披露机制减少提示词的规模。同时我们也看到skill的问题调试工作比较复杂没有断点目前只有依赖可观测大模型理解是不是正确的开展的工作是不是正确的。saa支持skillssa还没有支持设计原理本节分析saa的skill类设计工作的原理上图skills及其相关设计类图SkillsAgentHook负责初始化SkillsInterceptor给SkillsInterceptor设置SkillRegistry向agent框架提供该拦截器负责初始化ReadSkillTool向agent框架提供ReadSkillToolSkillsInterceptor负责生成skills摘要说明给model请求增加skills用到的工具GroupedTools 以skill分组的工具这是渐进披露的一部分提示词只包含skills需要的工具SkillRegistryskills注册器拥有SystemPromptTemplate用于生成skills摘要说明最后合并到系统提示词ReadSkillTool工具BiFunction实现返回String也就是skills的详细说明关于groupedToolsgroupedTools是渐进披露的一部分提示词只写入skill使用到的工具但目前需要手动设置Skill.md没有标准的属性存放skill使用的工具。据了解目前社区有各自的解决方案个人觉得Skill.md增加标准字段allowed-tools是比较好的方案。skill注册本节分析skill注册上图skills注册类图SkillMetadataskill的元素据包括名称说明详细内容等其中source有两种user, projectskills注册有两个实现ClasspathSkillRegistry和FileSystemSkillRegistry两者都是从文件/文件夹载入skills前者是jar包后者本地文件夹SkillRegistry实现提供SystemPromptTemplate用于生成skills详细说明skill描述大模型是通过skill描述学习skillskill描述可分为摘要描述和完整描述这也是渐进式披露的核心skill摘要用户输入查询调用agentagent提取skills的名字和描述写入系统提示词skills的名字和描述内容少不会让提示词爆炸式增长完整的描述通常内容多SkillsInterceptor.interceptModelbuildSkillsPrompt方法拼接skills的名称描述成字符串buildSkillsPromptskills_list, skills_load_instructins为系统提示词模板的占位符大模型怎么学会skillsagent偷偷的通过系统提示词模板塞了一份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注册类SkillsAgentHookReactAgent上图是示例执行类应用启动后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注册了两个skillsskills的摘要合并到系统提示词上图红框是上面提到的系统提示词模板的skills列表大模型返回tool callAgentToolNode大模型返回toolCallsread_skill参数 {skill_name: sales_analytics}*ChatModel实现类(如DashScopeChatModel)也负责处理工具调用默认开关设为否返回到AgentToolNode处理系列(二)-agent/graph详细分析调用read_skill大模型调用read_skill工具获取skill详细说明生成sql最后返回大模型的思路和生成sql总结示例比较简单但也足够清晰描述skills的工作原理渐进式披露原理。skills是用户描述好任务剩下的大模型理解和执行从中看到AGI的影子只需要基本工具任务描述好大模型可以学会新的功能。另外我们也提到skills的正确性依赖开发人员的描述和大模型的理解在两者中间开发人员使用可观测调整和迭代skills。