“给我生成一份一周浇花计划。”
回车,等。242 秒。
它回我的第一行是:给我生成一份一周浇花计划。
不是复述,也不是确认收到,而是当成答案直接交上来了。我第一反应不是生气,是想给它鼓个掌——这活儿干得,勇气可嘉。
3B 的小模型,本地跑的。它犯这个错我不奇怪,我奇怪的是很多人的第一反应是“换个大的”。
换大的确实能好一点,但你换完,派给它的活一点没变:还是把“今天到底下不下雨”“这盆花这周浇过几次”这种本来就有确定答案的事,交给一个概率分布去拍板。
【裁定如下:问题不在模型,在活派错了】
Tendril 这个项目我看到一半就服气了。它打动我的不是花园,是它把活分得很清楚。
模型那一半:编植物建议、把七天写得不重样、听懂你那句“tulsi 叶子底下有蚜虫”。就这些。
另一半全是 if:降雨概率过 60 就跳过浇水,气温过 35 就排遮阴,连旱三天就补一次深浇,一天最多两个任务,动作不许超过六个词,只能动你自己养的那几盆,日期一个都不能缺。
后面这一串,没有一个字节是模型定的。它是被 Pydantic 拿尺子量出来的:不合格,就带着具体哪条错回去再问一次;再不合格,规则规划器顶上,你至少还有一张能用的表。
这不叫不信任模型,这叫不信任得很好看。
还有个细节挺讨喜:从“让它说一段人话”改成“让它吐紧凑 JSON”,一周计划的生成时间从 242 秒掉到 100 秒。模型没变快,是它被允许瞎扯的空间变小了。
输出 JSON 这事本身土得不能再土,我不觉得有多高级。但它把“模型说得对不对”这个没法测的问题,换成了“这份 JSON 合不合法、这七个字段齐不齐”——一个能测的问题。
能测就能修。不能测只能烧香。
插一句跑题的:Docker Compose 一键起,Ollama 本地挂开放权重模型,换模型就是改个环境变量再 pull 一下。我本来想在这算算本地部署的经济账,算到一半发现没什么可算的——真正的成本从来不是 token 钱,是你为它写的那几百行校验。这段当我没说。
(打住,说回校验。)
语音那条路更逗。一次测试里用户说了两句话:浇了辣椒,tulsi 叶下有蚜虫。模型听完,把这两条揉成一条,全记在 tulsi 名下,浇水那条直接蒸发了。
你说这算理解失败还是理解过度。反正作者后来加了一层关键词检查,把同一句里明显的动作硬绑到植物上。
判断一个 AI 小工具靠不靠谱,我就看模型后面站没站着人。那个“人”,是几行 if。
项目发出去之后,评论区有个叫 Mustafa 的翻完仓库,直接提了一串边界情况:规则任务可能被“每天两个”这个上限挤掉;不同动作因为都沾了个 soil 被误判成同一件事;碰上不认识的植物,系统可能顺手就给处理了。
作者一条条改。治疗、跳浇、遮阴、深浇排了明确优先级;模型产出的任务如果覆盖了规则,就直接占掉那个槽位;不确定是哪盆病了,先问人,别自作聪明。
改完这些好不好用另说,至少“我最怕的那种 bug”——系统静悄悄把你浇过的水吃掉——这条没了。
然后还有后续。同一个人指出 _SAME_JOB 还是把普通浇水和深浇当成一码事。作者回:这是我故意的。用户嘴上说“我浇过水了”,你得顺手把深浇那个任务也勾掉,不然他会以为你没听见他说话。
我站这边。有些精确就是洁癖,用户不领这个情。
当然也有没补上的:预报一天只在早上七点读一次。要是下午四点预报说要下雨、结果没下,这盆花今天就算白浇了,得等到明天早上才知道。
作者自己承认了,说这是目前的缺口。
这个承认比整篇功能列表加起来都值钱,因为写的人知道边界在哪儿。
还有个设计得单说一句:它的核心产物是一张手机锁屏图,早上七点生成,你手机上的快捷指令自己去抓。它不是让你“打开 App”,是让你压根不用打开。连图上那个太阳、云朵、叶子,都是 Pillow 一个圆一个弧画出来的——图都不让模型画。
最好的提醒,是不需要你打开的那种。这话听着像鸡汤,但你翻翻手机里那十几个“每日打卡”的图标,最后一次点开是哪天。
所以我现在看这类小工具,不太看它能干多少事,看它敢把多少事从模型手里抢回来,交给几行 if。
抢得越多,我睡得越踏实。
(郑重声明:本文夸的是一个阳台花园项目,不是给任何模型排座次。真要排,3B 那位今天下午可能又显灵了,谁知道呢。评论区说说你被模型抄过哪句话,我攒着,够写下一段了 🫠)
