Spring AI 1.0.0 发布!支持 MCP 很炸裂!! 原创
前几天 Spring AI 迎来了其1.0.0版本的第七个里程碑(Milestone 7)的发布。紧接着下个月,我们将迎来 RC1(Release Candidate 1)版本,随后便是正式版(GA,General Availability)的发布。对于 Java 开发者社区而言,这无疑是一个备受期待的喜讯!
1、Spring AI 框架介绍
Spring AI 是一个用于 AI 工程的应用框架。它的目标是将 Spring 生态系统中的一些设计原则,比如:可移植性和模块化设计,应用到 AI 领域。它还推动在 AI 领域使用简单的 Java 对象(POJOs)作为构建应用程序基础。
简单来说,Spring AI 的核心任务是解决 AI 应用集成的基本挑战:把你的企业数据和 API 与 AI 大模型模型连接起来。
Spring AI 全面采用了模块化的架构设计,如下图所示:
Spring AI 新架构设计主要旨在解决以下4个关键问题:
第一、提供统一抽象,隐藏底层复杂性
无论你使用的是 OpenAI 的 GPT、深度求索的 DeepSeek、谷歌的 Gemini、Anthropic 的 Claude,还是 Hugging Face 上的开源模型,Spring AI 都旨在提供一套统一且可移植的 API,让你能够轻松调用。对于向量数据库,比如:Milvus、Pinecone、Redis、PGVector 等,它同样提供了统一的 API 和查询方法。这样,你的代码就可以更灵活地在不同的 AI 服务和数据库之间切换,不会被某个特定供应商锁定。
第二、简化 AI 应用开发
构建一个稍微复杂的 AI 应用,比如:RAG(检索增强生成),通常需要涉及数据加载、分割、向量化、存储、检索、调用大语言模型(LLM)等多个步骤。Spring AI 提供了 ETL 框架、ChatClient、VectorStore 等组件和抽象,大大简化了这些流程的实现。
第三、广泛支持模型和向量数据库
Spring AI 支持市面上几乎所有主流的大模型提供商(包括聊天模型和图像生成模型)以及向量数据库。这意味着你有非常丰富的选择。
第四、深度集成 Spring 生态
这是 Spring 的强项!Spring AI 提供了各种 Spring Boot Starter,使得配置和集成 AI 模型、向量数据库变得非常简单,遵循“约定优于配置”的原则,即开箱即用,无需复杂的配置。
Github 地址:
https://github.com/spring-projects/spring-ai
2、Spring AI 支持 MCP 实现
第一、Spring AI MCP 介绍
Spring AI 1.0.0-M7 集成了最新的 MCP 参考实现 Java SDK 版本 0.9.0,带来了显著的架构改进。
MCP(模型上下文协议)是一种标准化的协议,它让 AI 大模型能够以一种有组织的方式和外部工具、资源进行互动。它支持多种传输方式,这样在不同的环境下都能灵活使用。
MCP 的 Java 开发包(SDK)提供了这个协议的 Java 版本,让你可以通过同步或异步的方式,和 AI 大模型以及工具进行标准化的互动。
Spring AI 的 MCP 功能是在 MCP Java 开发包的基础上,增加了和 Spring Boot 集成的功能,提供了客户端和服务端的启动器。你可以使用 Spring 的初始化工具来快速搭建支持 MCP 的 AI 应用。
第二、MCP Java 开发包(SDK)架构
MCP 的 Java 实现采用了一个三层架构设计:
- 客户端/服务器层:这一层包括了 MCPClient 和 MCPServer。MCPClient 负责处理客户端的操作,而 MCPServer 负责管理服务器端的协议操作。它们都使用 MCPSession 来管理通信。
- 会话层(McpSession):这一层通过 DefaultMCPSession 的实现来管理通信模式和状态。
- 传输层(McpTransport):这一层负责处理 JSON-RPC 消息的序列化和反序列化,并支持多种传输实现方式。
1.MCP 客户端(MCP Client)
MCP 客户端是MCP(模型上下文协议)架构中的一个关键部分,它的工作是和 MCP 服务器建立和管理连接。它负责客户端的协议操作,包括:
- 和服务器商量使用哪个版本的协议,以确保双方兼容
- 确定服务器有哪些功能可以用
- 发送和接收消息,以及用 JSON-RPC 格式进行交流
- 查找和运行工具
- 访问和管理资源
- 与提示词系统互动
还有一些可选的功能,比如:
- 管理“根”(可能是某种基础设置)
- 支持抽样(可能是随机选择一部分数据进行处理)
- 支持同步和异步操作(同步就是等待操作完成,异步就是不需要等待)
它还支持不同的传输方式,比如:
- 基于标准输入输出的传输,用于不同程序间的通信
- 基于 Java HttpClient 的 SSE 客户端传输
- 基于 WebFlux 的 SSE 客户端传输,用于响应式的 HTTP 数据流
2.MCP 服务器(MCP Server)
MCP 服务器是 MCP 架构中的另一个基础部分,它向客户端提供工具、资源和能力。它负责服务器端的协议操作,包括:
- 实现服务器端的协议操作
a.让客户端可以找到和使用工具
b.用基于 URI 的访问方式管理资源
c.提供和处理提示词模板
d.和客户端商量可以使用哪些功能
e.结构化的日志记录和通知
- 管理多个客户端的连接
- 支持同步和异步的 API
- 它也支持不同的传输实现方式,比如:
a.基于标准输入输出的传输,用于不同程序间的通信
b.基于 Servlet 的 SSE 服务器传输
c.基于 WebFlux 的 SSE 服务器传输,用于响应式的 HTTP 数据流
d.基于 WebMVC 的 SSE 服务器传输,用于基于 Servlet 的 HTTP 数据流
3.Spring AI MCP 集成
Spring AI 通过以下 Spring Boot 启动器提供 MCP 集成,如下所示:
- 客户端启动器
spring-ai-starter-mcp-client - 提供基于 STDIO 和 HTTP 的 SSE 支持的核心启动器
spring-ai-starter-mcp-client-webflux - 基于 WebFlux 的 SSE 传输实现
- 服务器启动器
spring-ai-starter-mcp-server - 提供基于 STDIO 传输支持的核心服务器
spring-ai-starter-mcp-server-webmvc - 基于 Spring MVC 的 SSE 传输实现
spring-ai-starter-mcp-server-webflux - 基于 WebFlux 的 SSE 传输实现
如果你想使用 Spring Boot 简化设置,可以使用上面提到的 MCP 启动器。
本文转载自公众号玄姐聊AGI 作者:玄姐
原文链接:https://mp.weixin.qq.com/s/W-O8h-kduA3lyySjMhl1CQ
等于没写。不懂可以不写好吧,写的什么玩意儿