作者: 偶尔上线经常挺尸
发布时间: 已于 2026-04-14 10:17:27 修改
来源: https://blog.csdn.net/luoyin114514/article/details/160118133
当AI学会“看地图”,出行规划只需一句话
想象这样一个场景:你对手机说“帮我规划一个周末北京一日游,要轻松一点的路线,中午想吃烤鸭”,AI自动生成行程、在地图上标注景点、规划路线、推荐餐厅,最后还能一键分享给同行好友。
这不再是科幻电影里的桥段。
2026年3月,腾讯地图V11.0大版本上线,首次推出面向“多人出行”场景的AI一站式行程管理功能。与此同时,腾讯位置服务联合CSDN发起了以“AI赋能,重塑地图智能新体验”为主题的开发者征文大赛,鼓励开发者将大模型能力与地图服务深度融合。
本文将从零开始,手把手带你构建一个AI智能行程助手——用自然语言驱动地图服务,让AI成为你的专属旅行规划师。
技术栈预览:
在开始编码之前,先聊聊技术选型的考量。
MCP(Model Context Protocol)是当前AI应用开发中的热门协议,它解决了大模型与外部工具之间的“语言不通”问题。腾讯位置服务官方推出了基于MCP协议的MCP Server,开发者无需在本地部署服务,简单配置即可让大模型调用地图能力。
MCP Server中集成了以下核心工具:
MCP的核心价值:大模型不需要知道如何调用HTTP API、如何解析JSON、如何处理错误——这些都由MCP Server封装好了。AI只需理解用户的自然语言意图,选择对应的工具,传入参数即可。
如果只做纯前端的地图展示,直接调用JavaScript API就够了。但我们的目标是让AI理解用户意图并自动调用地图能力,这需要:
因此,本文方案的核心是:大模型作为“大脑”,地图服务作为“手脚”。
在开始编码前,需要完成以下准备工作:
注意:MCP Server依赖WebServiceAPI,如果Key未开启对应权限,调用会失败。
这是整个项目的核心——让大模型能够“调用”地图服务。
MCP Server连接配置:
腾讯位置服务MCP Server已在腾讯云托管,采用SSE方式连接,无需本地部署。配置步骤如下:
javascript
// MCP Server连接配置示例(以Claude Desktop为例)
{
"mcpServers": {
"tencent-lbs": {
"url": "https://mcp.tencent.com/lbs/sse",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
配置完成后,大模型会自动识别MCP Server中提供的工具。当用户输入自然语言查询时,大模型会:
以“搜索附近咖啡馆”为例:
用户输入:“附近有哪些适合办公的咖啡馆?”
大模型内部处理流程:
当AI返回POI数据或路线规划结果后,我们需要在地图上将其可视化展示。
初始化地图:
javascript
// 引入腾讯地图JavaScript API GL
// 在HTML中引入脚本
<script charset="utf-8" src="https://map.qq.com/api/gljs?v=1.exp&key=YOUR_KEY"></script>
// 初始化地图
const map = new TMap.Map(document.getElementById('container'), {
center: new TMap.LatLng(39.908823, 116.397470), // 北京天安门
zoom: 12
});
在地图上标注POI点:
javascript
// 添加标记点
const marker = new TMap.MultiMarker({
map: map,
geometries: [{
id: '1',
styleId: 'poi',
position: new TMap.LatLng(39.908823, 116.397470),
properties: {
title: '天安门广场'
}
}]
});
// 添加信息窗口
const infoWindow = new TMap.InfoWindow({
map: map,
position: new TMap.LatLng(39.908823, 116.397470),
content: '<div><strong>天安门广场</strong><br>开放时间:全天</div>'
}).open();
绘制路线:
javascript
// 路线规划结果可视化
const polyline = new TMap.MultiPolyline({
map: map,
geometries: [{
id: 'route',
styleId: 'route',
paths: routePoints, // 从路线规划API获取的坐标点数组
properties: {
distance: '5.2km',
duration: '20分钟'
}
}],
styles: {
'route': new TMap.PolylineStyle({
color: '#3777FF',
width: 6,
borderWidth: 2,
borderColor: '#FFFFFF'
})
}
});
用户输入:“帮我规划一个杭州周末两日游,第一天想去西湖和灵隐寺,第二天想去西溪湿地,住宿在湖滨银泰附近,要轻松一点的节奏。”
AI处理流程:
Step 1 - 解析用户需求:
Step 2 - 调用地图服务:
Step 3 - 生成行程并可视化:
注:以下为Demo运行效果的文字描述,实际运行截图请见文末链接。
界面一:对话输入界面 用户输入自然语言查询,AI实时解析意图并调用地图服务。
界面二:地图可视化界面
界面三:行程总结卡片
这是整个方案中最核心的技术难点。用户输入是千变万化的自然语言,如何从中准确提取结构化参数?
方案一:大模型原生能力 使用支持Function Calling/Tool Calling的大模型(如Claude 3.5、GPT-4o),定义好工具的参数schema,让模型自动完成参数提取。
javascript
// 定义周边搜索工具的参数schema
{
"name": "searchNearby",
"description": "搜索指定位置周边的POI",
"parameters": {
"type": "object",
"properties": {
"keyword": { "type": "string", "description": "搜索关键词,如咖啡馆、餐厅" },
"location": { "type": "string", "description": "中心点坐标,格式:lat,lng" },
"radius": { "type": "number", "description": "搜索半径,单位米,默认1000" }
},
"required": ["keyword"]
}
}
方案二:提示词工程 如果使用的模型不支持Function Calling,可以通过精心设计的提示词引导模型输出JSON格式的参数。
这是腾讯地图V11.0重点优化的场景。实现思路:
python
# 汇合点推荐算法伪代码
def recommend_meeting_point(locations):
# locations: 所有参与者的位置坐标列表
center = calculate_geometric_center(locations)
# 搜索中心点周边的POI
pois = search_pois_nearby(center, types=["cafe", "subway", "mall"])
# 计算每个POI到各出发点的总距离
for poi in pois:
total_distance = sum(distance(poi, loc) for loc in locations)
poi["total_distance"] = total_distance
# 按总距离排序,返回最优结果
return sorted(pois, key=lambda x: x["total_distance"])[0]
在实际应用中,同一个起点和终点的路线规划结果短时间内不会变化。可以建立缓存机制:
bash
# 克隆项目
git clone https://github.com/yourname/ai-travel-planner.git
# 安装依赖
npm install
# 配置环境变量
# 创建.env文件,填入以下内容
echo "TENCENT_MAP_KEY=你的Key" >> .env
echo "AI_API_KEY=你的大模型API Key" >> .env
# 启动开发服务器
npm run dev
text
ai-travel-planner/
├── src/
│ ├── index.html # 主页面
│ ├── app.js # 主逻辑:AI对话+地图交互
│ ├── map-service.js # 腾讯地图服务封装
│ ├── mcp-client.js # MCP协议客户端
│ └── styles.css # 样式
├── demo-screenshots/ # Demo截图
└── README.md # 项目说明
暂无,后续将会上架微信公众号。请关注:第404号实验室或扫描下文二维码
坑1:坐标格式不统一
腾讯位置服务API有的返回lat,lng字符串,有的返回{lat, lng}对象。建议统一封装转换函数。
坑2:MCP调用超时 某些大模型响应较慢,建议设置合理的超时时间(推荐30秒),并在前端展示“AI正在思考”的加载状态。
坑3:POI搜索结果过多 不加限制可能返回几十个结果,前端渲染压力大。建议:
本文从零开始,完整实现了一个AI智能行程助手,核心流程如下:
text
用户自然语言输入
↓
大模型意图识别(MCP工具选择)
↓
调用腾讯位置服务API(POI搜索/路线规划/天气查询)
↓
结果整合与自然语言生成
↓
地图可视化展示(标记点/路线/信息窗口)
技术要点回顾:
参赛感受: 这次腾讯位置服务开发者征文大赛提供了一个难得的实战机会。从选题到开发再到文档撰写,整个过程让我对“AI+地图”这个方向有了更深的理解。正如活动主题所说,地图正在从单纯的“工具”进化为能思考、会对话的“大脑”。
下一步计划:
如果你也对AI+地图感兴趣,欢迎一起交流讨论!
项目GitHub地址:评论区见 Demo演示视频:微信关注:第404号实验室
📌 参赛信息