AI模型交互协议集成

Spring AI与MCP(模型上下文协议)集成,提供标准化的AI模型与外部工具和资源的交互方式,支持同步和异步通信模式。

  • by kuldeepsingh99
  • Java
  • 本地部署
  • 6 星标
  • 更新于
在 GitHub 查看 kuldeepsingh99/mcp-server-with-spring-ai

使用说明

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<SellerAccount> 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<SellerAccount> 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会根据提示自动选择正确的工具并返回结果,同时还会对其进行格式化。