项目介绍
Errand Walker 把一份乱糟糟的待办清单变成一次步行。像你往笔记应用里打字那样输入清单,例如 pharmacy、post office、buy rice,应用会用一行回答:几个站点、步行多久、开车多久,以及你能不能省掉开车。它是一个手机优先的网页应用,面向在 OpenStreetMap 覆盖不错的地方有一堆小事要办的任何人,它还能理解一些印度尼西亚语输入。
一个小型开放权重模型只做一件事:Gemma 3 1B,由 llama.cpp 运行,把每件差事映射到十个固定类别之一(pharmacy、post office、groceries、ATM、bakery、hardware、laundry、cafe、clinic、market)或 other,输出被约束在一个 JSON schema 内。OpenStreetMap 数据通过 Overpass 找到最近的匹配地点,OpenRouteService 规划一条环线。模型周围有三个确定性层:一个带模糊匹配的关键词解析器,在明确匹配时会覆盖模型;一个接地检查,会丢弃任何与输入文本没有共同词的模型差事;以及当模型宕机时回退到只用关键词解析器。模型不需要 API 密钥,也没有按次调用成本,用捆绑的模型时,没有任何 AI 厂商能看到差事文本。
作者诚实地测量了解析器:在一个 26 个案例(57 件预期差事)的开发集上,原始模型得分为 82.5%,在一个 15 个案例(26 件差事)的留出集上为 96.2%,附带说明是留出案例更短、更简单。Vibe-coded 证据,作者本人在 DEV 上的原话(2026 年 10 月 11 日):「I built this with Claude Code.」(我用 Claude Code 构建了这个。)注意:该帖的 README 摘录还说该应用是用一个 AI 编程智能体(OpenCode,模型 claude-sonnet-5-5)根据一份人工编写的产品规格构建的,所以构建过程涉及两种说法;aiTools 按帖子 AI 使用部分中明确的第一人称句子记录为 Claude Code。GitHub stars:2026 年 10 月 28 日检查时为 0。
诚实的局限:作者没有完成一次计时步行来对比预测和真实分钟数,所以分钟数字是预测,而不是实测的步行。位置确实会离开设备:服务器把取整到三位小数的起点发送给 Overpass,把确切起点发送给 OpenRouteService,尽管服务器不存储也不记录坐标或差事文本,应用没有分析、没有 cookies。OpenStreetMap 的质量是真正的上限:在一次冒烟测试中,buy rice 被解析到一家被标记为日用杂货店的 batik 商店。演示运行在 Render 上(1 CPU / 2 GB),安静一段时间后的首次加载会很慢,因为要加载模型;演示模式使用印度尼西亚 Yogyakarta 市中心的一个固定公共地标,所以演示请求携带的是那个点,而不是你的位置。