Skip to content

MCP 协议

字数: 0 字 时长: 0 分钟

什么是 MCP ?

MCP (Model Context Protocol,模型上下文协议)是一种开放协议,它标准化了应用程序如何向大模型提供上下文的方式。

我想要“AI 根据另一半的位置找到合适的约会地点”,可以使用工具调用功能,在程序中就像查询天气预报工具一样,调用第三方地图 API ;也可以直接调用第三方地图提供的 MCP 服务。那么这两者有什么区别呢?本质区别是:MCP 是对话的记忆中枢;工具调用是动作的执行手臂

能力MCP协议工具调用
状态管理✅ 主动维护结构化状态❌ 仅通过自然语言隐式携带状态
长期记忆✅ 支持会话持久化存储❌ 依赖外部数据库或LLM自身token限制记忆
对话逻辑控制✅ 显式控制(状态机/槽位填充)❌ 由LLM黑盒决策
执行外部操作❌ 不直接执行✅ 核心能力
开放域适应性❌ 预定义Schema限制泛化能力✅ 动态匹配任意声明过的工具

Spring AI MCP 实践

以调用高德地图提供的 MCP 服务为例子进行实践,实现让 AI 根据另一半位置为我们推荐合适的约会地点。

  1. 进入高德地图官网开放平台,按照官网指引,创建账号并申请 API Key

高德 MCP.webp

  1. 引入依赖
xml
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId>
    <version>1.0.0-M6</version>
</dependency>
  1. 在 resources 目录下新建 mcp-servers.json 配置文件,定义需要用到的 MCP 服务
json
{
  "mcpServers": {
    "amap-maps": {
      "command": "npx", // 如果是 windows 环境需要改为 "npx.cmd"
      "args": [
        "-y",
        "@amap/amap-maps-mcp-server"
      ],
      "env": {
        "AMAP_MAPS_API_KEY": "改成你的 API Key"
      }
    }
  }
}
  1. 修改 application.yml 指定 mcp 服务配置文件
yaml
spring:
  ai:
    mcp:
      client:
        stdio:
          servers-configuration: classpath:mcp-servers.json
  1. 利用自动注入的 ToolCallbackProvider 获取配置中定义的 MCP 服务提供的所有工具
java
@Resource
private ToolCallbackProvider toolCallbackProvider;

public String doChatWithMcp(String message,String chatId) {
    ChatResponse response = chatClient
            .prompt()
            .user(message)
            .advisors(advisorSpec -> advisorSpec
                    .param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId)
                    .param(CHAT_MEMORY_RETRIEVE_SIZE_KEY,10)
            )
            .advisors(new MyLoggerAdvisor())
            .tools(toolCallbackProvider)
            .call()
            .chatResponse();
    String content = response.getResult().getOutput().getText();
    return content;
    }
  1. 编写单元测试类进行测试,AI 通过高德地图 MCP 服务为我推荐了几个真实的约会地点,甚至还包括每个地点的照片

高德 MCP 测试.webp