夜雨聆风学习资料网

ARTICLE · 1078804

AI实战|用WorkBuddy搭地图路书·环境与第一份AI提取

AI实战|用WorkBuddy搭地图路书·环境与第一份AI提取
出去玩总有一个让人扫兴的时刻:行程你都记得清清楚楚,想发一张标注好点的地图给朋友,却得在地图App里一个一个手动标。这个系列就是通过用WorkBuddy(下称WB)搭一套自己的路书工具来解决这个问题。开篇从零开始:新建一个空目录,你只需要对WB说话,代码它来写,直到浏览器里出现一张带有景点标注的地图。

从寻迹路书中,导出带有地图站点和路线的图片

* * *

1你要做出啥

本篇要搭通的是这样一条路:一段游记文字,经你在本地搭的一层中转,交给DeepSeek提取站点,再由高德地图把这些站点画成带序号的水滴点。它不联网存储、不需要登录,先把“AI读得懂行程”这件事跑通。

提示

学完你会:①用WB在本地搭一层中转,安全接上DeepSeek;②让AI把一段游记拆成按顺序排好的站点;③用高德地图把站点画成带序号的水滴。

提示

前置:装好Node与WB;一个DeepSeek密钥;一个高德网页端Key,外加与它配对的「安全密钥」。

提示

耗时:约40分钟,大头在两处配置:本地中转和地图接入。

整条数据流长这样,本篇的三步就沿着它走:

本篇要搭通的数据流—游记文字经本地中转交给DeepSeek,提出站点列表,再由高德地图打点

* * *

2开始前准备

- Node:去Node官网(nodejs.org)装长期支持版,装完在终端敲node -v,能出版本号就行;

- WorkBuddy(WB):装好并确认能正常对话;

- DeepSeek密钥:去DeepSeek开放平台注册一个,充一点点额度就够本篇用很久;

- 高德Key:去高德开放平台申请“网页端”类型的Key,同一个页面还会给你一串“安全密钥”,两个都记下来;

- 本地电脑上新建一个空目录,本篇的全部文件都放在这里。

* * *

3分步实现

第一步 · 让网页能安全地用上DeepSeek

这一步要做的事:网页能调DeepSeek,同时密钥不露出去。

网页直接去调DeepSeek会被浏览器拦下来(跨站请求默认不放行),密钥写进网页也等于把钥匙挂在门上。所以要请WB在本地搭一层中转:网页只跟这层中转说话,密钥留在中转这一侧。

对 WB 说

帮我在这个目录里起一个很小的本地服务,用Node写,用途是替我去调DeepSeek。要求:①我把一段文字交给它,它转给DeepSeek处理,再把结果原样带回来;②我的密钥不要写在代码里,单独留个地方,我以后自己填;③别装一堆依赖,一个文件、能跑起来就行;④文件开头写一行注释,说明它是干什么用的。

代码

本地中转服务(WB生成:藏密钥、绕开跨站限制)import express from 'express'const app = express(); app.use(express.json())app.post('/api/extract', async (req, res) => {const r = await fetch('https://api.deepseek.com/v1/chat/completions', {method: 'POST',headers: { Authorization: `Bearer ${process.env.DS_KEY}` },body: JSON.stringify({ model: 'deepseek-chat', messages: req.body.messages })})res.json(await r.json())})app.listen(3000)

效果

本地多了一层中转。网页只跟它说话,密钥留在它这一侧—翻遍网页源码,一条密钥都搜不到。

避坑

别把密钥直接写进网页代码。这层中转不是可选项:没有它,请求出不去,密钥也守不住。

第二步 · 让AI把游记拆成一条条站点

这一步要做的事:把“第一天到西湖,下午去灵隐寺,晚上住杭州”这样一段话,拆成按顺序排好的几站。

先看看这一步在成品里长什么样。下面是寻迹路书线上版的素材输入区-游记粘进去、带定位的照片拖进来都行:

寻迹路书线上版真实界面:素材输入区,游记粘进去、带定位的照片拖进来都行

AI提取的关键不在代码,在把要求讲清楚—只按我们说好的样子给结果,不要自由发挥。

对 WB 说

给上面那个服务再加一段活:我发一段中文游记给你,你把它拆成按顺序排好的站点。每条站点要有:地名、第几天(原文没写就算第1天)、大概时段(上午、下午、晚上这种),原文里提到的其他信息也留着。只把结果给我,不要解释、不要多余的话。缺的信息顺手补齐、按顺序编上号(后面画地图要用)。

代码

提取口径与结果整理(WB生成)const SYS = `从游记里挑出站点,仅返回结果:{"stops":[{"name","day","time","note"}]}`// 补默认值、按顺序编号;第 ⑤ 期再升级成正式结构function tidy(list){return list.map((s, i) => ({name: s.name, day: s.day || 1,time: s.time || '', note: s.note || '',no: i + 1}))}

提示

本篇只给站点定一份够用的说明:地名、第几天、时段、备注。

点下「生成」之后,AI干活的瞬间在真实产品里是这样的:

寻迹路书线上版真实界面:提交后 AI 正在逐项补全站点信息(地理/城市补全中)

第三步 · 把站点打到地图上

这一步要做的事:打开页面就能看到带序号的水滴点,地图自动缩放到刚好框住全部站点。

对 WB 说

在页面里画一张高德地图,把刚才整理好的站点标上去。要求:①每个站点一个水滴形图标,上面标序号,从1开始;②不同的天用不同颜色;③站点的位置你按地名自动查,查到哪个算哪个;④打开页面时自动缩放到刚好框住所有站点;⑤直接给我能跑的完整页面,密钥的位置单独留出来,我自己填。

代码

高德打点(起步版)const map = new AMap.Map('map', { zoom: 11 })stops.forEach((s, i) => {const m = new AMap.Marker({position: [s.lng, s.lat],content: `<div><span>${i + 1}</span></div>`})map.add(m)})map.setFitView()  // 自动缩放到框住所有点

效果

浏览器打开,带序号的站点已经按顺序排在地图上,缩放刚刚好-第1站在第2站前面,谁也不会插队。

4避坑与最佳实践

避坑

高德那串“安全密钥”必须和Key配对填全。漏了它,地图整片空白而且不报错,不少人在这儿一卡就是一下午。

效果

到这里,“AI读游记 + 地图打点”已经完整跑通。你有了整个系列的地基,往后每一期都是往它身上加能力。

5小结与延伸

这一篇,你把一段游记文字变成了地图上按顺序排好的站点:AI挑出地点,地图标出序号。下一篇我们给地图加上缩放、居中和图例,并把它导出成一张能直接发朋友圈的图片。

你手头想先做成路书的,是哪一段旅程?

推荐阅读

·高德地图 JS API 2.0 开发文档

·DeepSeek 开放平台 API 文档

成品直达 · 寻迹路书

你正在用 WorkBuddy 一行行搭的这套路书工具,线上已经有一个完整成品-—寻迹路书(xunji.online)。它把你要做的这些能力都做齐了:粘贴文字或拖入带有GPS照片,AI自动提取站点、生成真实地图路线;多日行程一键分天、地图与时间线联动;一键导出图片和HTML分享链接;还有用户社区可以提问交流。免费注册即用,邮箱加验证码登录,不用设密码。打开 www.xunji.online,30秒就能生成你的第一篇路书-你要做的每个功能,都能在那里直接看到跑通的样子。

相关学习资料