分享
04-Agent 武器库-集成百炼MCP(Spring AI Alibaba)
输入“/”快速插入内容
04-Agent 武器库-集成百炼MCP(Spring AI Alibaba)
飞书用户9889
10月23日修改
Agent 武器库-集成百炼MCP
MCP
MCP(Model Context Protocol,模型上下文协议)是一种标准化协议,规定了 AI 模型与外部工具通信交互的规范。
目前关于 MCP 的概念介绍有很多,这里快速介绍核心概念。
针对开发人员来说,MCP 主要包括 Client 和 Server 端。
•
Client 端则是我们基于 Spring AI Alibaba 实现的 Agent,与 Server 端建立连接之后,即可调用 Server 端的工具。
•
Server 端提供了需要使用的工具,比如 Web 搜索、高德地图等。
基于 MCP 协议,我们可以为 Agent 引入不同的外部工具,作为武器库,增强 Agent 的能力。
MCP 架构
Java MCP 的实现遵循三层架构,分别为 Client/Server 层、Session 层、Transport 层。
主要介绍一下 Transport 层,该层包括了 Stdio、SSE 等多种通信机制:
•
Stdio(Standard Input/Output)
:标准输入输出,是操作系统层面的本地进程通信机制,不依赖网络,直接通过操作系统提供的管道机制传递字节流。
适用场景:
Stdio 适用于本地通信场景,Server 和 Client 需在同一台机器上,才能实现进程间通信。
•
SSE(Server-Sent Events)
:基于 HTTP 协议的单向服务器推送机制,允许服务器在一个持续的 HTTP 连接上,不断向客户端推送事件流。
适用场景:
基于 HTTP 协议,可以本地机器访问远程服务器的 MCP Server。
图片来源于 Spring AI 官网
Spring AI 依赖
使用 MCP 需要引入 spring-ai-starter-mcp-client-webflux 依赖,如下:
代码块
XML
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-client-webflux</artifactId>
</dependency>
该依赖同时支持 Stdio 和 SSE 两种传输机制,Spring AI 官方建议生产环境选择 SSE 连接和 spring-ai-starter-mcp-client-webflux 作为 MCP 客户端的依赖。
基础-本地 MCP Client/Server 实现
代码位置:
•
MCP Local Client:
h
ttps://github.com/1020325258/spring-ai-alibaba-tutorial/tree/master/03-spring-ai-alibaba-mcp/local-mcp-client
•
MCP Local Server:
https://github.com/1020325258/spring-ai-alibaba-tutorial/tree/master/03-spring-ai-alibaba-mcp/local-mcp-server
接下来在本地定义一个简单的 MCP Server 和 MCP Client,基于 SSE 方式进行调用。
Server 实现
MCP Server 的实现主要包括两个部分:
•
Tool 工具的定义。
•
ToolCallbackProvider 的定义。
(一)Tool 工具定义
Tool 工具需要指定描述来让 MCP Client 准确调用,定义如下:
代码块
Java
@Tool(description = "获取指定城市的天气")
public String getWeather(String cityName) {
if (cityName.equals("北京")) {
return "下雨了";
} else {
return "其他城市未知";
}
}
之后,定义 ToolCallbackProvider:
代码块
Java
@Bean
public ToolCallbackProvider weatherTools(WeatherService weatherService) {
return MethodToolCallbackProvider.
builder
().toolObjects(weatherService).build();
}