作者 Rohit Purkait 写的那篇 dev.to 发布说明里,最值得看的数据不是模型跑了多久。他在 iPhone Safari 上实测了一次 Gemma 4 生成的 drift,叫 The Quiet Current,实际走了约 10 分钟,应用只计 2 分钟,屏幕开启 2 分 5 秒。然后作者写了一句,大意是「当天最好的散步体验发生在停止看应用之后」。
读到这句我才回头去确认一件事:Drift 排序的不是步数、路线、心率,是散步期间屏幕开了多少秒。Page Visibility API 计数,页面可见的每一秒都算进去。这指标选得奇怪,我第一反应觉得它顶多是个"少看手机"的软指标,读到实现段才明白它其实是个硬约束。
因为锁屏会暂停网页定时器和后台 GPS。作者在文章里说得明白:
锁屏会暂停网页定时器和后台 GPS,但音频仍可播放。
所以你要让用户散步时不看手机,就不能指望实时生成、不能指望任何需要页面活着的东西。唯一能活过锁屏的,是一条渲染好了的音频文件。Drift 的做法是出发前让 Gemma 4 写大约 7 条规则,Kokoro 逐条朗读,然后把钟声、规则语音、静默段拼成一个 WAV 文件循环放。31 分钟的单文件,作者正文里贴过 The Echo Chamber Wander 那个例子。
这一条因果链顺下来很舒服:先有"屏幕开启秒数"这个指标,才有"出发前渲染成 WAV"这个实现。不是反过来。如果指标是"路线多样性"或者"步数达成率",没人会去折腾预渲染音频,因为原地转两圈也能交差。
我顺手跑了一下它那几个时间数,纯粹想看看 2GB 模型在浏览器里干这事有多慢。作者原文给了三个数,贴一下:
Gemma 4 写一份 drift 11.5 秒
Gemma 4 写一条笔记 2.2 秒
首次模型下载 2GB,作者的网 约 11–14 分钟
11.5 秒写规则、2.2 秒写笔记,在浏览器里跑 WebGPU 来说不算离谱。但注意一个口径问题:文章前段写首次访问约下载 2.5GB 模型,后段时间数据那里写的是 2GB。差这 0.5GB 可能是 E2B build 文件本身和缓存大小之间的差异,也可能是作者先写后改没对齐。我倾向认为是前一种——模型文件大小和站点实际缓存占用量本来就是两个数,但作者没在原文里拆开说,这条先记着。
真正让我决定推这篇的,是那几个翻车案例。作者没删。
第一个是 Gemma 4 返回空字符串的问题。MediaPipe 把 prompt 原样传给 Gemma 4,但 Gemma 4 需要带 turn 标记的聊天模板。缺了模板,drift 静默回退到内置规则,体验上看着好像没事,实际模型根本没干活。最麻烦的是修复只有一行,但你怎么发现它?作者用的是 Playwright 端到端测试,加载真实模型,断言标题不是 fallback 标题才暴露。换句话说,不写这个测试,这 bug 能藏在"能用"底下很久。
第二个是存储上限的问题:
站点存储上限低于 2GB 时 cache.put() 静默失败,应用每次访问都重新下载 Gemma。
现在 Drift 会先检查 navigator.storage.estimate(),如果没法离线保留模型,会明确告知用户,但散步时本身不需要网络。这事我读到的时候愣了一下——因为我自己踩过类似的坑,cache.put() 失败不抛异常,静默失败比报错难查得多。
第三个是进度计数器出现 "Rule 5 of 4"。原因是开场和结尾的音频片段也被计入了规则进度。这种 bug 我见过太多次,多算一个、少减一个,看起来小得可怜,等你在页面上看到 5 of 4 这几个字的时候,代码里早就埋了一排 +1。
还有一个笔记本端的翻车,作者写实验时用较大的模型跑,后来笔记本上回退到 Gemma 3 4B via Ollama,它生成了一段用户从来没说过的砖墙触感。Gemma 4 初期则是逐字复制转录,提示词现要求以自然主义者口吻重写,并且禁止编造景象。两个边缘,一个大模型的幻觉,一个小模型的行为退化。这段我读着最像真做过事的人写的,不是那种把"我们克服了挑战"当结尾的公关稿。
不点链接也能带走的一句:如果产品指标里有一个词叫"少看手机",先把锁屏会杀掉什么列出来。别等实现到一半才发现定时器、GPS、实时生成全都指望不上,只剩一条预渲染好的音频能陪你走完那段路。
这篇文章我读了两遍,第一遍觉得它就是个用浏览器跑模型的 demo,第二遍才看出它的排序。有意思的其实不是模型在浏览器里能不能跑,是那个"屏幕开启秒数"的指标把每个实现决策都推了一步,推到最极端的形态就是 31 分钟的 WAV 文件。这比那种"把手机塞进口袋享受自然吧"的口号实在多了。
这篇出自 Hacktoberfest 开源 AI 挑战第 1 周 Touch Grass 的提交,代码在 github.com/codeswithroh/drift,demo 在 drift-three-nu.vercel.app。评论里有人把它画成了 84 秒的手绘卡通,有人问坐长椅上不动算不算 drift——作者说目前没有运动追踪机制,坐长椅观察也可以。这句我挺喜欢,说明这个项目从头到尾没打算装成一个计步器。
