当前位置: 首页 > 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);}
}
http://www.lqws.cn/news/549361.html

相关文章:

  • Ubuntu系统Postman资源占用高怎么办?
  • Stable Diffusion入门-ControlNet 深入理解 第二课:ControlNet模型揭秘与使用技巧
  • 【软考--软件设计师】2.程序设计语言
  • mongodb生产备份工具PBM
  • opensuse安装rabbitmq
  • Transformer
  • 将ONNX模型转换为(OPENMV可用的格式)TensorFlow Lite格式
  • Spring Cloud 微服务(服务注册与发现原理深度解析)
  • python基于Django+mysql实现的图书管理系统【完整源码+数据库】
  • uv包管理常用命令
  • Stable Diffusion 3终极提示词库:2000个工业设计场景生成公式(2025企业级实战指南)
  • [Ethernet in CANoe]1--SOME/IP arxml文件格式的区别
  • 动手学Python:从零开始构建一个“文字冒险游戏”
  • 记忆化搜索(dfs+memo)无环有向图
  • ubuntu22上安装redis6
  • 【开发杂谈】Auto Caption:使用 Electron 和 Python 开发实时字幕显示软件
  • JAX study notes[7]
  • uniapp消息推送
  • Springboot中常用的注解(分层整理)
  • Redis主从复制原理
  • CI/CD的常规设置及核心原理
  • 【大数据】大数据产品基础篇
  • OpenCV图像添加水印
  • Java底层原理:深入理解JVM类加载机制与反射机制
  • nginx:配置反向代理后不生效
  • 智能实验室革命:Deepoc大模型驱动全自动化科研新生态
  • could not import google.golang.org/protobuf/proto
  • 前沿融合:机器学习如何重塑智能水泥基复合材料研发范式
  • 学习设计模式《十五》——模板方法模式
  • 多张图片生成PDF每张图片生成pdf的一页