环境:SpringBoot3.4.2
1. 简介
1.1 什么是MCP
Model Context Protocol(MCP)模型上下文协议是一种标准化协议,它让大模型能够更容易地和外部的数据、工具连接起来。你可以把MCP想象成一个通用的插头或者接口,就像USB-C一样,不管是什么设备,只要插上这个接口,就能和电脑、充电器等连接起来。
注意,它连接的不是物理设备,而是AI模型和外部的数据源、工具等。有了MCP,AI模型就能更方便地获取外部的信息,完成更多的任务。比如,通过MCP,AI模型可以操作电脑读写文件,或者模拟浏览器操作等。
1.2 为什么需要MCP
首先,MCP提供了一个标准化的接口,使得AI模型能够轻松地与各种外部工具和数据源进行交互,无需为每个工具或数据源单独开发集成代码。
其次,MCP还解决了数据孤岛问题,通过统一协议连接分散的数据源,使AI模型能够实时访问和利用最新的数据。
总的来说,MCP就像是一个桥梁,让AI模型与外部世界更好地连接起来,从而发挥出更大的价值和潜力。
1.3 Java与MCP架构
-
客户端/服务器层:McpClient负责处理客户端操作,而McpServer则管理服务器端协议操作。两者都利用McpSession来进行通信管理。
-
会话层(McpSession):通过DefaultMcpSession实现来管理通信模式和状态。
-
传输层(McpTransport):处理JSON-RPC消息的序列化和反序列化,并支持多种传输实现。
MCP Client
MCP客户端是模型上下文协议(MCP)架构中的关键组件,负责建立和管理与MCP服务器的连接。它实现了协议的客户端部分,如下图所示:
MCP Server
MCP服务器是模型上下文协议(MCP)架构中的基础组件,它为客户端提供工具、资源和功能。它实现了协议的服务器端部分,如下图所示:
Spring AI 提供了相对应的Spring Boot staters来非常方便的进行 MCP 的集成。接下来,我们将详细的完成一个完整的MCP应用案例。
2. 实战案例
2.1 服务端开发
我们将在 MCP 服务端提供2个外部功能:查询天气预报、获取IP地址详细信息。
引入依赖
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0-M6.1</version>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-server-webflux-spring-boot-starter</artifactId>
</dependency>
说明:
-
引入alibaba-starter我们将使用阿里的大模型
-
引入mcp-server-webflux,以支持基于 Spring WebFlux 的 SSE(服务器发送事件)服务器传输
配置文件
spring:
ai:
dashscope:
api-key: sk-xxxooo
base-url: https://dashscope.aliyuncs.com/compatible-mode/v1
chat:
options:
stream: true
model: qwen-turbo
---
spring:
ai:
mcp:
server:
enabled: true
name: ai_mcp_server
version: 1.0.0
type: ASYNC
sse-message-endpoint: /mcp/message
以上我们就完成了基本的配置。接下来,我们需要提供2个外部工具。
工具编写
获取天气预报
public class CommonTool {
@Tool(description = "获取当前天气预报")
WeatherResponse getCurrentWeather(WeatherRequest request) {
System.err.printf("准备查询【%s】天气预报%n", request.city()) ;
RestClient client = RestClient.create(URI.create("https://api.vvhan.com")) ;
Map<?, ?> result = client.get()
.uri("/api/weather?city={0}", request.city())
.retrieve()
.body(Map.class) ;
try {
return new WeatherResponse(new ObjectMapper().writeValueAsString(result)) ;
} catch (JsonProcessingException e) {
throw new RuntimeException(e) ;
}
}
@Tool(description = "获取IP地址详细信息")
String getIpAddressInfo(String ip) {
System.err.printf("准备查询【%s】详细信息%n", ip) ;
RestClient client = RestClient.create(URI.create("https://api.vvhan.com")) ;
Map<?, ?> result = client.get()
.uri("/api/ipInfo?ip={0}", ip)
.retrieve()
.body(Map.class) ;
try {
return new ObjectMapper().writeValueAsString(result) ;
} catch (JsonProcessingException e) {
throw new RuntimeException(e) ;
}
}
}
注册工具
@Configuration
public class ToolsConfig {
@Bean
ToolCallbackProvider tools() {
ToolCallback[] toolCallbacks = ToolCallbacks.from(new CommonTool()) ;
return ToolCallbackProvider.from(toolCallbacks) ;
}
}
如上所述,我们就成功构建了一个仅包含两个外部工具的MCP服务器。
启动服务
-
默认开启了一个/see端点(其实,还有一个消息传输的端点)
-
提示注册了2个工具(也不知道给个空格的)
接下来,我们进行客户端的开发。
2.2 客户端开发
引入依赖
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-client-webflux-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0-M6.1</version>
</dependency>
注意,这里引入的是mcp-client包。
配置文件
spring:
ai:
mcp:
client:
enable: true
name: ai-mcp-client
initialized: true
type: ASYNC
sse:
connections:
server1:
url: http://localhost:8888
我们配置了一个MCP服务端地址,你可以配置多个按照上面的方式。
完成以上的配置后,我们就可以配置ChatClient,然后进行接口的调用了。
@RestController
@RequestMapping("/tools")
public class ToolController {
private final ChatClient chatClient ;
public ToolController(ChatClient.Builder aiClientBuilder, ToolCallbackProvider mcpTools) {
this.chatClient = aiClientBuilder
.defaultTools(mcpTools)
.build() ;
}
@GetMapping("/weather")
public ResponseEntity<String> getCurrentWeather(String prompt) {
System.err.println(prompt) ;
String response = this.chatClient
.prompt(prompt)
.call().content() ;
return ResponseEntity.ok(response) ;
}
@GetMapping("/ip")
public ResponseEntity<String> getIpAddressInfo(String prompt) {
System.err.println(prompt) ;
String response = this.chatClient
.prompt(prompt)
.call().content() ;
return ResponseEntity.ok(response) ;
}
}
在构造函数中,我们直接注入了ToolCallbackProvider,当我们系统启动时会自动的从配置的服务端进行查找有哪些可用的工具。
启动服务
控制台将输出如下从MCP Server获取的工具:
i.m.s.M Line:151 - Received JSON message:
{
"jsonrpc": "2.0",
"id": "66d12dae-1",
"result": {
"tools": [
{
"name": "getCurrentWeather",
"description": "获取当前天气预报",
"inputSchema": {
"type": "object",
"properties": {
"request": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市"
}
},
"required": ["city"]
}
},
"required": ["request"],
"additionalProperties": false
}
},
{
"name": "getIpAddressInfo",
"description": "获取IP地址详细信息",
"inputSchema": {
"type": "object",
"properties": {
"ip": {
"type": "string"
}
},
"required": ["ip"],
"additionalProperties": false
}
}
]
}
}
测试结果
成功!!!
大模型&AI产品经理如何学习
求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。
1.学习路线图
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
(都打包成一块的了,不能一一展开,总共300多集)
因篇幅有限,仅展示部分资料,需要点击下方图片前往获取
3.技术文档和电子书
这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
4.LLM面试题和面经合集
这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集***
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓