作者: LayJustDoIt 发布时间: 已于 2026-04-12 23:07:16 修改
来源: https://blog.csdn.net/ly123963/article/details/160089384
有时候我会觉得,地图产品其实已经很强了,但还有一个地方始终不太顺手:它很会找点,但不一定真的懂人。真实生活里的需求,往往不是“搜咖啡馆”“搜公园”这么简单,而是“我想找一个适合独自办公两小时、离地铁近一点的咖啡馆”,或者“周末想和朋友吃饭再散步,帮我安排一个轻松点的路线”。基于这个想法,我做了一个自然语言地图推荐与轻行程规划助手,用 Spring Boot 组织后端链路,结合 AI 的自然语言理解能力与腾讯地图的空间展示能力,把一句更像人话的需求,落成一个可视化、可理解、可执行的结果页。
最近这段时间,我一直在想一件事:地图搜索能不能更懂“场景”一点。
平时我们用地图,大多数时候还是在输入关键词。比如搜“咖啡馆”“火锅”“公园”“地铁站”。但真实生活里的需求,很少这么短平快。我们更常说的是:
• 我在望京附近,想找一个适合独自办公两小时的咖啡馆,最好离地铁近一点。
• 周末想在国贸附近和朋友吃饭再散步,时间大概下午到晚上,人均 150 左右,帮我规划一个轻松点的路线。
你会发现,用户真正表达的是一个完整场景,而不是一个孤立关键词。所以这次我做的,不是“更强的关键词搜索”,而是一个更像真实生活的地图助手。
这个 Demo 的目标很克制,不追求做成大而全的平台,而是先把最小闭环跑通:
自然语言输入 → AI 解析需求 → 推荐地点 → 生成推荐理由 → 腾讯地图展示 → 输出轻量行程建议
我更看重的不是把功能堆得多复杂,而是验证这件事:一句更像人话的需求,能不能被系统接住,并落成一个真正可用的结果页。
整个系统我大致拆成五层:
项目技术栈并不复杂:Java 8、Spring Boot、Thymeleaf、原生 HTML/CSS/JS,再加上腾讯地图 JavaScript API。这里我没有上复杂前端框架,主要是想尽快做出一个能跑通的 demo。
为了让 Demo 更像真实项目,我固定了两个最容易让人代入的场景。
场景 A:望京咖啡馆办公推荐 用户输入:“我在望京附近,想找一个适合独自办公两小时的咖啡馆,最好离地铁近一点。” 系统会解析出:城市=北京、位置=望京、类别=咖啡馆、场景=独自办公、偏好=安静/离地铁近,然后返回几个候选地点,并补一段推荐理由,告诉用户为什么推荐这些点。
场景 B:国贸吃饭 + 散步轻行程 用户输入:“周末想在国贸附近和朋友吃饭再散步,时间大概下午到晚上,人均 150 左右,帮我规划一个轻松点的路线。” 这个场景更接近日常生活,因为它不是找一个点,而是找一个顺下来的安排。系统会先解析组合需求,再返回餐饮点、散步点、推荐顺序,并用地图把空间关系表达出来。
下面这几张图,是当前版本已经跑通后的真实页面效果。第一张是首页空态,第二张是场景 A 的结果页,第三张是场景 B 的结果页。从页面上能看到:输入区、解析结果、推荐地点、推荐理由、腾讯地图展示以及轻行程规划。

图 1 项目首页空态:用户可以直接输入自然语言需求,或点击两个示例场景按钮快速体验。

图 2 场景 A 结果页:望京咖啡馆办公推荐,页面展示了解析结果、推荐地点卡片以及真实腾讯地图底图。

图 3 场景 B 结果页:国贸吃饭 + 散步轻行程,系统给出地点组合、推荐理由以及更接近真实生活的路线表达。
📹 嵌入式视频: https://live.csdn.net/v/embed/521356
演示 demo
1)Java 8 兼容性问题 AI 生成 Java 代码时,经常会顺手写出 var、Map.of()、List.of()、readAllBytes() 这些写法,但项目环境还是 Java 8,这一块一开始就修了不少。
2)资源文件读取问题 Prompt 模板放在 resources 下面,本地开发时不一定暴露问题,但一打包成 JAR,读取方式如果偷懒,很容易失效。后面这里也专门修过一轮。
3)Thymeleaf 模板和 JSON 注入 看起来是个轻页面,实际上模板变量注入、前端 JSON 输出、条件渲染这些地方特别容易踩坑。页面没完全崩,但地图初始化、交互逻辑都可能被带坏。
4)腾讯地图接入时 API 版本混用 这是最典型的坑。一开始地图区域一直空白,最后排查发现根因不是后端,不是数据,而是前端把地图 SDK 和 API 写法混用了。统一成匹配版本后,底图和 Marker 才真正正常显示出来。
其实一开始我用的是一个“模拟地图展示区”来跑通逻辑。那一版也能演示,也能截图,但总感觉差一点意思。因为这个项目本身就是“AI + 地图”,如果地图部分只是静态模拟面板,说服力始终不够。
后面补上腾讯地图真实接入之后,差别非常明显:页面更像产品,结果更有空间表达能力,录屏时也更容易让人理解这不是概念图,而是真正跑起来的 Demo。对这个项目来说,真实地图底图和 Marker 的价值,远大于再加几层页面装饰。
这次我做的这个“自然语言地图推荐与轻行程规划助手”,本质上是一个小而完整的实战 Demo。它做的事情并不夸张,但我觉得很有意思:用自然语言接住真实需求,用 AI 做意图理解,用推荐结果承接场景,用腾讯地图做空间表达,再用轻量行程规划把结果串起来。
从工程复杂度上看,它不是最难的项目;但从方向验证的角度,我反而觉得它挺有价值。至少它说明了一件事:地图体验,不一定非要从关键词开始,完全可以从一句更像人话的需求开始。
欢迎在评论区聊聊,你觉得“自然语言地图助手”最适合落地到哪些场景?
比如约会路线、探店、遛娃、周末短途、出差临时规划,或者你觉得更有意思的方向。