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

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/graphagent和图紧密相关,可以认为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变更互相实时通知

总结:

MCPTools为中心,其他的能力为完成工具调用设置,要么是给大模型工具使用的资料(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

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

McpClient.SyncSpecSyncSpec是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之后初始化方法(如@PostConstructafterPropertiesSet、自定义 init-method)调用之前和之后,对 Bean 进行自定义的增强处理,ServerAnnotatedMethodBeanPostProcessor使用了调用后的机制点

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

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

Map<Class<?extendsAnnotation>, 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)

http://www.jsqmd.com/news/886626/

相关文章:

  • P.4文本统计工具
  • HDI 高密度互连板阶数的深度理解
  • 运维必看:CentOS7开机全链路分析+root密码/引导故障急救方案
  • 构建高安全本地智能家居:基于MQTT over TLS与双向认证的实践
  • 2026年老面小笼包面粉怎么挑?五大品牌发酵力与出品表现横评 - 科技焦点
  • 黑盒模型数据最小化合规审计:对抗性攻击视角下的隐私风险度量
  • 炉石传说脚本终极指南:智能自动对战助手完整教程
  • DeepSeek重构模式推荐:为什么92%的团队在RAG升级中选错模式?3个被忽略的上下文耦合指标
  • 别被忽悠了!2026亲测靠谱的AI论文网站|避坑精选版
  • 15事件警报:告警机制的设计案例
  • YOLOv11医院病房医护人员目标检测数据集-579张-doc-nurse--1
  • 02-大模型AI:AI大模型应用中的关键术语解析
  • 做老面小笼包怕翻车?2026五大面粉品牌品控稳定性与口碑实测 - 科技焦点
  • 区块链共识机制基础知识
  • YOLO26涨点改进| TPAMI 2025 | 独家创新首发、注意力改进篇| 引入TMSA泰勒展开多头自注意力新范式,含二次创新多种改进点,助力目标检测、图像分割、遥感目标检测、图像修复任务涨点
  • 【深度解析】AI Coding 模型竞速:从 Claude Mythos 安全编码到 GPT-5.6 传闻,如何落地代码审查智能体
  • Mysql:事务管理(中)
  • 告别Cygwin:在Windows 11的WSL2上轻松部署UCSF DOCK 6.11完整环境
  • 探索Windows 11 LTSC系统商店恢复的模块化解决方案:智能部署实战
  • 从Windows API调用到硬盘读写:一次‘读文件’请求的完整I/O栈之旅(含图解)
  • 股票买卖最佳时机:LeetCode121题解
  • 339商业模式介绍(代码)
  • 2026年老面小笼包用面粉哪家品质更稳:批次稳定性、品控标准与耐发酵表现深度解析 - 科技焦点
  • 程序员的自我修养:链接、装载与库(库)
  • VideoDownloadHelper 插件深度解析:Chrome 视频下载架构设计与技术实现
  • 告别抓瞎调试!手把手教你用格西调试精灵搞定IEC60870-5-102协议测试
  • AI圈神秘领袖Ilya一幅画引爆全网,OpenAI三件大事暗示AGI时代将至?
  • TP、FP、FN、TN 详解
  • 一文吃透Linux防火墙:firewalld+SELinux完整防护实操指南
  • 科华UPS电源全品类汇总:选型与场景适配指南