ai-agent框架spring ai alibaba (三)外部调用II-1 MCP

简介

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

系列内容:

系列(一) 架构 完成
系列(二) 调用
I 工具
II-1 MCP MCP能力,工具,资源,Prompts,sampling,。。。;springboot自动配置;
-2 分布式 MCP
-3 MCP security
III skills 完成
系列(六) RAG
I 知识库,文档读取,分块;嵌入,向量store
检索,增强生成,模块化
II 混合检索,融合重排
系列(三) 模型
I 模型模型,chat模型; chat client,提示词,消息,结构化输出
II advisor组件;chat记忆,会话管理
系列(四) graph 图结构,节点和边;StateGraph,CompiledGraph;图执行
系列(五) I agent,ReactAgent;另外FlowAgain,A2A agent放在MAS
II 钩子和拦截器;上下文工程
系列(七) MAS
I FlowAgent,sub agent,agent tool;handoffs模式,toolcalling模式;
II A2A,分布式agent;agent集群,AP2AP
III 集成agentscope-java,agentic模式,消息hub
系列(八) 模型评估和观测
系列(九) agent管理平台(admin) agent发布,列表,提示词管理,会话管理,skill管理,MCP服务管理;评估;观测
其他 多模态

本文分析外部调用II-1 MCP,另外,II-2 分布式MCP,II-3 MCP security

based spring ai aliba ba v1.1.2.2,spring ai v1.1.2,MCP sdk 0.17.0

关键词

缩写

spring ai缩写sa

spring ai alibaba 本文缩写saa

参考资料

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

https://docs.spring.io/spring-ai/reference/index.html spring ai官方文档

组件视图

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

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

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

外部调用(calling) 调用可能是agent发展演变最快的部分,最初的工具,到mcp,最近的CLI,skills

RAG 检索增强生成

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

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

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

外部调用

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

MCP-sdk MCP的实现,包括连接管理,会话和传输协议,能力(资源,工具等),本文不分析MCP原理源码,重点放在sa/saa集成MCP,saa分布式MCP

MCP介绍

本节介绍MCP

上图sa文档MCP的描述,3个关键词,MCP是**++ai model++** 调用**++工具++** ++和资源++ 的**++标准协议++** ,MCP是ai model与外部交互的桥梁

MCP能力(Capabilities)

MCP规范定义MCP的能力,Tools是主要能力,其他能力有client侧,有server侧的

server侧:

Tools,定义可执行的函数,是目标本身,让 AI 做事情(如,查天气、发邮件、写文件)。

Resources,提供可读取的数据 ,Tool的"原材料"或"背景知识"。 执行Tool前,通过Resource了解当前状态、配置、文档或待处理的数据。

Prompts, 提供预定义的提示词模板,教AI正确使用Tool。避免 AI 自己乱编调用方式,提供最佳实践和上下文示例。

Completion,自动补全 能力,允许服务器为 Prompts 和 Resources 的参数提供实时的、上下文感知的输入建议

client侧:

Elicitation,大模型反向询问client,获取用户信息

Roots,client 告诉server " 用户的工作目录在哪" ,方面后续server 获取client 的文件数据

Sampling, 允许Tool在执行过程中请求AI生成内容,让Tool 拥有"内省"或"补全"能力。一个复杂的Tool执行中,需要 AI 进行推理、总结或决策时,可以通过Sampling临时"借用"客户端的 LLM 来完成。

Notifications **,**变更通知能力,client和server变更互相实时通知

总结:

MCP Tools 为中心,其他的能力为完成工具调用设置,要么是给大模型工具使用的资料 (Resources,Prompts) ,告诉大模型工具怎样使用,要么 server 工具调用中向 client 询问信息 **(**Sampling,Elicitation)

skills 对比, skills 让大模型做好任务, MCP 让大模型用好工具,两者可以互替

MCP工具

MCP工具,sa使用ToolCallback/ToolCallbackProvider组件封装,后续以工具管理和调用,共享工具调用的运行环境

上图MCP工具类图

SyncMcpToolCallbackProvider 接收McpSyncClient集为参数,遍历McpSyncClient集,每个McpSyncClient可带多个MCP工具(MCP.Tool类),每个MCP.Tool封装为SyncMcpToolCallback

SyncMcpToolCallback ToolCallback实例,工具调用类,引用McpSyncClient调用MCP .Tool

McpClient.SyncSpec SyncSpec是McpClient的builder,可设置多种事件消费者,监听能力的变更其中有Tool变更

ApplicationListener /McpToolsChangedEvent SyncMcpToolCallbackProvider 实现Tool 变更监听,使用spring 的事件机制,监听MCP 工具的变更,即上节的Notifications 能力,重刷一遍McpSyncClient集合,构建新的SyncMcpToolCallback

下面分析MCP集成,springboot自动配置,

构建SyncMcpToolCallbackProvider/SyncMcpToolCallback

MCP集成

本节分析sa的MCP集成,spring boot自动配置,分java配置和注解配置两部分,其中,java配置构建ToolCallback,注解配置负责MCP能力构建,client侧的McpSampling, McpElicitation, McpProgress等,server侧的McpTool, McpResource, McpPrompt, McpComplete等

MCP client

本节分析MCP client,MCP client运行在AI应用,与MCP sesrver,调用MCP server工具和能力

java配置

上图自动配置Java配置类图,为了展示清晰,Transport有只展示Streamable,只展示同步

McpToolCallbackAutoConfiguration自动配置的C位,自动配置最终目标是构建SyncMcpToolCallbackProvider,

SyncMcpToolCallbackProvider给ai应用提供McpToolCallback,依赖

McpClientAutoConfiguration 构建的McpSyncClient

McpClientAutoConfiguration 负责构建McpSyncClient,依赖McpTransport,通讯传输实现;McpSyncClientConfigurer给用户定制McpSyncClient的组件

McpAsyncClientConfigure/McpSyncClientCustomizer 使用SyncSpec 定制McpSyncClient,上一节介绍的设置MCP工具变更事件消费者就是这个组件完成

StreamableHttpHttpClientTransportAutoConfiguration 负责构建McpTransport,使用配置属性(Properties)

注解配置

McpSyncClient的能力是由注解配置负责

上图MCP client注解配置类图

McpClientAnnotationScannerAutoConfiguration 注解自动配置类,职责实例化

ClientMcpSyncHandlersRegistry

ClientMcpSyncHandlersRegistry 扫描spring管理的类型,找出带MCP标注的bean,使用了spring两个机制:

--BeanFactoryPostProcessor 扫描受spring管理的类(带Service注解),构建两个属性对象,allAnnotatedBeans,所有带有MCP注解的bean的名称;capabilitiesPerClient,保存每个client拥有的能力,MCP client用它列举能力

--SmartInitializingSingleton 分析allAnnotatedBeans的MCP注解,使用反射技术封装MCP能力处理器

McpClientAutoConfiguration /McpSyncClient 上节java配置分析过,其中McpSyncClient能力设置是注解配置负责,从ClientMcpSyncHandlersRegistry获取

总结 :client侧的自动配置目标是构建SyncMcpToolCallbackProvider,++java++ ++配置++ 负责,该类提供调用MCP工具的组件McpToolCallback,McpToolCallback依赖McpSyncClient,也是**++java++** ++配置++ 负责,++注解配置++负责McpSyncClient能力handler

MCP server

上节分析MCP client侧自动配置,server侧"套路"类似,server侧的配置最终目的是构建Mcp Server,++java++ ++配置++ 负责,而**++注解配置++**负责初始化Mcp Server的能力

上图 MCP server的自动配置图1,负责构建McpSyncServer

McpServerAutoConfiguration 负责构建McpSyncServer,依赖各种能力Specification

McpSyncServer 负责通讯,处理能力请求

能力Specification 可以理解为药方,构建能力需要的属性都在里面,McpSyncServer用来构建能力对象

ServerMcpAnnotatedBeans 这对象在这里只是new了,里面装着以注解类型分组的bean,用来构建能力Specification,下面分析

能力Specification怎么来的,下面继续分析

上图 MCP server的自动配置图2,负责构建各种能力Specification

McpServerSpecificationFactoryAutoConfiguration 能力Specification构建在这个自动配置

SyncMcpAnnotationProviders 该对象的定义了各种能力Specification的实例方法(@Bean),以tool能力规格实例方法toolSpecs为例

SpringAiSyncToolProvider 构建tool能力规格的对象,从ServerMcpAnnotatedBeans的beansByAnnotation获取带标注@MCPTool的bean,通过反射获取数据,构建tool能力规格对象 SyncToolSpecification

最后,看看ServerMcpAnnotatedBeans的beansByAnnotation是怎么获得的

上图 MCP server的自动配置图3,负责beansByAnnotation的获取

McpServerAnnotationScannerAutoConfiguration 负责注解扫描,设定了扫描的注解

ServerAnnotatedMethodBeanPostProcessor 利用spring的机制BeanPostProcessor,该机制开发者在 Spring 容器实例化 Bean 之后初始化方法(如 @PostConstruct**、** afterPropertiesSet**、自定义 init-method** )调用之前和之后 ,对 Bean 进行自定义的增强处理,ServerAnnotatedMethodBeanPostProcessor使用了调用后的机制点

AnnotatedMethodDiscovery 扫描BeanPostProcessor送过来的bean,获取bean所有目标注解

ServerMcpAnnotatedBeans AnnotatedMethodDiscovery扫描回来的注解(集),送个ServerMcpAnnotatedBeans,按注解类型分组bean,得到:

Map<Class<? extends Annotation>, List<Object>> beansByAnnotation,这个也是第二步用来构建能力规格的

web server

MCP server不是web服务,如 tomcat,web服务负责接收和处理web请求,因此,MCP 服务需要引用web服务,本节以webmvc为例分析一下MCP server与web服务的关联

上图是MCP server和web服务集成

MCP server应用引入spring-ai-starter-mcp-server-webmvc,引入tomcat

RouterFunctionMapping/AbstractHandlerMapping spring-mvc负责路由请求的组件,get/post请求交割WebMvcStreamableServerTransportProvider构建的RouterFunction,最终调用McpSyncServer的能力

示例与观测(TBD)

相关推荐
丁劲犇9 小时前
使用TraeAI开发Web页面测试MSYS2 ucrt64 Qt MCP服务器
服务器·前端·c++·qt·mcp
nix.gnehc1 天前
从范式到工程:Plan & Execute + Nacos MCP 构建 AI Agent 的实践之路
人工智能·agent·mcp
porschev1 天前
Hermes Edu Skills 从 170 到 188:一次中文教育 Agent Skill Pack 的工程化升级
agent·ai agent·ai教育·openclaw·hermes agent skills
一条泥憨鱼1 天前
能够让AI做事的“Skill“有什么奥秘
人工智能·ai·agent·rag·skill·mcp
深念Y1 天前
Claude Code 搜索工具失灵,用 MCP + 提示词注入绕过 tavily
网络·搜索引擎·mcp·claudecode·中转站·tavily·搜索服务器
格桑阿sir2 天前
03-大模型智能体开发工程师:主流大模型家族与演进
ai·大模型·llm·openai·agent·ai agent·智能体
TechMoeTiger2 天前
Java + Spring实现Hermes Agent之龙虾、Skills、Mcp和沙箱代码执行环境思路
spring ai·openclaw·龙虾·hermes agent·spring ai skills·服务端龙虾·spring ai 沙箱·code interpreter
Aiden_S.K.2 天前
Hermes Agent快速安装教程(Windows版——WSL2)
ai agent·hermes agent·windows-wsl
爱编程的小新☆2 天前
JAVA实现Manus智能体
java·react·cot·智能体·spring ai·manus·agent loop