手机在桌上震了第七下的时候,我终于忍不住把它翻了过去。
震它的不是别人,是我自己写的 CuberBuddy(赛博搭子)。那天晚上十一点多,整条链路刚从头到尾调通,我兴冲冲握着手机,准备体验一把“有人督促我干活”的快乐。结果迎面撞上的第一个麻烦特别具体:它太爱说话了。
开始前问一句,开始后鼓励一句,过十分钟关心一句,我切出去回了条消息,它又追来一句“还在吗”。每个状态节点都兢兢业业往外蹦消息。至于底下的大模型够不够聪明、语气像不像老朋友,反倒成了排在后面的小事。
(说来可笑,那天下午我试用的时候光顾着回它,原本打算看的两章书一页没翻。)
画草图那会儿,一个会主动找人的助手听起来确实迷人:我刷手机磨蹭的时候轻轻敲我一下,半路问问进度,忙完顺手帮我理一份小结。可真在微信里跑起来,这份“主动”没过半天就成了让人心烦意乱的通知噪音。本来想做个帮我收拢注意力的东西,结果它自己倒成了最大的那个干扰。
卡住人的,是动手前那一下
我最初想对付的日常困境其实很小。很多时候心里明明白白知道今天得看书、写稿或者推进手头的项目,人却像被胶水粘在椅子上,“开始”那一下被无限期往后拖。
市面上现成的效率工具我试过一箩筐,真犯懒的时候都有点使不上劲:待办清单得等你自己点开软件才看得见;番茄钟只有跨出第一步按下按钮之后才开始走表;普通的聊天机器人更是你不开口它就绝不出声。真正把人绊住的,偏偏就是动手前那短短一分钟的迟疑。
所以做 CuberBuddy,我没去卷那些花哨的倒计时表盘,只想把一次行动拆成几个能落盘的节点:准备、开始、暂停、结束和复盘。坐在书桌前发呆的时候,我可以在微信里随手发一句“我先整理二十五分钟资料”,或者干脆伸手把桌角的实体沙漏翻个面。这时候系统该做的,是帮我把脑子里那团乱糟糟的念头压实成一个马上能动手的动作,千万别洋洋洒洒替我列出一份看着宏大、实则让人更想躺平的计划表。
主动,不是一直刷存在感
为了治好它的话痨,那天夜里我狠下心砍掉了大半的触发分支,只给它留出三个允许开口的时机:
- 还没动手的时候,轻轻追问一句“现在准备先做哪一步”;
- 半路停下来,帮我分清是思路卡壳了、被临时杂事打断了,还是单纯累了想歇会儿;
- 一轮结束,跟我要一句实打实的产出,顺手写进时间线里。
我真正埋头干活的那几十分钟,只要我没主动叫它,它就老老实实闭嘴待在后台。
折腾一圈才回过味来:管住它什么时候不说话,远比琢磨“怎么把提示词调得更像知心朋友”管用得多。说话的腔调和人设完全可以日后慢慢打磨,但什么时候出声、什么时候隐身,必须一开始就用硬逻辑钉死。要是底下没有一层状态机拽着,大模型特别容易把人的每一次沉默都脑补成“他需要关怀”,没完没了凑上来嘘寒问暖,到头来彻底沦为一个满腔热情却怎么也按不掉的闹钟。
桌角那只沙漏
书桌上摆着的那只实体沙漏,在这个流程里承担的活计很实在:它帮我把“我打算现在开始”这句心里话,变成了一个伸手就能触碰到的物理动作。
不想打字的时候,手指一拨把它倒过来,底座里的硬件通过 HTTP 请求把状态推给后端,手机震一下,微信里弹来一条简短回执,告诉我这一轮专注已经记上账了。当然,它只是个顺手的物理开关,出门在外身边没带沙漏,纯靠在对话框里敲字,整套流程也得一模一样跑通。
往底层走,状态层要记下的远不止一个“是否在忙”的布尔值,开始、暂停、恢复和结束的准确时间戳都得一一存好。有时候手指哆嗦连拨了两下,或者碰上屋里无线网抽风自动重发,后端得靠幂等键把重复请求挡回去,绝不能平白无故算成两次开始;万一微信消息在半路发丢了,本地时间线也得先把状态稳稳记下来,等下回同步时再悄悄补发。只有把这些底子打牢了,出岔子翻日志时才分得清:到底是我自己压根没开工,还是提醒消息在路上耽搁了。
这些容易乱套的分支,根本不用等大模型介入就能测个明白。写测试那天下午,我往状态机里直接灌了几组死板的异常事件:连续点两次开始、暂停之后故意掐断网络、已经结束了再去点一次结束、人为让消息发送超时。看着终端里一行行测试跑过,我在意的无非是状态有没有串味、报错信息是不是人话、重试会不会把计时算重。让大模型专心对付自然语言的理解就好,账本准不准这件事,终究得交给确定性的代码来兜底。
我还给主动消息套上了一个朴素的配额:同一个任务在一段固定时间窗口里最多只能冒头几次,只要我回一句“先别提醒”,它立刻撤退。而且这个免打扰开关必须摆在伸手就能点到的明面上,不能深埋在某段复杂的系统提示词里。越是平时会主动找人的工具,越得给用它的人留一个随时能按下去的安静按钮。
复盘只要留个线头
每当一轮计时走完,我最怕看到系统端上来一大段滴水不漏、满是鼓励的鸡汤总结。所以在结束环节,我只让它像记流水账一样问三件事:刚才这几十分钟实际干了什么,哪块地方卡住了,下次接着干先摸哪一步。
回答哪怕只有短短几个字也不要紧。第二天坐回电脑前,能顺着昨晚留下的线头直接往下接,不用重新挠着头回忆“我昨天到底弄到哪儿了”,这几十秒的复盘就算值回票价了。
说白了,一个主动型工具到底好不好用,看的从来不是它一天能陪你聊多少条微信,而在于它能不能帮人把一次次零散的行动沉淀成一条随时能续上的线索。大模型尽可以发挥它的长处,帮忙听懂口语、理顺碎句、辨认暂停的缘由;但到底什么时候按下开始键、这一轮做到哪里算完、做完这步还要不要继续,这些拿主意的事,终究得留在我自己手里。
考虑到日后做跨周、跨月的长期回顾,时间线里也不能只存一份大模型润色过的漂亮摘要。设计表结构时,我把最原始的状态事件、我自己确认过的产出原话,以及模型规整出来的总结文本分成了三块独立存放。这样哪天翻看旧账,要是觉得模型总结得走了样,随手改掉那段文字就行,丝毫不会动摇当时真真切切发生过的起止时间。一份记录能让人放心翻阅,靠的是每一步都有迹可循。
改完最后一处代码,时间已经过了零点。我把手机翻回正面,屏幕安安静静的,一条新消息也没有。
桌角的沙漏刚漏完。我对 CuberBuddy 的期待,比刚开始写代码时简单多了:只要能在我最犹豫、最需要推一把的那三分钟里准时露个面,剩下的时间安安静静待在后台不添乱。能做到这样,就已经是再合格不过的赛博搭子了。