跳到主要内容
弟弟没回消息之后

弟弟没回消息之后

林默
林默

· 阅读约 5 分钟

这事儿我翻来覆去想了好几遍。inkwand 的作者做完学习应用后,把链接发给备考 GATE 的弟弟。没收到回复,没有谢谢,没有表情。过了几天她再看,日历上多了条打卡记录。

先停一下,问个问题:哪样更真——一句“谢谢”,还是一条打卡?

我一开始真把这个当个催泪细节看。后来发现不是。它其实是整个应用的设计重心,全押在这一下。inkwand 没做登录,没有账号体系。贴纸、打勾、日历、连续学习天数,全存在使用者自己的浏览器 localStorage 里。服务器管不到,后台看不见活跃度,更没法推送提醒。这设计放到现在那些动不动就上账号和排行榜的学习工具里,像故意唱反调。

因为“谢谢”是社交反应,它不是使用痕迹。一个人回个“厉害”太容易了,甚至不用打开应用。但一条打卡记录不同,它意味着某个人真的把浏览器开出来,读完一章,翻了几张卡片,才被这个应用记下一笔。工具没法判断动机,可痕迹不会随便冒出来。

再往下呢?这换来的最直接东西是用户几乎为零的开门槛。弟弟这种用户,可能永远不肯注册一个账号;但他愿意点开链接。代价也实打实:换个设备、清个缓存,学习记录就没了。这就是这层的 trade-off:她拿“云同步、可推送、可统计”换成了“我不拦你”。对一个做给自己近人用的工具,这是对的。

话没说完。这个应用真正的技术判断藏在内容是怎么来的那条线上。

初版是打开页面就实时调 Gemma 生成笔记。就好比用户每翻一章,先对着 API 孔喊一嗓子。免费额度下,等 45 到 90 秒很平常,有时候推理把 token 预算吃光了,直接返回空内容。对一个正在备考的人,这完全不可接受——点开第 5 章,等一分半,换来空白。后来她改成预生成。13 个科目、86 章,笔记、练习卷、卡片一共 258 份,用脚本提前生成好,8 个并发、失败自动重试、中断能续跑,最后产出约 744KB 的 JSON 打进源码仓库。这个动作一看就懂:把不可靠性从“使用期”吃掉,吐到“生成期”去。生成期可以糙,可以慢,可以让脚本连夜跑;使用期不行,使用期所有人都是弟弟,点一下没反应就离开。

代价一样清楚:内容被冻住了。Gemma 造的“学长讲解”全成了摆在那里的 JSON,不能为下一次具体提问即兴展开。但这个工具本质是备考笔记本,稳定可翻远比无限生成聪明。

我一开始以为内容固化只是个性能优化。后来才意识到它还悄悄把系统变韧了。内容直接进仓库、存浏览器,API key 没了、额度烧光甚至断了网,书照样能打开。如果还守着纯实时架构,这些时候它连个友好提示都出不来。缓存成了韧性。

Gemma 那组模型还有个细节可以讲一下。上线当天 gemma-4-26b 的请求全挂,31b 是好的,于是应用在两个模型之间自动切换,切换只要改一项配置。这比任何“选最优模型”的讨论都实际:别把身家性命押在单个模型上,哪天它死活不该你控制。

再说回这个应用的内容长什么样。它没有把官方考纲直接搬上去——官方考纲免费、准确、不用调 API。她让 Gemma 生成的是“高年级学长讲题语气”:每章一段通俗解释、一个例题、常见陷阱、一句记忆句,关键词用粉绿黄荧光笔标,陷阱用橙色,练习卷答错了给一个温和的叉号和解析,满分给奖杯。

这层不必急着下“生成质量高不高”的判断。单是这个形式,就说明她明白一件事:GATE 自学者缺的不是资料,是缺一个有人味的东西在旁边讲“这题很多人栽这儿”。她只是没空亲自当那个学长,于是让 Gemma 批量造了个学长的回声。评论区她自己说过一句很准的话:日历服务那些喜欢保持连续记录的人,章节打勾服务另一类人,而错题本对所有人都适用。这里没有强制打卡,没有排行榜。你想保持连续,有条路;你只想每章勾完,也有条路;不想要被连续天数绑架的人,还有错题本兜底。所有机制都在接住那些已经在自己学、只是没人看的人。

弟弟没回消息这件事,说穿了没那么难懂。做工具最容易犯的病是把它递出去,然后伸着脖子等一句肯定。等不到,就觉得自己没接住他。可工具不是靠表白来证明有用的。它会在 localStorage 里留痕,会在某天的悬停气泡里露出来,会变成一张莫名其妙多出来的贴纸。

更难的问题我还没想明白:怎么区分一个弟弟是真的学会了,还是只想给姐姐留一点不被戳破的安慰。这层,数据回答不了。先放着。

林默
林默

从具体轶事入口,一问一答把默认对的判断剥到设计权衡,主动暴露走过的弯路。

查看主页 →