拍一张坏掉的长椅、溢出的垃圾桶或者破损的路面,加一句备注和位置,一个开放权重的 Gemma 模型会生成描述,帮你建一份报告。下次散步时再拍一张,报告里就会留下两次观察,以及一份对比:哪些情况新增了、消失了、没变。

这个叫 FieldIssue 的工具,核心动作不是拍照,是回访。一张照片能记录问题,但带日期的序列才能让人跟进它。模型可以建议一个状态,但必须由人明确地把报告标记为已解决。

打开网易新闻 查看精彩图片

这个区分在证据没用的时候同样成立。把同一张照片上传两次,会得到「重复照片——没有新证据」。它无法据此认定修复已经发生。

它怎么运转

落地页负责介绍概念,独立的工作区里装着地图、报告流程、已保存的散步路线、社区协作和 Model Lab。公开演示不需要访问令牌。可选账号用来跨设备保留报告归属权和私密散步记录。

一个私密社区可以分派报告、发起解决复核,但复核需要新的对比证据,以及两名符合条件成员的批准。这些账号只是昵称,不是经过验证的身份。

想快速走一遍流程,可以打开公开测试报告,查看它的照片、重复照片防护和带日期的历史。这是一条带标签的测试记录,用的是 CC0 示例照片和位于 0,0 的合成坐标,不是真实的实地访问。

还可以播放它保存的 ElevenLabs 简报,打开 Lab 查看保存的模型输出及其来源。想体验完整流程,就用自己的照片建一份可公开分享的报告,之后再补一张新的回访照片做对比。只有所有者能使用普通的解决控制,访客无法解决别人的报告。

把附近的问题加进一次散步,在明确同意共享位置后,路线会在 Google Maps 里打开。地图内部的虚线是直线连接,不是街道级路径规划。

离线与在线之间

这个可安装的网页应用在服务器不可用时,能把拍摄的照片留在本地。上传只在复核和同意之后发生。地图和 AI 仍然需要联网。可选账号会增加应用内提醒;日历下载可用,但不承诺邮件或推送送达。

免费的 Render 服务可能需要时间唤醒。它当前免费的主数据库在 2026 年 11 月 7 日到期,想把演示保留到那之后,需要导出或迁移。

代码放在 GitHub 仓库,MIT 许可证,附安装和演示指南。仓库始于 2026 年 10 月 6 日,在这次挑战的时间窗口内。本地 fixture 模式有明确标注,不需要服务商密钥就能运行;托管演示用的是真实集成。fixture 不会伪装成模型推理。

技术栈的分工

前端用 React、Vite、Tailwind、shadcn/ui、Motion 和 Leaflet。一个 TypeScript/Hono API 运行带类型的 Mastra 观察与回访工作流。一个私有的 FastAPI 服务处理智能相关工作。Render 托管应用和权威的 PostgreSQL 数据库;PostGIS 提供位置查询,另一个独立的 Tiger Data pgvector 索引提供语义搜索。

数据流大致是这样:浏览器工作区和本地拍摄队列连到 Hono API 与 Mastra 工作流;API 分别对接 Render PostgreSQL 与 PostGIS(报告、证据、归属权)、私有 FastAPI 与 Gemma(照片解读)、Tiger Data(次级向量搜索)、Tinker(可选加入的笔记解读)、TabPFN 和 Backboard(独立的模型工具)、SerpApi 地点上下文与 ElevenLabs 语音,以及 Sentry(脱敏的错误与跨度)。

模型输出在持久化之前会先经过校验。报告、观察和时间线事件以事务方式写入。离线拍摄重试时会复用它的幂等键,这样一次丢失的响应不会变成第二份报告。访客归属权在持久化事务内绑定到账号;之后旧的访客 cookie 无法绕过账号归属权。

这些集成各有各的活。Gemma 读照片,Tinker 解读报告者的话,Backboard 对比两个开放模型。它们中没有任何一个能独立关闭一个问题。

训练到底说明了什么

用 Tinker,我在 36 条合成的实地笔记上微调了 Qwen3-8B,做结构化笔记解读,包括非正式的多语言输入。在 18 条留出的合成笔记上,这是一个小数据集上的小幅提升,不是真实世界的准确率声明。评估是公开的。训练出的检查点用于线上、基于同意的笔记动作。它不接收照片或坐标,它保存的解读不会覆盖报告的分类或状态。当前检查点在 11 月 8 日到期。

TabPFN 也是一个真实的 API 集成。它单独的 scenario tester 用了 96 条合成训练行和八个数值特征。在 24 条留出行上,它得分 16/24,多数基线是 17/24。这个结果正是真实历史散步排序仍然关闭的原因。用户可以查看这个合成示例,而不会被暗示它能可靠预测你的社区。

验证时坏了什么

浏览器测试抓到一个已保存散步的失败:位置选择器把展示用的元数据发给了期待坐标的严格 API。去掉这些元数据后请求修好了;浏览器随后保存并重新加载了账号的散步记录。这是一个有用的提醒:要测试完整的表单,而不只是一个合法的 API 载荷。

Sentry 也帮忙把可选服务商的问题和真实问题分开。