当前位置: 首页 > news >正文

LangChain4j(20)——调用百度地图MCP服务

申请百度地图服务

控制台 | 百度地图开放平台

创建应用:

注意:勾选MCP服务,白名单直接设置为0.0.0.0/0

 

百度地图MCP服务介绍

MCP Server | 百度地图API SDK

  1. 地理编码 map_geocode

    • 将地址解析为对应的位置坐标
    • 输入: address 地址信息
    • 输出: location
  2. 逆地理编码 map_reverse_geocode

    • 将坐标点转换为对应语义化地址
    • 输入: location 经纬度坐标
    • 输出: formatted_addressuidaddressComponent
  3. 地点检索 map_search_places

    • 多种场景的地点以及POI检索, 包括城市检索、圆形区域检索
    • 输入:
      • query 检索关键词
      • location 圆形检索的中心点
      • radius 圆形检索的半径
      • region 城市检索指定城市
    • 输出: POI列表, 包含namelocationaddress
  4. 地点详情检索 map_place_details

    • 根据POI的uid, 检索POI详情信息
    • 输入: uid
    • 输出: POI详情, 包含namelocationaddressbrandprice
  5. 批量算路 map_distance_matrix

    • 根据起点和终点坐标, 计算所有起终点组合间的路线距离和行驶时间
    • 输入:
      • origins 起点经纬度列表
      • destinations 终点经纬度列表
      • mode 出行类型,可选取值包括 drivingwalkingriding, 默认使用driving
    • 输出: 每条路线的耗时和距离, 包含distanceduration
  6. 路线规划 map_directions

    • 根据起终点坐标规划出行路线和耗时, 可指定驾车、步行、骑行、公交等出行方式
    • 输入:
      • origin 起点经纬度
      • destination 终点经纬度
      • model 出行类型, 可选取值包括 drivingwalkingridingtransit, 默认使用driving
    • 输出: 路线详情,包含stepsdistanceduration
  7. 天气查询 map_weather

    • 根据行政区划编码或经纬度坐标查询天气 (通过location经纬度坐标查询天气需用户拥有高级权限)
    • 输入:
      • district_id 行政区划编码
      • location 经纬度坐标
    • 输出: 天气信息, 包含temperatureweatherwind
  8. IP定位 map_ip_location

    • 根据请求的IP获取当前请求的位置 (定位到城市), 如果请求参数ip为IPv6则需要高级权限
    • 输入: ip 请求的IP地址
    • 输出: 当前所在城市和城市中点location
  9. 实时路况查询 map_road_traffic

    • 查询实时交通拥堵情况, 可通过指定道路名和区域形状(矩形, 多边形, 圆形)进行实时路况查询。
    • 输入:
      • model 路况查询类型 (可选值包括roadboundpolygonaround, 默认使用road)
      • road_name 道路名称和道路方向, model=road时必传 (如:朝阳路南向北)
      • city 城市名称或城市adcode, model=road时必传 (如:北京市)
      • bounds 区域左下角和右上角的经纬度坐标, model=bound时必传 (如:39.912078,116.464303;39.918276,116.475442)
      • vertexes 多边形区域的顶点经纬度坐标, model=polygon时必传 (如:39.910528,116.472926;39.918276,116.475442;39.916671,116.459056;39.912078,116.464303)
      • center 圆形区域的中心点经纬度坐标, model=around时必传 (如:39.912078,116.464303)
      • radius 圆形区域的半径(米), 取值[1,1000]model=around时必传 (如:200)
    • 输出: 路况信息, 包含road_nametraffic_condition
  10. POI智能提取 map_poi_extract

    • 需要高级权限才可使用, 根据文本内容提取POI相关信息。
    • 输入: text_content 用于提取POI的文本描述信息 (完整的旅游路线,行程规划,景点推荐描述等文本内容, 例如: 新疆独库公路和塔里木湖太美了, 从独山子大峡谷到天山神秘大峡谷也是很不错的体验)
    • 输出:相关的POI信息,包含namelocation

通过Stdio方式调用

{"mcpServers": {"baidu-map": {"command": "npx","args": ["-y","@baidumap/mcp-server-baidu-map"],"env": {"BAIDU_MAP_API_KEY": "{您的AK}"}}}
}

测试代码:

package com.renr.langchain4jnew.app2;import com.renr.langchain4jnew.constant.CommonConstants;
import dev.langchain4j.community.model.zhipu.ZhipuAiChatModel;
import dev.langchain4j.mcp.McpToolProvider;
import dev.langchain4j.mcp.client.DefaultMcpClient;
import dev.langchain4j.mcp.client.McpClient;
import dev.langchain4j.mcp.client.transport.McpTransport;
import dev.langchain4j.mcp.client.transport.stdio.StdioMcpTransport;
import dev.langchain4j.service.AiServices;
import dev.langchain4j.service.tool.ToolProvider;import java.time.Duration;
import java.util.List;
import java.util.Map;/*** @Title: AI Service基本使用* @Author 老任与码* @Date 2025-04-12 9:25*/
public class AppMPC {public static void main(String[] args) {// 创建智谱的模型对象ZhipuAiChatModel zhipuAiChatModel = ZhipuAiChatModel.builder()// 模型key.apiKey(CommonConstants.API_KEY)// 精确度.temperature(0.9).model("GLM-4-Flash").maxRetries(3).logRequests(true).logResponses(true).callTimeout(Duration.ofSeconds(60)).connectTimeout(Duration.ofSeconds(60)).writeTimeout(Duration.ofSeconds(60)).readTimeout(Duration.ofSeconds(60)).build();McpTransport transport4 = new StdioMcpTransport.Builder().command(List.of("C:/Program Files/nodejs/npx.cmd", "-y", "@baidumap/mcp-server-baidu-map")).environment(Map.of("BAIDU_MAP_API_KEY", "申请key"))// .logEvents(true) // 仅当你想在日志中查看流量时.build();McpClient mcpClient4 = new DefaultMcpClient.Builder().transport(transport4).build();ToolProvider toolProvider = McpToolProvider.builder().mcpClients(List.of(mcpClient4)).build();Assistant assistant = AiServices.builder(Assistant.class).chatLanguageModel(zhipuAiChatModel).toolProvider(toolProvider).build();// 发送消息String info = assistant.chat("郑州的经纬度");// String info = assistant.chat("郑州近期的天气情况");System.out.println(info);}
}

输出:

通过SSE调用

https://lbsyun.baidu.com/faq/api?title=mcpserver/quickstart

{"mcpServers": {"baidu-maps": {"url": "https://mcp.map.baidu.com/sse?ak=您的AK"}}
}
package com.renr.langchain4jnew.app2;import com.renr.langchain4jnew.constant.CommonConstants;
import dev.langchain4j.community.model.zhipu.ZhipuAiChatModel;
import dev.langchain4j.mcp.McpToolProvider;
import dev.langchain4j.mcp.client.DefaultMcpClient;
import dev.langchain4j.mcp.client.McpClient;
import dev.langchain4j.mcp.client.transport.McpTransport;
import dev.langchain4j.mcp.client.transport.stdio.StdioMcpTransport;
import dev.langchain4j.service.AiServices;
import dev.langchain4j.service.tool.ToolProvider;import java.time.Duration;
import java.util.List;
import java.util.Map;/*** @Title: AI Service基本使用* @Author 老任与码* @Date 2025-04-12 9:25*/
public class AppMPC {public static void main(String[] args) {// 创建智谱的模型对象ZhipuAiChatModel zhipuAiChatModel = ZhipuAiChatModel.builder()// 模型key.apiKey(CommonConstants.API_KEY)// 精确度.temperature(0.9).model("GLM-4-Flash").maxRetries(3).logRequests(true).logResponses(true).callTimeout(Duration.ofSeconds(60)).connectTimeout(Duration.ofSeconds(60)).writeTimeout(Duration.ofSeconds(60)).readTimeout(Duration.ofSeconds(60)).build();McpTransport transport5 = new HttpMcpTransport.Builder().sseUrl("https://mcp.map.baidu.com/sse?ak=申请的key") // SSE 事件channel地址//.logRequests(true) // 开启请求日志//.logResponses(true) // 开启响应日志.build();McpClient mcpClient5 = new DefaultMcpClient.Builder().transport(transport5).build();ToolProvider toolProvider = McpToolProvider.builder().mcpClients(List.of(mcpClient5)).build();Assistant assistant = AiServices.builder(Assistant.class).chatLanguageModel(zhipuAiChatModel).toolProvider(toolProvider).build();// 发送消息String info = assistant.chat("郑州的经纬度");// String info = assistant.chat("郑州近期的天气情况");System.out.println(info);}
}

相关文章:

  • 车载诊断架构--- 车载诊断中的引导式诊断
  • Node.js到底是什么
  • opi是什么
  • 面向大语言模型幻觉的关键数据集:系统性综述与分类法_DEEPSEEK
  • virtual box 配置ubuntu 22.04网络与SSH服务
  • 大模型在急性重型肝炎风险预测与治疗方案制定中的应用研究
  • 力扣刷题(第七十天)
  • 云计算与人工智能的融合:从弹性算力到智能云的IT新革命
  • CentOS 7 编译ClickHouse 24.8完整指南
  • 七天学会SpringCloud分布式微服务——04——Nacos配置中心
  • AI助力游戏设计——从灵感到行动-靠岸篇
  • 蓝牙工作频段与跳频扩频技术(FHSS)详解:面试高频考点与真题解析
  • 【开发杂谈】Auto Caption:使用 Electron 和 Python 开发实时字幕显示软件
  • 024 企业客户管理系统技术解析:基于 Spring Boot 的全流程管理平台
  • PILCO: 基于模型的高效策略搜索方法原理解析
  • 2025.6.27总结
  • 前端Promise从入门到精通全指南
  • fastadmin表格数据逗号分隔的id关联展示数据名称并实现搜索
  • 基于Versoria函数优化协方差更新的改进扩展卡尔曼滤波(MVC-EKF)与经典EKF的对比,附matlab源代码|订阅专栏后可查看完整代码
  • ERP知识有价值,更有温度!