每一个 AI 工具都能生成更多通知。我们花了一年让 Nudge 少发一些。两级过滤、15 分钟冷却,以及我们砍掉的东西。
一年前,早期版本的 Nudge 会一天给一个忙碌的用户发一大串通知。今天它一天只发寥寥几条,时间挑在你大概率会动手的时刻。产品并没有变得不那么有野心。任务系统更大了,AI 功能更好了,用户也更多了。变的是我们不再衡量错的东西。
错的东西是一个 AI 能生成多少条有用的提示。对的东西是一个真人在开始无视这个应用之前,能吸收多少条提示。这两个数字差得远。
任何一个能对你的任务做推理的 AI,都能生成数量惊人的“有帮助的”话来告诉你。它能提醒你截止日期。建议子任务。标出冲突。主动帮你改期。提出更好的措辞。指出你已经把这件事拖了三个星期。庆祝连续记录。
这些单拎出来每一条都说得通。叠在一起,就是一部每 40 分钟震一次的手机。而那正是用户会卸载的东西。
一个不动脑子的 AI 效率助手大概是这样实现的:每加一个新任务,AI 就评估一遍,提出一个计划,为相关的检查点排好提醒,等每个检查点到了就推一条。一周加 10 个任务,你就有几十条提醒排着队,散在这一周里。第一周感觉很聪明。第二周感觉像压迫。到第三周, 通知角标就没人看了。
我们知道这一点,是因为我们最早做的差不多就是那个版本。
难的地方在于想清楚怎么决定不发什么。大语言模型很擅长生成候选提醒,但在把它们互相排序这件事上很一般。每一条单看都像有道理,人自己写待办清单时也是同一个毛病。
我们最后落到的做法是两级过滤。第一级是一个快速打分器,对每一条候选提醒都跑一遍。它问四个问题:
这条提醒是不是重复的? 如果我们在过去 90 分钟里发过类似的内容,就丢掉。如果用户最近完成了相关的任务,也丢掉。
用户现在还有认知预算吗? 这就是 会看上下文的提醒 名副其实的地方:免打扰时段、用户的日历,以及他们过去实际在什么时候对通知动过手,都会进到这里。如果正处在一个不太可能有空的窗口,就延后或者丢掉。
这个任务是不是真的快到该动手的时刻了? 四天后到期、又没有固定时间的事,今天不需要提醒。明天下午五点到期的事,也许需要。
同一个任务再来一条提醒,会不会把第一条给毁了? 我们给每个任务设了每日上限。默认是两条。超过这个数,调度器就拒绝再加,不管那条推理路径有多聪明。
第二级是一个全局冷却。就算第一级放行,如果用户在前 15 分钟里收到过任何别的提醒,这一条也不会发出去。就这一条规则,让每日提醒数量下降得比我们上线过的任何东西都多。它也逼着我们在“哪些提醒能通过过滤”上更用心,因为我们不能再靠量去轰那些信号很弱的提醒了。
任何一个用大语言模型做东西的团队,内部都有同一个文化问题:产出很便宜,克制很贵。一个初级工程师用一个下午就能接好“让模型给你的任务提三条改进建议”。而决定什么时候不显示这些建议,需要遥测、用户研究、排序模型,以及少上功能的意愿。那部分工作没法演示。它在截图里看不出是进展。
我们把克制那部分做出来,是因为一项具体的测量。我们发出的每一条提醒,都会在 24 小时内拿到一个后续信号:用户动手了、无视了,或者同一个任务后面的提醒也失败了。一套高质量的投递系统,是大多数提醒带来行动,其余大部分什么也没发生(这没问题)。一套糟糕的系统,是大多数提醒换来一次划掉,因为划掉会消耗信任。区分这两者的,多半就是 在对的时间被提醒。
当我们把它和通知数量画在一起时,形状很明显。每天通知越多,被划掉的越多。越少则完成得越好,直到数量低到真正的截止日期开始漏掉为止。结果是一天寥寥几条最合适。
一路上我们从系统里拿掉的几样具体东西。
早间摘要。 早期版本每天早上发一条“这是你今天的安排”的通知。听起来很有用。实际上人们把这些通知都无视了。我们保留了这个功能,但把它挪到了应用内的主页,不再走推送。信息一样。通知成本为零。
连续记录提醒。 “你已经连着完成 5 个任务了!”这类通知,大概能让人觉得值得庆祝三天,然后永远只剩烦。砍掉。
建议类通知。 “我们注意到你一直在拖这个任务。要不要把它拆成子任务?”出发点好,时机差。这些现在变成了任务详情页上一张温和的卡片。用户在已经看着这个任务的时候才看到它,而在那个情境下,这条建议是受欢迎的。
自动改期的提示。 如果 Nudge 的规划器把一个任务挪到了新的一天,它以前会发一条通知。用户觉得这让人困惑,还有点吓人。现在规划器只是安静地做自己的事,并把变动显示在主页上。
这些改动背后的模式是同一个。信息对用户仍然是可得的,只是从推变成了拉。一条推送通知是对用户注意力的一次索取。它应该留给那些确实需要用户现在就动手的事。
如果你在做类似的东西,这里有几条实现上的记录。
我们的提醒调度器用的是 Celery,靠基于 ETA 的任务做精确计时,后面是 Redis 队列和一份 Postgres 审计记录。每条提醒都有一个来源字段(AI_INFERRED 还是 USER_EXPLICIT),它决定了我们可以多激进地取消或改期。我们绝不会因为数量原因自动取消一条用户明确设定的提醒。这条规则是信任的来源。如果你为妈妈的生日设了提醒,不管模型怎么想,我们都会把它送到。这和 不做完就不会消失的提醒背后是同一个承诺。
排序和取消的逻辑放在一个每日规划器里,每个用户每天跑一次。它可以取消过时的、由 AI 推断出来的提醒(每次最多 50 条),并重新排入新的。它绝不能碰用户自己要求的任何东西。这条边界比排序模型更重要。
我们向别人介绍 Nudge 的时候,最常见的反应是惊讶:这个 AI 怎么做得这么少。每日辅导呢。它为什么不分析我的效率。它就不能给我发点鼓励吗。
简短的回答是:它能,而且它一这么做,产品就变差了。注意力是一份有限的预算。每一条通知都是一次支取。很多 AI 效率工具押在量上,指望用户把最初几条当成存款,好换来一个离不开这个应用的未来。实际上用户把它们当成把这个应用静音的理由。
做一个知道什么时候闭嘴的 AI,不如做一个有很多话要说的 AI 那么带劲。但按我们的经验,这才是让人在第二周之后继续用下去的原因,尤其是那些冲着 给讨厌任务管理器的人用的任务管理器来的人。
Nudge 基于这样一个前提:更少、时机更准的提醒,胜过更多、时机差一点的提醒。在 iPhone 和网页上免费。