构建地图能力智能互动应用
更新时间:2025-06-24
概览
用户在与大模型实时互动,进行语音对话时,可以实现 查询导航信息、发起导航、搜索周边点位 等和地图能力相关的问询,并通过客户端地图交互,完成对应需求
需求场景
地图导航
查询前往目的地的规划路线,发起实时导航,并通过智能互动语音播报导航信息。
互动示例:
输入 | 特征 |
---|---|
导航去香山 | 明确要去哪里 |
我要开车去香山 | 当前位置直接驾车导航到目的地 |
从香山去北京站怎么走 | 自动识别导航类型、自定义出发地 |
我要去故宫,中间先去西直门 | 带途经点导航 |
响应交互:给出优先规划结果,可跳转至路线规划页面,并选择路线、发起导航
你可以根据互动回调数据,自行设计响应交互流程及视觉,地图推荐场景亦是如此
地图推荐
查询当前位置或指定地点周边POI点位。
互动示例:
输入 | 特征 |
---|---|
推荐下附近的小吃 | 当前位置周边 |
最近的健身房在哪 | 强调首位,直接展示详情 |
帮我找找前门附近的酒店 | 目的地周边 |
1公里内有哪些公园 | 限制检索范围 |
搜索北京的图书馆 | 行政区范围内检索 |
方案概述
依赖资源
- BaiduChatAgent SDK:支持 function call 回调能力的百度智能云大模型实时互动SDK
- 地图SDK & 地图导航SDK:百度地图开放平台提供的客户端SDK
功能时序
-
发起问询:
- 与大模型互动过程中,BaiduChatAgent 根据输入内容,识别为地图类型问询,解析参数后通过接口回调给客户端
-
导航
- 4.1 & 4.2 回调参数中的各个地点,通过 地图SDK POI 检索,获取定位信息,当前位置用系统方法获取
- 4.4 利用 导航SDK 请求导航数据,打开新页面,加载路线规划结果视图
- 4.5 在规划页内发起导航、及导航进行交互
- 4.6~4.9 导航SDK 将导航播报文本回调给业务,用户调用 Agent 接口直接发送给 TTS 进行播报
- 4.10 导航交互完成后,用户关闭页面回到 Agent 交互流程
-
推荐
- 5.1 和导航一样,非当前位置的地点,通过 地图SDK POI 检索,获取定位信息;当前位置用系统方法获取
- 5.2~5.3 调用 地图SDK 请求检索结果
- 5.4 自定义列表视图,可在打开独立页面,加载地图底图后叠加展示
回调定义
大模型识别到用户输入为特定需求时,会通过 onFunctionCall 接口回调函数参数, 本节内容为大模型识别为地图类型问询后,回调给客户端的地图函数调用内容结构 接口回调 params 参数 json 字符串格式示例:
Plain Text
1"{\"session_id\":\"1744718758902\",\"content\":\"{\\\"function_name\\\":\\\"take_photo\\\",\\\"parameter_list\\\":[]}\"}"
以下定义说明为 content 中的内容
地图导航
- 函数名
map_navigate
- 参数列表
参数名 | 类型 | 是否必填 | 描述 | 值 |
---|---|---|---|---|
start_position | string | 否 | 导航起点 | |
navi_position | string | 是 | 导航目的地 | |
navi_type | string | 否 | 导航类型 | [drive(驾车)、bike(骑行)、walk(步行)] |
- content 示例
Plain Text
1{
2 "function_name": "map_navigate",
3 "parameter_list": [
4 {"start_position": "奥体中心"},
5 {"navi_position": "天安门"},
6 {"navi_type": "drive"}
7 ]
8}
地图推荐
- 函数名
map_poi_search
- 参数列表
参数名 | 类型 | 是否必填 | 描述 | 值 |
---|---|---|---|---|
search_type | string | 否 | 检索类型 | [area(城市或行政区)、nearby(周边)] |
center_position | string | 否 | 检索中心位置 | |
radius | number | 否 | 检索半径,单位为米 | 默认 1000 |
keyword | string | 是 | 检索关键词 | [drive(驾车)、bike(骑行)、walk(步行)] |
- content 示例
Plain Text
1{
2 "function_name": "map_poi_search",
3 "parameter_list": [
4 { "search_type": "nearby" },
5 { "center_position": "鸟巢" },
6 { "keyword": "餐厅" }
7 ]
8}
能力接入
地图能力配置
地图智能互动依赖百度地图开放平台的SDK能力,需要先在其平台上注册账号并创建应用,具体步骤如下:
- 前往百度地图开放平台,参考 流程指引 完成账号注册,并获取密钥(AK)
- 进入百度地图开放平台 控制台 ,参考 操作流程 创建应用,勾选所需服务,iOS 填写 bundleid;Android 填写包名、开发&测试版本 keysrore SHA1
- 进入百度地图开放平台 开发文档,按照下面的平台接入流程,下载对应资源进行集成
iOS 接入
Demo 体验
你可以直接通过 BaiduChatAgent Demo 体验地图智能互动能力
- 将地图相关 SDK 放在 BaiduChatAgent 的指定目录内,具体结构如下:
Plain Text
1demo
2 └── ChatAgentApp/
3sdk
4 └── Third
5 ├── MapSDK
6 │ ├── BaiduMapAPI_Base.framework
7 │ ├── BaiduMapAPI_Map.framework
8 │ ├── BaiduMapAPI_Search.framework
9 │ ├── BaiduMapAPI_Utils.framework
10 │ └── thirdlibs
11 │ ├── libcrypto.a
12 │ └── libssl.a
13 └── NaviSDK
14 ├── libbaiduNaviOpenSDK.a
15 ├── NaviResource
16 │ ├── baiduNaviSDK.bundle
17 │ └── mode.bundle
18 └── inc
- 打开 ChatAgentApp/ChatAgentApp/ios/funcall/MapNavigate/BNaviUtil.h 文件,修改 BNAVI_APP_KEY 为你应用的 AK
- 编译 ChatAgentApp 运行 Demo,在会话中与大模型进行对话
SDK 集成
为了构建你自己的带有地图只能互动能力得应用,需要先按照以下步骤完成必要的能力集成:
- 添加 BaiduChatAgent SDK 到你的工程
- 在 iOS导航SDK 页面下载 iOS导航SDK资源包 和 隐私清单文件
- 添加地图相关SDK到你的工程
- 参考 ChatAgentApp Demo 的
构建地图交互
为了实现地图交互,主要需要完成以下几个部分:
-
地图能力的初始化及鉴权:
- 参考 ChatAgentApp Demo 的 BNaviUtil 类的实现,并填充你自己的地图账号AK;
-
地理位置更新:
- 参考 BCALocationManager,或使用地图SDK的定位能力,在需要时更新当前位置
-
function call 回调对接:
- 参考 ChatAgentApp Demo 的 BCAFuncallHandler 类的实现,完成对函数参数解析和分发
- 参考 BCAMapNavigateHandler 和 BCAMapPoiSearchHandler, 完成对地图函数的处理逻辑
-
地图SDK能力交互、地图请求回调数据处理等
- 参考 BCAMapNavigateDriveModel,完成请求地图导航信息
- 参考 BCAMapNaviDriveViewController 和关联代码,完成路线规划数据展示与交互
- 参考 BCAMapPoiSearchViewController,完成基础地图视图呈现、添加POI点位信息