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 它的思路是用另一个大模型来评估目标模型的生成效果。
相关推荐
DFminer22 分钟前
【LLM】fast-api 流式生成测试
人工智能·机器人
咖啡啡不加糖27 分钟前
Redis大key产生、排查与优化实践
java·数据库·redis·后端·缓存
郄堃Deep Traffic35 分钟前
机器学习+城市规划第十四期:利用半参数地理加权回归来实现区域带宽不同的规划任务
人工智能·机器学习·回归·城市规划
大鸡腿同学1 小时前
纳瓦尔宝典
后端
GIS小天1 小时前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月7日第101弹
人工智能·算法·机器学习·彩票
阿部多瑞 ABU1 小时前
主流大语言模型安全性测试(三):阿拉伯语越狱提示词下的表现与分析
人工智能·安全·ai·语言模型·安全性测试
cnbestec2 小时前
Xela矩阵三轴触觉传感器的工作原理解析与应用场景
人工智能·线性代数·触觉传感器
不爱写代码的玉子2 小时前
HALCON透视矩阵
人工智能·深度学习·线性代数·算法·计算机视觉·矩阵·c#
sbc-study2 小时前
PCDF (Progressive Continuous Discrimination Filter)模块构建
人工智能·深度学习·计算机视觉