一个主动型智能体的生死在于特异度,而不在于判断力——在 2.2% 的基础率下,一个特异度 97% 的触发器发给你的假警报比真警报还多。
做一个自己决定何时开口的智能体,难的那部分是算术而不是文笔:值得你分心的东西占比很小,所以决定有没有人会把这个产品用过第二周的,是触发器的假阳性率,而不是它有多聪明。真正能撬动特异度的那根杠杆,是收窄智能体被允许考虑的范围;而你删掉的那条提示,一直还悄悄承担着作用域与授权。
步骤 1那条提示在干三件事。删掉它只替换掉一件。
在一个被动型智能体里,用户的那条消息既是触发(它说现在),又是作用域(它说这个),又是授权(它说代表我)。三者在同一个动作里一起到达——这正是没人需要分别设计它们的原因。
一个主动型智能体——2026 年 10 月 21 日在美国以研究预览开放的 Claude Duet 是当下的参考实现,OpenAI 与 Meta 的助手属于同一类——把其中第一件换成了一张时间表。作用域于是变成「智能体巡视时碰到的任何东西」,授权则变成对每一个已连接应用的长期常驻许可。Duet 的形状值得抄,因为它把这件事说得很明白:它每隔几个小时检查一次已连接账号,每天早上发一份简短摘要,白天只在有事需要注意时才给你发消息;而在它发送消息、支付、签署文件或删除任何东西之前,它会把这个动作摆出来等你批准,另有一小串动作——证券交易、在账户之间转钱——即使你说可以也仍然被挡住。
请注意那些批准站在哪里。它们站在写操作上。触发、阅读,以及「某件事配得上占用你的早晨」这个判断,全都没有经过复核——而主动型智能体真正的行为恰恰住在那里。于是设计工作一分为三:什么点燃一次运行(STEP 2–3)、那次运行被允许碰什么(STEP 4)、那次运行记住什么(STEP 5)。通知与摘要讲的是你已经决定要发之后怎么写那条消息;本页讲的是那个决定之前的全部。
步骤 2在写下第一句提示之前,先把基础率的算术做完。
数一数智能体一天会看多少东西,其中有多少真的需要一个人。对一个连上了邮件、日历、一个工单队列和两个聊天工作区的职业人士来说,一天 150–250 条新东西、其中三到六条真的需要他,是很平常的形状。取 180 和 4。这是 2.2% 的基础率,而它很残酷:
# what a "good" trigger classifier actually delivers at a 2% base rate items_per_day = 180 need_you = 4 # base rate 2.2% recall = 0.90 # catches 9 of 10 real ones specificity = 0.97 # wrong on 3% of the rest — sounds excellent true_alarms = need_you * recall # = 3.6 false_alarms = (items_per_day - need_you) * (1 - specificity) # = 176 * 0.03 = 5.3 — more noise than signal precision = true_alarms / (true_alarms + false_alarms) # = 0.40 # to reach 80% precision at this base rate you need specificity >= 0.996, # i.e. a wrong call on fewer than 1 item in 250 — not a prompt-tuning target
最后一行请读两遍,因为它就是整个设计约束。把特异度从 97% 提到 99.6%,不是靠改写一条指令能到的地方,也不是一个通用模型在开放式收件箱文本上会白送给你的东西。真能到那里的办法是把分母缩小:先做确定性过滤,只拿活下来的东西去问模型。如果一条规则——发件人在用户的组织内、这个会话把用户放在收件人栏、工单指派给了他、发票金额超过某个阈值——把 180 条切到 25 条而真正的那四条一条不丢,那么同样的 97% 特异度现在每天只产生 0.6 条假警报,精确率在 85% 以上,而模型一点没改。
这正是「让智能体自己决定什么重要」不该作为首发框架的原因。智能体决定的是在你选定的候选集里什么重要,而那个候选集干了大部分的活。请在上手阶段、用用户自己的话跟他一起把规则定下来——首次运行与上手才是这段对话该发生的地方,而且它远比一次功能导览更配得上第一次会话。
步骤 3节奏是一个正确性与成本决策,而轮询是退路,不是设计。
启动一次无提示运行有三种方式,它们的失败模式各不相同:
- 事件订阅。数据源告诉你有东西变了。延迟最低、成本最低,而候选集已经被 webhook 的过滤条件预先收窄过。只要存在就用它。
- 差分轮询。取一个变更游标,与存下来的状态比对,只在增量上跑。这是数据源没有 webhook 时你要自己建的东西,而它的成本随变更数量而非账号规模增长。
- 定时重读。按钟表重新审视一个内容窗口。最贵也最不精确,因为同一条东西会被反复评估,而每一遍都是一次新的假阳性机会。
节奏于是在两件事之间权衡。看得更勤会抬高时效性条目上的召回、缩短用户感到的延迟——同时也会近乎线性地抬高假警报的数量,因为假警报随被评估的条数增长,而真实事件不会。一个让每条东西只被评估一次的六小时节奏,在「抓得到」上并不比每小时差四倍;它在「保持安静」上大约好四倍。Duet 公布的节奏是「每隔几个小时」,而它的文档把理由说得很直白:那些后台检查与用户自己的工作共用同一份套餐额度。
最后这一点就是成本模型,而它特殊到值得单独点出来。一个主动型智能体的开销是入站量的函数,而不是用户要求了什么的函数。忙碌的一周比清闲的一周更贵,而交付的价值一点没变;而一场邮件轰炸就是一个不带任何提示的「钱包拒绝服务」向量。请在触发器上、而不是在智能体内部,给每天的运行次数与每次运行的 token 预算封顶——循环中的成本控制与预测智能体开销都假定了一个有界的触发器,而定时与触发式智能体是这个循环本身的运维手册。
步骤 4每个触发都开启一次带有自己作用域、预算与截止时间的运行。
这是已发货产品大多还没有的那个控制,也是在系统还小的时候加起来很便宜的那个。一次由「来了一张 5,000 美元以上的发票」启动的运行只需要财务连接器、别的都不要,截止时间两分钟,没有出网。一次由「日历出现冲突」启动的运行需要日历的读与「提议写」,完全不需要文件访问。请从触发类别推导出被允许的工具集,并把它挂在这次运行上,好让那个刚刚读了攻击者邮件的智能体,手里不会握着与用户亲自下令的智能体同等的权限。
理由正是批准闸门覆盖不到的那一条。一次无提示运行的输入在构造上就是别人选择发给你的内容,这是提示注入的教科书式布置;而一个在同一个会话里同时握着邮件、你的文件和一个浏览器的主动型智能体,致命三要素的三条腿都站齐了。在发送、支付、签署与删除上设批准是个正确的起点,而它一条都挡不住——因为阅读才是外泄路径,而没有任何产品会要你批准一次阅读。按触发划分的作用域,才是把那次出错运行的影响面缩小的东西;当答案换成「整个邮箱,无限期」时,你授予的东西叫环境权限,而任务作用域是「把一次运行钉在启动它的那件事上」的通用版本。
由此得出两条实践规则。第一,批准必须把起因摆在动作旁边:「发送这条回复」无法复核,「发送这条回复,因为 09:14 有一封来自你组织外地址的消息到了」两秒钟就能复核。Duet 自己列出的当前限制里就包括「还不能让你看到它的浏览器」,而那恰恰是用户判断一个自己没要求过的动作所需要的证据。第二,任何一个「错了的代价超过自主带来的价值」的动作,都根本不该有自动通道,有没有批准都一样——这正是把「在账户之间转钱」硬挡住的同一套推理。批准与确认体验讲对话框设计;渐进式自主讲为什么梯级属于凭据作用域,而不属于一个会话级的全局模式。
步骤 5这个循环需要记忆,而它的大多数缺陷都是「取代」缺陷。
一个被动型智能体每条提示只有一次犯错的机会。一个主动型的每隔几小时就重新遇见同一个世界,于是每次运行都得回答「这件事我是不是已经处理过了?」和「我昨天说的话还成立吗?」用户真会抱怨的失败全都属于这一家:
- 重复告警。同一个会话连着三个早上冒出来,就因为它还没人回。请把去重键打在条目加理由上,而不是打在运行上,并在理由改变或用户设定的间隔过去之前压掉重复。
- 过期建议。摘要让你去回一条用户一小时前已经在手机上回掉的消息。请在发送时刻、而不是判断时刻重新校验;这两者之间的空隙,正是智能体显得草率的地方。
- 被取代的事实。昨天那句「会议在周四」活过了改期。请把智能体断言过的东西存下来,好让后面的运行能够撤回而不是自相矛盾——遗忘与取代讲的是机制。
- 重复的副作用。一次被重试的运行把同一份草稿发了两遍。每个对外动作都需要一个由触发派生出来的幂等键,见幂等性与重试。
早间摘要在这里挣得了它的位置——不是作为一个功能,而是作为一道批次边界:一次有排期、可预期的打扰,吸收掉所有不紧急的东西,把实时通道留给真正时效性强的。它还给了你第二份更宽松的精确率预算——读者原谅一份六条清单里的一条平庸条目,远比原谅一条平庸的推送通知来得容易。异步智能体体验讲随之而来的「回到工作中」问题。
步骤 6带着一道精确率闸门发货,并盯四个数字。
先让触发器跑影子模式:评估每一个候选、把判决存下来、什么也不发,然后让用户给一周里它本来会发的东西打标。那会给你真实流量上的基础率与混淆矩阵,而这是它们唯一存在的地方——一个精挑细选的测试集在构造上就带着错误的基础率,而这正是一个触发器通过了评估却在生产里失手的原因。然后从测出来的曲线、而不是从某个默认值去设阈值,做法和决策模型的阈值一样,并按触发类别分别缩放:一个错的「你的航班改了」几乎不花什么代价,一个错的「这张发票看着像欺诈」花掉的是你拿不回来的信任。
有四个数字告诉你它到底行不行,而其中只有一个与模型有关:
- 打扰的精确率。它端出来的东西里,用户采取行动或标为有用的占多少?这就是产品本身。持续低于大约 50%,人就不再读了;一次划掉是一张选票,应当当成选票记下来。
- 漏掉的要紧事。从它选择沉默的那些东西里抽样,由用户打标。默认是没人量的,而它是唯一能防住「把自己调成一个精确率满分的哑巴智能体」的那道护栏。
- 每次运行的候选量。STEP 2 里那个分母。当一个新连接器把它翻倍时,精确率会掉,而模型什么都没变——这是来得最早、而且不需要任何标注的回归信号。
- 清闲一天的开销。这个循环在什么都没找到的时候花了多少钱,而大多数日子都是这样。如果这个数字不小,那这个产品就是在为它从来没拿到的注意力交租。
请按这个顺序做。在写任何提示之前,先数清候选数与真实事件数,得到基础率。用与用户议定好的确定性规则把候选集切小,因为特异度是那条约束的紧边界,而过滤是唯一能摸到 99% 以上的杠杆。优先事件订阅,其次差分轮询;只在别无选择处安排定时重读,并在触发器上给每天的运行次数封顶。给每个触发类别自己的工具作用域、token 预算与截止时间,并在批准里把起因摆在动作旁边。按「条目 + 理由」去重,在发送时刻重新校验,并给每个对外动作保留一个幂等键。影子跑一周,按类别从测出来的曲线设阈值,然后盯住精确率、抽样漏报、候选量与清闲日开销。如果只留一句话:主动型智能体是一个披着判断力问题外衣的特异度问题。