Spring AI与MCP(模型上下文协议)的集成
这 模型上下文协议(MCP) 是一种标准化的协议,使人工智能模型能够以结构化的方式与外部工具和资源进行交互。它支持多种传输机制,以提供跨不同环境的灵活性。
MCP Java SDK提供了模型上下文协议的Java实现,通过同步和异步通信模式实现了与AI模型和工具的标准化交互。
Spring AI MCP通过Spring Boot集成扩展了MCP Java SDK,提供了客户端和服务器端启动器。使用Spring Initializer启动支持MCP的AI应用程序。
MCP Java SDK架构
Java MCP实现遵循三层架构
- 客户端/服务器层:McpClient处理客户端操作,而McpServer管理服务器端协议操作。两者都使用McpSession进行通信管理。
- 会话层(McpSession):通过DefaultMcpSessions实现管理通信模式和状态。
- 传输层(McpTransport):处理JSON-RPC消息序列化和反序列化,支持多种传输实现。
MCP客户端
MCP客户端是模型上下文协议(MCP)架构中的关键组件,负责建立和管理与MCP服务器的连接。
MCP客户端
MCP服务器是模型上下文协议(MCP)架构中的基础组件,为客户端提供工具、资源和功能。
什么是MCP?
MCP遵循围绕几个关键组件的客户端-服务器架构:
MCP主机: 是我们的主要应用程序,它与LLM集成,并要求它与外部数据源连接
MCP客户端: 是与MCP服务器建立和维护1:1连接的组件
MCP服务器: 是与外部数据源集成并公开与之交互的功能的组件
工具:请参阅MCP服务器为客户端调用而公开的可执行函数/方法 此外,为了处理客户端和服务器之间的通信,MCP提供了两个传输通道。
为了通过标准输入和输出流与本地进程和命令行工具进行通信,它提供了标准输入/输出(stdio)传输类型。或者,对于客户端和服务器之间基于HTTP的通信,它提供服务器发送事件(SSE)传输类型。
示例中做了什么?
在本文中,我们还公开了MCP Server中的两个工具,它们连接到Postgresql DB并获取数据。MCP客户端连接到MCP服务器,并根据提示LLM决定连接哪个工具。
步骤1创建Postgresql数据库
运行docker-compose.yml文件并运行table.sql以创建表。
2.在本地运行ollama
步骤3创建MCP服务器
下载mcp服务器项目并运行它。
需要注意的重要类-SellerAccountTools
@Service
public class SellerAccountTools {
private final SellerAccountRepository sellerAccountRepository;
public SellerAccountTools(SellerAccountRepository sellerAccountRepository) {
this.sellerAccountRepository = sellerAccountRepository;
}
@Tool(name = "Search Seller account by name", description = "Find all Seller Accounts by name")
public String getAccountByName(
@ToolParam(description = "Seller Account Name") String name) {
List accountList = sellerAccountRepository.findByName(name);
StringBuilder result = new StringBuilder();
for (SellerAccount account : accountList) {
result.append(account.toString()).append("\n");
}
return result.toString();
}
@Tool(description = "Find all Seller Accounts by owner")
public String getAccountByOwner(
@ToolParam(description = "Seller Account owner") String owner) {
List accountList = sellerAccountRepository.findByOwner(owner);
StringBuilder result = new StringBuilder();
for (SellerAccount account : accountList) {
result.append(account.toString()).append("\n");
}
return result.toString();
}
}解释
- 工具允许服务器公开LLM可以调用的工具,例如,我创建了两个工具,它们将按名称和所有者从帐户表中搜索。
- 根据提示,AI LLM将自动选择正确的方法,但我们需要正确地写出名称和描述
步骤4创建MCP客户端
下载mcp客户端项目并运行。
5.测试
DB表数据
使用Promts进行测试
在这里,您可以观察到,LLM会根据提示自动选择正确的工具并返回结果,同时还会对其进行格式化。
