10分钟让你用SpringAI接入百度地图MCP服务

一、前言

在之前的文章中SpringAI MCP技术初探 我介绍了使用SpringAI 1.0.0-M6 自建Mcp-Client和Mcp-Server的案例,本文带着各位读者在前文的基础上10分钟完成百度地图MCP服务对接,让自己的大模型具备地理位置分析和算路能力。最终实现效果如下(请忽略丑陋的界面设计,毕竟这个界面也是大模型生成的HTML代码)

二、光速对接百度地图服务

2.1 了解百度地图MCP-Server对接手段

我们查看 lbs.baidu.com/faq/api?tit... 中的文档,按照步骤先启动百度地图的MCP-Server服务端,百度地图的MCP服务端目前提供了python和NodeJS两种实现。笔者这次使用的是Python版本的代码实现,一步步按照官方教程进行设置即可。

最终执行下述命令:

java 复制代码
uv run --with mcp[cli] mcp run map.py

像上图这样无任何异常出现则说明百度地图mcp-server正常运行(本文在末尾会简单分析下map.py的代码内容),然后你需要去lbsyun.baidu.com/apiconsole/... 申请一个AK,这在后面我们编写MCP-client程序的时候会用到。

2.2 引入SpringAI+SpringAI Alibaba

依赖清单可以直接参考SpringAI MCP技术初探 文中提到的github地址中的pom文件,重点依赖有两个

xml 复制代码
<dependency>
  <groupId>org.springframework.ai</groupId>
  <artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId>
  <version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>com.alibaba.cloud.ai</groupId>
  <artifactId>spring-ai-alibaba-starter</artifactId>
</dependency>

如果依赖下载有问题可以参考SpringAI 官方demo 设置好repository 地址。

然后直接修改项目中的 mcp-server.json 如下所示(请按照你的实际路径配置,mac系统无需填写绝对路径)

json 复制代码
{
  "mcpServers": {
    "baidu-map": {
      "command": "D:\\Program Files\\python3.12.3\\Scripts\\uv.exe",
      "args": [
        "run",
        "--with",
        "mcp[cli]",
        "mcp",
        "run",
        "D:\\work-space-python\\python-baidu-map\\baidu_map_mcp_server\\map.py"
      ],
      "env": {
        "BAIDU_MAPS_API_KEY": "填写百度地图的AK"
      }
    }
  }
}

用过Claude或者cursor对这样的配置肯定不陌生,只不过不同的是我们这次是自己写代码,用qwen大模型来和这些mcp-server对接。然后打开工程中的application.yaml 文件修改如下,利用SpringAI 的自动装配能力吗,为我们自动注入McpClient

json 复制代码
server:
  port: 9999
spring:
  ai:
    mcp:
      client:
        enabled: true
        name: call-mcp-server
        stdio:
          servers-configuration: classpath:mcp-server.json
    dashscope:
      api-key: 通义千问的APIKEY

2.3 配置ChatClient

java 复制代码
private final ChatClient chatClient;
private final ChatMemory chatMemory = new InMemoryChatMemory();


public ChatController(ChatClient.Builder chatClientBuilder, 
                      List<McpSyncClient> mcpSyncClients, 
                      ToolCallbackProvider tools) {
    this.chatClient = chatClientBuilder
    // 关键在这里,断点调试处
    .defaultTools(tools)
    .defaultOptions(DashScopeChatOptions.builder().withTopP(0.7).build())
    .build();
}



@RequestMapping(value = "/generate_stream", method = RequestMethod.GET)
public Flux<ChatResponse> generateStream(HttpServletResponse response, @RequestParam("id") String id, @RequestParam("prompt") String prompt) {
    response.setCharacterEncoding("UTF-8");
    var messageChatMemoryAdvisor = new MessageChatMemoryAdvisor(chatMemory, id, 10);
    return this.chatClient.prompt(prompt)
    .advisors(messageChatMemoryAdvisor)
    .stream()
    .chatResponse();
}

读过笔者上一篇文章的对这些代码应该不陌生,几乎无任何改动。

2.4 启动应用测试效果

直接启动应用,笔者代码里面存在一个index.html,借助SpringBoot的thymeleaf实现了一个简单的界面,启动之后直接提问地图问题:

返回的格式是markdown的格式,观察对话响应内容可以发现其使用到了百度地图的MCP服务

三、部分细节研讨

1、大模型是怎么知道百度地图的mcp服务能提供哪些能力呢?

我们在ChatClient创建的位置打上断点即可发现:

这里定义了8个工具,如果读者细心看下百度地图map.py的代码内容的话,你就会发现其正好使用了8个@mcp.tool() 注解,使用的是Python的 FastMCP 技术方案,代码的大致内容还是去调用百度地图提供的http web服务API。

2、"黑盒"一般的大模型

仔细体验发现目前我们虽然可以做到和任何McpServer对接但是还有几个不容忽视的问题:

  • 无法追溯工具链调用细节,上面的案例中我们无法得知大模型和MCP-Server的沟通细节,无明显的数据交互日志,熟悉langChain开发的都知道,在python开发领域观察函数式调用有一个平台叫做langfuse(langfuse.com/docs) 目前SpringAI 暂时还不能很直观的获取大模型与McpServer的沟通细节,也不能获取大模型的调用细节,这点还得等待相关工具完善
  • 我们无法去评估大模型生成内容的准确性,简单来说我们不好评估大模型生成效果,评估大模型的生成效果是一门技术,目前SpringAI提供了Evaluator 它的思路是用另一个大模型来评估目标模型的生成效果。
相关推荐
触底反弹10 分钟前
🔥 2026 大模型选择指南:别再只看 Benchmark 了,这些维度才是关键!
人工智能·面试
神奇霸王龙28 分钟前
GB/T 46886 闭环屠夫:5 旗舰多模态 LLM 工业质检实测
人工智能·计算机视觉·ai·开源·ai编程·本地部署
南讯股份Nascent1 小时前
洽洽全域会员项目启动会圆满召开
大数据·人工智能
大郭鹏宇1 小时前
基于 LangGraph 构建智能分诊系统(一):项目概述与环境搭建
大数据·人工智能·microsoft·langchain
小林ixn1 小时前
大模型的“高考成绩单”:读懂Benchmark,选对真·生产力模型
人工智能·llm·测试
冬奇Lab1 小时前
AI 评测系列(04):RAG 评测——RAGAS 四指标实战与一个反直觉发现
人工智能·llm·agent
三声三视1 小时前
uni-app 鸿蒙端传参变成 [object Object]?顺着源码追到 ArkTS router 底层才搞明白
人工智能·ai·uni-app·aigc·ai编程·harmonyos
fthux2 小时前
“装闭”,让装修套路“装”不下去
人工智能·ai·开源·github·open source
andxe2 小时前
安科士 AndXe 技术博客:400G QSFP112 SR4 光模块|AI 算力与超算短距互联最优方案
网络·人工智能·光模块·光通信
weixin_446260853 小时前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask