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

发布于:2025-06-28 ⋅ 阅读:(23) ⋅ 点赞:(0)

申请百度地图服务

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

创建应用:

注意:勾选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);

    }
}

网站公告

今日签到

点亮在社区的每一天
去签到