查重爆红?AI检测报警?别崩溃!百考通「降重+降AI」来给你论文“一键真人化”啦~

核心内容摘要

《Rust 实战:从零构建 AI Agent 核心循环(The Agent Loop),比 Python 更安全高效》
Java编程必备:IDEA、Eclipse等常用开发工具介绍

丹青识画镜像免配置:Docker Compose一键拉起全功能服务

本文详细介绍Java开发者如何基于Spring AI Alibaba框架使用MCP协议包括MCP基础概念、架构和工作流程展示如何将Spring应用发布为stdio和SSE两种模式的MCP Server以及开发Spring应用作为MCP Client调用服务。

文章还介绍了在Spring AI Alibaba Open Manus中使用MCP服务的方法提供完整代码示例和配置说明帮助开发者快速掌握MCP协议应用实现Java应用与大模型的集成。

摘要本文以原理与示例结合的形式讲解 Java 开发者如何基于 Spring AI Alibaba 框架玩转 MCP主要包含以下内容。

一些 MCP 基础与快速体验熟悉的读者可以跳过此部分如何将自己开发的 Spring 应用发布为 MCP Server验证使用 Claude 或 Spring 应用作为客户端接入自己发布的 Java MCP Server。

发布 stdio 模式的 MCP Server发布 SSE 模式的 MCP Server开发另一个 Spring 应用作为 MCP Client 调用 MCP Server 服务使用 Claude 桌面应用接入我们的 Java MCP Server如何使用自己开发的 Spring 应用调用 MCP Server包括调用自己发布的 Java MCP Server也包括市面上其他通用 MCP Server。

配置并调用 stdio 模式的 MCP Server配置并调用 SSE 模式的 MCP Server如何在 Spring AI Alibaba OpemManus 实现中使用 MCP 服务。

关于存量应用如何一行代码不动就可以被当作 MCP 服务被智能体调用请关注后续文章解决方案。

Spring AI Alibaba 开源项目地址https://github.com/alibaba/spring-ai-alibaba本文外网博客地址https://java2ai.com本示例源码地址https://github.com/springaialibaba/spring-ai-alibaba-examples/tree/main/spring-ai-alibaba-mcp-example模型上下文协议Model Context Protocol入门2024 年 11 月Anthropic 公司搞了个挺有意思的新玩意 - Model Context Protocol模型上下文协议简称为 MCP 协议。

简单来说它就是给 AI 和各类工具数据之间搭了个标准化的”桥梁”让开发者不用再为对接问题头疼了。

大模型应用可以使用别人分享的 MCP 服务来完成各种各样的工作内容你可以从这些地方获取 MCP 服务awesome-mcp-serversmcp.soMCP 协议在实际的应用场景上非常广泛列举一些比较常见的应用场景使用百度/高德地图分析旅线计算时间接 Puppeteer 自动操作网页使用 Github/Gitlab 让大模型接管代码仓库使用数据库组件完成对 Mysql、ES、Redis 等数据库的操作使用搜索组件扩展大模型的数据搜索能力

1 在 Claude Desktop 中体验 MCP接下来我们使用 Claude 快速接入 Github 服务提前申请 token编辑一下 Claude Desktop 的配置文件macOS~/Library/Application Support/Claude/claude_desktop_config.jsonWindows%APPDATA%\Claude\claude_desktop_config.json添加如下内容注意把YOUR_TOKEN替换成你自己申请的 token{ mcpServers: { github: { command: npx, args: [ -y, modelcontextprotocol/server-github ], env: { GITHUB_PERSONAL_ACCESS_TOKEN: } } }重启 Claude 之后可以看到已经加载了 MCP 对应的工具点开之后可以看到具体的工具内容此时我们就可以享受 Github 服务提供的操作仓库的能力从图上可以看到通过创建仓库 test-mcp 这样的提示词Claude 的大模型自行判断需要使用 mcp 中提供的 create_repository 能力从而完成了仓库的创建接下来我们打开 Github 也确实发现了这个已经创建的仓库。

通过这种方式大模型就可以利用 MCP 接入各式各样的能力完成各种更为复杂的工作。

2 MCP 的架构MCP 主要分为 MCP 服务和 MCP 客户端客户端一般指的是大模型应用比如 Claude、通过 Spring AI Alibaba、Langchain 等框架开发的 AI 应用服务端连接各种数据源的服务和工具整体架构如下整体的工作流程是这样的AI 应用中集成 MCP 客户端通过 MCP 协议向 MCP 服务端发起请求MCP 服务端可以连接本地/远程的数据源或者通过 API 访问其他服务从而完成数据的获取返回给 AI 应用去使用。

在 Spring AI 中使用 Mcp Server

1 Spring AI MCP 的介绍Spring AI MCP 为模型上下文协议提供 Java 和 Spring 框架集成。

它使 Spring AI 应用程序能够通过标准化的接口与不同的数据源和工具进行交互支持同步和异步通信模式。

整体架构如下Spring AI MCP 采用模块化架构包括以下组件Spring AI 应用程序使用 Spring AI 框架构建想要通过 MCP 访问数据的生成式 AI 应用程序Spring MCP 客户端MCP 协议的 Spring AI 实现与服务器保持 1:1 连接通过 Spring AI MCP可以快速搭建 MCP 客户端和服务端程序。

2 使用 Spring AI MCP 快速搭建 MCP ServerSpring AI 提供了两种机制快速搭建 MCP Server通过这两种方式开发者可以快速向 AI 应用开放自身的能力这两种机制如下基于 stdio 的进程间通信传输以独立的进程运行在 AI 应用本地适用于比较轻量级的工具。

基于 SSEServer-Sent Events 进行远程服务访问需要将服务单独部署客户端通过服务端的 URL 进行远程访问适用于比较重量级的工具。

接下来逐一介绍一下这两种方式的实现示例代码可以通过如下链接获取https://github.com/springaialibaba/spring-ai-alibaba-examples/tree/main/spring-ai-alibaba-mcp-example/starter-example/server

2.

1 基于 stdio 的 MCP 服务端实现基于 stdio 的 MCP 服务端通过标准输入输出流与客户端通信适用于作为子进程被客户端启动和管理的场景。

添加依赖首先在项目中添加 Spring AI MCP Server Starter 依赖dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-mcp-server-spring-boot-starter/artifactId /dependency配置 MCP 服务端在application.yml中配置 MCP 服务端这次要实现的是一个天气服务spring: main: web-application-type: none # 必须禁用web应用类型 banner-mode: off # 禁用banner ai: mcp: server: stdio: true # 启用stdio模式 name: my-weather-server # 服务器名称 version:

0.

1 # 服务器版本实现 MCP 工具使用Tool注解标记方法使其可以被 MCP 客户端发现和调用通过ToolParameter注解工具的具体参数Service publicclassOpenMeteoService { privatefinal WebClient webClient; publicOpenMeteoService(WebClient.Builder webClientBuilder){ this.webClient webClientBuilder .baseUrl(https://api.open-meteo.com/v

.build(); } Tool(description 根据经纬度获取天气预报) public String getWeatherForecastByLocation( ToolParameter(description 纬度例如

39.

String latitude, ToolParameter(description 经度例如

116.

String longitude) { try { String response webClient.get() .uri(uriBuilder - uriBuilder .path(/forecast) .queryParam(latitude, latitude) .queryParam(longitude, longitude) .queryParam(current, temperature_2m,wind_speed_10m) .queryParam(timezone, auto) .build()) .retrieve() .bodyToMono(String.class) .block(); // 解析响应并返回格式化的天气信息 // 这里简化处理实际应用中应该解析JSON return当前位置纬度 latitude 经度 longitude 的天气信息\n response; } catch (Exception e) { return获取天气信息失败 e.getMessage(); } } Tool(description 根据经纬度获取空气质量信息) public String getAirQuality( ToolParameter(description 纬度例如

39.

String latitude, ToolParameter(description 经度例如

116.

String longitude) { // 模拟数据实际应用中应调用真实API return当前位置纬度 latitude 经度 longitude 的空气质量\n - PM

5: 15 μg/m³ (优)\n - PM10: 28 μg/m³ (良)\n - 空气质量指数(AQI): 42 (优)\n - 主要污染物: 无; } }这里使用了 OpenMeteo OpenMeteo 是一个开源的天气 API为非商业用途提供免费访问无需 API 密钥。

注册 MCP 工具在应用程序入口类中注册工具SpringBootApplication publicclassMcpServerApplication { publicstaticvoidmain(String[] args){ SpringApplication.run(McpServerApplication.class, args); } Bean public ToolCallbackProvider weatherTools(OpenMeteoService openMeteoService){ return MethodToolCallbackProvider.builder() .toolObjects(openMeteoService) .build(); } }运行服务端在控制台中执行如下命令编译并打包应用Terminal windowmvn clean package -DskipTests

2.

2 基于 SSE 的 MCP 服务端实现基于 SSE 的 MCP 服务端通过 HTTP 协议与客户端通信适用于作为独立服务部署的场景可以被多个客户端远程调用具体做法与 stdio 非常类似。

添加依赖首先在您的项目中添加依赖dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-mcp-server-webflux-spring-boot-starter/artifactId /dependency配置 MCP 服务端在application.yml中配置 MCP 服务端server: port: 8080 # 服务器端口配置 spring: ai: mcp: server: name: my-weather-server # MCP服务器名称 version:

0.

1 # 服务器版本号实现 MCP 工具与基于 stdio 的实现完全相同Service publicclassOpenMeteoService { privatefinal WebClient webClient; publicOpenMeteoService(WebClient.Builder webClientBuilder){ this.webClient webClientBuilder .baseUrl(https://api.open-meteo.com/v

.build(); } Tool(description 根据经纬度获取天气预报) public String getWeatherForecastByLocation( ToolParameter(description 纬度例如

39.

String latitude, ToolParameter(description 经度例如

116.

String longitude) { try { String response webClient.get() .uri(uriBuilder - uriBuilder .path(/forecast) .queryParam(latitude, latitude) .queryParam(longitude, longitude) .queryParam(current, temperature_2m,wind_speed_10m) .queryParam(timezone, auto) .build()) .retrieve() .bodyToMono(String.class) .block(); // 解析响应并返回格式化的天气信息 return当前位置纬度 latitude 经度 longitude 的天气信息\n response; } catch (Exception e) { return获取天气信息失败 e.getMessage(); } } Tool(description 根据经纬度获取空气质量信息) public String getAirQuality( ToolParameter(description 纬度例如

39.

String latitude, ToolParameter(description 经度例如

116.

String longitude) { // 模拟数据实际应用中应调用真实API return当前位置纬度 latitude 经度 longitude 的空气质量\n - PM

5: 15 μg/m³ (优)\n - PM10: 28 μg/m³ (良)\n - 空气质量指数(AQI): 42 (优)\n - 主要污染物: 无; } }注册 MCP 工具在应用程序入口类中注册工具SpringBootApplication publicclassMcpServerApplication { publicstaticvoidmain(String[] args){ SpringApplication.run(McpServerApplication.class, args); } Bean public ToolCallbackProvider weatherTools(OpenMeteoService openMeteoService){ return MethodToolCallbackProvider.builder() .toolObjects(openMeteoService) .build(); } Bean public WebClient.Builder webClientBuilder(){ return WebClient.builder(); } }运行服务端在控制台中输入命令运行服务端Terminal windowmvn spring-boot:run服务端将在 http://localhost:8080 启动。

3 在 Claude 中测试 mcp 服务在上一小节中我们编写完了 MCP 服务这些服务到底是否能正常运行呢在 Claude Desktop 中可以测试一下。

修改配置文件添加 weather 的配置一定要注意 jar 包的路径必须是全路径{ mcpServers: { github: { command: npx, args: [ -y, modelcontextprotocol/server-github ], env: { GITHUB_PERSONAL_ACCESS_TOKEN: your token } }, weather: { command: java, args: [ -Dspring.ai.mcp.server.stdiotrue, -Dspring.main.web-application-typenone, -Dlogging.pattern.console, -jar, 修改为stdio编译之后的jar包全路径 ], env: {} } } }重启 Claude 之后看到我们编写的两个 Tool 已经被加载进来了输入提示词查询今天北京的空气质量Claude 触发了我们自己编写的天气服务展示了完整的数据上面使用了 stdio 的方式在 Claude Desktop 中使用我们自己编写的 MCP 服务但是很可惜 Claude Desktop 不支持直接通过 SSE 模式访问必须使用 mcp-proxy 作为中介所以这里我们不再演示 Claude Desktop 接入 SSE 模式的 MCP 服务。

在 Spring AI Alibaba 中集成 Mcp Client对于客户端Spring AI 同样提供了 stdio 和 SSE 两种机制快速集成 MCP Server分别对应到 MCP Server 的 stdio 和 SSE 两种模式参考代码如下https://github.com/springaialibaba/spring-ai-alibaba-examples/tree/main/spring-ai-alibaba-mcp-example/starter-example/client

1 基于 stdio 的 MCP 客户端实现基于 stdio 的实现是最常见的 MCP 客户端实现方式它通过标准输入输出流与 MCP 服务器进行通信。

这种方式适用于使用了 stdio 方式本地部署的 MCP 服务器可以直接在同一台机器上启动 MCP 服务器进程。

添加依赖首先在项目中添加 Spring AI MCP starter 依赖dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-mcp-client-spring-boot-starter/artifactId /dependency !-- 添加Spring AI MCP starter依赖 -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-mcp-client-spring-boot-starter/artifactId /dependency配置 MCP 服务器在application.yml中配置 MCP 服务器spring: ai: dashscope: # 配置通义千问API密钥 api-key: ${DASH_SCOPE_API_KEY} mcp: client: stdio: # 指定MCP服务器配置文件路径推荐 servers-configuration: classpath:/mcp-servers-config.json # 直接配置示例和上边的配制二选一 # connections: # server1: # command: java # args: # - -jar # - /path/to/your/mcp-server.jar这个配置文件设置了 MCP 客户端的基本配置包括 API 密钥和服务器配置文件的位置。

你也可以选择直接在配置文件中定义服务器配置但是还是建议使用 json 文件管理 mcp 配置。

在resources目录下创建mcp-servers-config.json配置文件{ mcpServers: { // 定义名为weather的MCP服务器 weather: { // 指定启动命令为java command: java, // 定义启动参数 args: [ -Dspring.ai.mcp.server.stdiotrue, -Dspring.main.web-application-typenone, -jar, 修改为stdio编译之后的jar包全路径 ], // 环境变量配置可选 env: {} } } }这个 JSON 配置文件定义了 MCP 服务器的详细配置包括如何启动服务器进程、需要传递的参数以及环境变量设置还是要注意引用的 jar 包必须是全路径的。

编写一个启动类进行测试​java SpringBootApplication publicclassApplication { publicstaticvoidmain(String[] args){ // 启动Spring Boot应用 SpringApplication.run(Application.class, args); } Bean public CommandLineRunner predefinedQuestions( ChatClient.Builder chatClientBuilder, ToolCallbackProvider tools, ConfigurableApplicationContext context) { return args - { // 构建ChatClient并注入MCP工具 var chatClient chatClientBuilder .defaultTools(tools) .build(); // 定义用户输入 String userInput 北京的天气如何; // 打印问题 System.out.println(\n QUESTION: userInput); // 调用LLM并打印响应 System.out.println(\n ASSISTANT: chatClient.prompt(userInput).call().content()); // 关闭应用上下文 context.close(); }; } }这段代码展示了如何在 Spring Boot 应用中使用 MCP 客户端。

它创建了一个命令行运行器构建了 ChatClient 并注入了 MCP 工具然后使用这个客户端发送查询并获取响应。

在 Spring AI Alibaba 中使用 Mcp 工具非常简单只需要把ToolCallbackProvider放到chatClientBuilder的defaultTools方法中就可以自动的适配。

通过命令启动程序进行测试mvn spring-boot:run启动之后显示结果为从日志可以看到我们自己编写的 mcp server 被调用了返回了数据QUESTION: 北京的天气如何

T17:56:

1

93108:00 DEBUG23455---[mcp][pool-1-thread-1]io.modelcontextprotocol.spec.McpSchema:Received JSON message:{jsonrpc:

0,id:60209de

,result:{content:[{type:text,text:\当前天气:\\n温度:

1

6°C (体感温度:

1

1°C)\\n天气: 多云\\n风向: 南风 (

7 km/h)\\n湿度: 18%\\n降水量:

0 毫米\\n\\n未来天气预报:\\n

(周

:\\n温度:

4°C ~

1

5°C\\n天气: 多云\\n风向: 南风 (

4 km/h)\\n降水量:

0 毫米\\n\\n

(周

:\\n温度:

6°C ~

2

6°C\\n天气: 多云\\n风向: 西北风 (

1

1 km/h)\\n降水量:

0 毫米\\n\\n

(周

:\\n温度:

9°C ~

1

4°C\\n天气: 晴朗\\n风向: 西北风 (

1

8 km/h)\\n降水量:

0 毫米\\n\\n

(周

:\\n温度:

0°C ~

1

8°C\\n天气: 多云\\n风向: 南风 (

1

3 km/h)\\n降水量:

0 毫米\\n\\n

(周

:\\n温度:

5°C ~

2

6°C\\n天气: 多云\\n风向: 西北风 (

1

6 km/h)\\n降水量:

0 毫米\\n\\n

(周

:\\n温度:

6°C ~

2

7°C\\n天气: 多云\\n风向: 西风 (

1

5 km/h)\\n降水量:

0 毫米\\n\\n

(周日):\\n温度:

4°C ~

2

3°C\\n天气: 晴朗\\n风向: 南风 (

4 km/h)\\n降水量:

0 毫米\\n\\n\}],isError:false}}

T17:56:

1

93208:00 DEBUG23455---[mcp][pool-1-thread-1]i.m.spec.McpClientSession:Received Response: JSONRPCResponse[jsonrpc

0,id60209de

,result{content[{typetext,text当前天气:\n温度:

1

6°C (体感温度:

1

1°C)\n天气: 多云\n风向: 南风 (

7 km/h)\n湿度: 18%\n降水量:

0 毫米\n\n未来天气预报:\n

(周

:\n温度:

4°C ~

1

5°C\n天气: 多云\n风向: 南风 (

4 km/h)\n降水量:

0 毫米\n\n

(周

:\n温度:

6°C ~

2

6°C\n天气: 多云\n风向: 西北风 (

1

1 km/h)\n降水量:

0 毫米\n\n

(周

:\n温度:

9°C ~

1

4°C\n天气: 晴朗\n风向: 西北风 (

1

8 km/h)\n降水量:

0 毫米\n\n

(周

:\n温度:

0°C ~

1

8°C\n天气: 多云\n风向: 南风 (

1

3 km/h)\n降水量:

0 毫米\n\n

(周

:\n温度:

5°C ~

2

6°C\n天气: 多云\n风向: 西北风 (

1

6 km/h)\n降水量:

0 毫米\n\n

(周

:\n温度:

6°C ~

2

7°C\n天气: 多云\n风向: 西风 (

1

5 km/h)\n降水量:

0 毫米\n\n

(周日):\n温度:

4°C ~

2

3°C\n天气: 晴朗\n风向: 南风 (

4 km/h)\n降水量:

0 毫米\n\n}],isErrorfalse},errornull]

2 基于 SSE 的 MCP 客户端实现除了基于 stdio 的实现外Spring AI Alibaba 还提供了基于 Server-Sent Events SSE的 MCP 客户端实现。

这种方式适用于远程部署的 MCP 服务器可以通过 HTTP 协议与 MCP 服务器进行通信。

添加依赖首先在您的项目中添加 Spring AI MCP starter 依赖dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-mcp-client-webflux-spring-boot-starter/artifactId /dependency配置 MCP 服务器在application.yml中配置 MCP 服务器这里需要指定 SSE 启动的服务地址之前我们在 8080 端口上启动了对应的服务spring: ai: dashscope: api-key: ${DASH_SCOPE_API_KEY} mcp: client: sse: connections: server1: url: http://localhost:8080 #服务地址使用 MCP 客户端使用方式与基于 stdio 的实现相同只需注入ToolCallbackProvider和ChatClient.BuilderSpringBootApplication publicclassApplication { publicstaticvoidmain(String[] args){ SpringApplication.run(Application.class, args); } Bean public CommandLineRunner predefinedQuestions(ChatClient.Builder chatClientBuilder, ToolCallbackProvider tools, ConfigurableApplicationContext context) { return args - { // 构建ChatClient并注入MCP工具 var chatClient chatClientBuilder .defaultTools(tools) .build(); // 使用ChatClient与LLM交互 String userInput 北京的天气如何; System.out.println(\n QUESTION: userInput); System.out.println(\n ASSISTANT: chatClient.prompt(userInput).call().content()); context.close(); }; } }通过命令启动程序进行测试Terminal windowmvn spring-boot:run启动之后会有报错Caused by: java.lang.IllegalStateException: Multiple tools with the same name(spring-ai-mcp-client-getWeatherForecastByLocation, spring-ai-mcp-client-getAirQuality) at org.springframework.ai.mcp.SyncMcpToolCallbackProvider.validateToolCallbacks(SyncMcpToolCallbackProvider.java:

~[spring-ai-mcp-

1.

0-

2

064812-

jar:

1.

0-SNAPSHOT] at org.springframework.ai.mcp.SyncMcpToolCallbackProvider.getToolCallbacks(SyncMcpToolCallbackProvider.java:

~[spring-ai-mcp-

1.

0-

2

064812-

jar:

1.

0-SNAPSHOT] at org.springframework.ai.autoconfigure.mcp.client.McpClientAutoConfiguration.toolCallbacksDeprecated(McpClientAutoConfiguration.java:

~[spring-ai-mcp-client-spring-boot-autoconfigure-

1.

0-M

jar:

1.

0-M6] at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:

~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:

~[na:na] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.lambda$instantiate$0(SimpleInstantiationStrategy.java:

~[spring-beans-

6.

2.

jar:

6.

0] ... 23 common frames omitted从日志上分析是因为注册了相同的服务名spring-ai-mcp-client-getWeatherForecastByLocation和spring-ai-mcp-client-getAirQuality但是从代码上分析这两个服务我们都只注册了一次那为什么会报错呢其实这是 Spring AI 目前的一个 BUGSpring AI 提供了两个自动配置类去生成客户端工具处理 MCP 服务中 Tool 的获取分别是SseHttpClientTransportAutoConfiguration和SseWebFluxTransportAutoConfiguration。

这两个自动配置类提供了同步和异步两种方式本身应该是互斥的但是 Spring AI 对于互斥的处理上出了问题导致两个自动配置类都会加载。

SseWebFluxTransportAutoConfiguration的加载SseHttpClientTransportAutoConfiguration的加载两个自动配置类加载之后就会向提供 SSE 服务的 MCP 服务申请 Tool这样就导致同样的 Tool 被申请了两次自然就会重复了。

解决方案也非常简单在启动类上排除SseHttpClientTransportAutoConfiguration实现就可以了。

SpringBootApplication(exclude { org.springframework.ai.autoconfigure.mcp.client.SseHttpClientTransportAutoConfiguration.class }) publicclassApplication { ...再次通过命令启动程序进行测试Terminal windowmvn spring-boot:run这一次就输出了正确的结果

在 Spring AI Alibaba 的 Open Manus 中体验 MCPSpring AI Alibaba 中提供了 Open Manus 的实现整体架构如下在执行阶段会调用各种 Tool 来完成任务如果我们能使用 MCP 增加 Tool 的能力那势必能 Open Manus 如虎添翼接下来我们就来看一下 Open Manus 中是如何去使用 MCP 的。

源代码如下https://github.com/alibaba/spring-ai-alibaba/tree/main/community/openmanus添加依赖首先在项目中添加 Spring AI MCP starter 依赖dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-mcp-client-spring-boot-starter/artifactId version${spring-ai.version}/version /dependency配置 MCP 服务器在application.yml中已经配置了 MCP 服务器设置客户端请求服务端的超时时间为 1 分钟添加mcp-servers-config.json在 json 中配置了百度地图。

百度地图核心 API 现已全面兼容 MCP 协议是国内首家兼容 MCP 协议的地图服务商。

百度地图已经完成了 8 个核心 API 接口和 MCP 协议的对接 涵盖逆地理编码、地点检索、路线规划等。

使用百度地图的 MCP需要申请 akhttps://lbsyun.baidu.com/apiconsole/key。

{ mcpServers: { baidu-map: { command: npx, args: [ -y, baidumap/mcp-server-baidu-map ], env: { BAIDU_MAP_API_KEY: your_baidu_AK } } } }将其中BAIDU_MAP_API_KEY修改为申请的 ak。

使用 MCP 工具修改LlmService的构造方法源码在构造时直接通过 Spring 容器获取ToolCallbackProvider并加入到ChatClient.builder中public LlmService(ChatModel chatModel, ToolCallbackProvider toolCallbackProvider) { this.chatModel chatModel; this.planningChatClient ChatClient.builder(chatModel) .defaultSystem(PLANNING_SYSTEM_PROMPT) .defaultAdvisors(new MessageChatMemoryAdvisor(planningMemory)) .defaultAdvisors(new SimpleLoggerAdvisor()) .defaultTools(ToolBuilder.getPlanningAgentToolCallbacks()) .defaultTools(toolCallbackProvider) .build(); this.chatClient ChatClient.builder(chatModel) .defaultSystem(MANUS_SYSTEM_PROMPT) .defaultAdvisors(new MessageChatMemoryAdvisor(memory)) .defaultAdvisors(new SimpleLoggerAdvisor()) .defaultTools(ToolBuilder.getManusAgentToolCalls()) .defaultTools(toolCallbackProvider) .defaultOptions(OpenAiChatOptions.builder().internalToolExecutionEnabled(false).build()) .build(); this.finalizeChatClient ChatClient.builder(chatModel) .defaultSystem(FINALIZE_SYSTEM_PROMPT) .defaultAdvisors(new MessageChatMemoryAdvisor(finalizeMemory)) .defaultAdvisors(new SimpleLoggerAdvisor()) .build(); }通过defaultTools将 mcp 服务提供的 tool 交给ChatClient处理。

测试效果启动 OpenManus执行提示词规划下从上海到北京的路线。

但是如果这样写可能会触发 google search我们可以优化下提示词主动选择百度地图。

使用百度地图规划从北京市到上海市的路线执行程序之后可以看到规划之后的计划Steps:

[ ] [MANUS] 使用百度地图的地理编码服务获取北京市和上海市的经纬度坐标

[ ] [MANUS] 使用百度地图的路线规划服务计算从北京市到上海市的驾车路线

[ ] [MANUS] 分析并提供最终的路线信息包括距离、预计耗时等很显然这一次 OpenManus 选择了我们集成的百度地图 mcp server我们来看一下结果。

获取到了北京市和上海市的经纬度坐标Here is a summary of what we accomplished in this step: - For Beijing, we received the coordinates: Longitude (lng):

1

4133836971231, Latitude (lat):

39.

- For Shanghai, we received the coordinates: Longitude (lng):

1

48053886017651, Latitude (lat):

31.

计算从北京市到上海市的驾车路线Distance: The total distance of the route is 1,223,200 meters (approximately 1,223 kilometers). Duration: The estimated travel time is 50,592 seconds (approximately 14 hours and3 minutes).结果总距离约 1223 公里预计耗时约 12 小时 45 分钟主要途径京沪高速公路G2

总结作为 AI 开发领域的革命性突破Model Context ProtocolMCP重新定义了智能体与工具生态的交互范式。

通过标准化协议打通地图服务、代码仓库、数据库等核心工具链MCP 不仅解决了传统 AI 开发中跨平台对接的碎片化难题更以”开箱即用”的轻量化集成模式让开发者能够快速构建具备多模态能力的智能应用。

未来随着更多工具接入 MCP 生态开发者只需专注于业务逻辑创新而复杂的工具链整合将真正成为”看不见的底层能力”——这或许正是 AI 普惠化进程中最具实际意义的技术跃迁。

Spring AI 中的 MCP 支持可以让 Java 开发者轻松的将自己的应用发布为 MCP Server 或者是作为消费者去集成任意的 MCP Server 实现。

如何学习大模型 AI 由于新岗位的生产效率要优于被取代岗位的生产效率所以实际上整个社会的生产效率是提升的。

但是具体到个人只能说是“最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。

这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。

我在一线互联网企业工作十余年里指导过不少同行后辈。

帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限很多互联网行业朋友无法获得正确的资料得到学习提升故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】为什么要学习大模型我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。

2023年人才缺口已超百万凸显培养不足。

随着AI技术飞速发展预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。

加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。

大模型入门到实战全套学习大礼包

大模型系统化学习路线作为学习AI大模型技术的新手方向至关重要。

正确的学习路线可以为你节省时间少走弯路方向不对努力白费。

这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划带你从零基础入门到精通

大模型学习书籍文档学习AI大模型离不开书籍文档我精选了一系列大模型技术的书籍和学习文档电子版它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。

AI大模型最新行业报告2025最新行业报告针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。

大模型项目实战配套源码学以致用在项目实战中检验和巩固你所学到的知识同时为你找工作就业和职业发展打下坚实的基础。

大模型大厂面试真题面试不仅是技术的较量更需要充分的准备。

在你已经掌握了大模型技术之后就需要开始准备面试我精心整理了一份大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。

适用人群第一阶段10天初阶应用该阶段让大家对大模型 AI有一个最前沿的认识对大模型 AI 的理解超过 95% 的人可以在相关讨论时发表高级、不跟风、又接地气的见解别人只会和 AI 聊天而你能调教 AI并能用代码将大模型和业务衔接。

大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-

5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用该阶段我们正式进入大模型 AI 进阶实战学习学会构造私有知识库扩展 AI 的能力。

快速开发一个完整的基于 agent 对话机器人。

掌握功能最强的大模型开发框架抓住最新的技术进展适合 Python 和 JavaScript 程序员。

为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…第三阶段30天模型训练恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。

到此为止大概2个月的时间。

你已经成为了一名“AI小子”。

那么你还想往下探索吗为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…第四阶段20天商业闭环对全球大模型从性能、吞吐量、成本等方面有一定的认知可以在云端和本地等多种环境下部署大模型找到适合自己的项目/创业方向做一名被 AI 武装的产品经理。

硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…学习是一个过程只要学习就会有挑战。

天道酬勤你越努力就会成为越优秀的自己。

如果你能在15天内完成所有的任务那你堪称天才。

然而如果你能完成

% 的内容你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

黄金软件下载-黄金软件下载应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123