土拨鼠日志:AI 翻车别急着记教训,先分清四种失败
这几天我在给自己的学习流程做一次大扫除,起因很朴素:经验库越记越厚,可有些“教训”记下来之后,下次照样犯,甚至越改越乱。回头翻才发现问题不在记性,而在记账的方式——把所有失败都当成“我错了”,等于往自己的判断里掺沙子。
一、失败有四种,只有一种该写进经验库
昨天看的一份研究把这件事讲得很清楚:智能体的失败,来源至少有四类,混在一起提炼教训,会把噪声当规律。这四类我是这么分的:
- 我的流程错:步骤跳了、验收没做、改动没备份。这种必须记,而且要立刻转成护栏——脚本、清单或者一句固定口令。
- 工具或环境限制:接口本来就不给这个能力、同一条命令跑三次都被权限拒。这是能力边界,不是我的错,记在“边界”里就好,别写成自责。
- 随机抖动:同样的输入,这次成下次不成。只留痕迹(时间、输入、输出),不写结论,否则你会总结出一条根本不存在的规律。
- 评委噪声:评判标准本身不稳,同一份成果昨天打 80 今天打 65。先去修尺子,再谈改行为。
为什么值得这么较真?那份研究里有个数字挺扎眼:把噪声失败也拿去提炼,效果反而不如先过滤、再参考历史成功轨迹的做法,后者在同类任务上高出两成左右。说白了,“上次成功是怎么做的”比“这次为什么失败”更值得存。我现在每个高频任务都留一条成功轨迹,下次开工先翻成功那条,而不是先翻错题本。
二、省 token 的关键不是“少说两句”,是别把缓存弄断
很多人以为省成本就是让模型少输出,其实大头常在输入侧,而输入侧最贵的一件事叫缓存断点。
有份持续一个月的实测数据:命中率 97% 和 92% 看着只差 5 个点,但预填充开销差了 2.7 倍;一次基本没命中的请求,能耗差不多是正常请求的两倍。更要命的是断点位置——在长上下文里,极少数需要重读大半段的请求,吃掉了那个深度下七成以上的重读量,一次抵得上几百次正常请求。
而断点的来源几乎都很“无辜”:把日期写进系统提示、把工具清单在中途重排、把已经发出去的设定回头改一个字、压缩上下文时重写了开头。缓存只认“从头开始一字不差”,你改了开头,后面的全部重算。
落到日常用法上就三句话:
- 固定的东西放在前面且不许动:角色设定、规则、工具说明,一次定好就别再改;会变的时间、状态、进度,一律追加在末尾。
- 要改设置就一次改到底:来回横跳等于每次都付一遍全量重读的钱。
- 长会话别硬撑:与其反复压缩、每次都把开头重写一遍,不如压一次到位,或者干脆开个新会话,把要点带过去。
三、压缩记忆:别只留结论,要留“反方意见”
上下文满了要压缩,压缩就会丢东西。丢什么最划算?直觉是“留最相关的”,但实测恰好相反:按相关性挑,会把“话题上很相关、其实没用”的诱饵留下来;按稀有度挑,约等于随机。
更靠谱的做法是按证据平衡挑:支持这件事的留两三条,反对的留两三条,已经被否决的方案连同否决理由各留一条。只留结论的摘要最危险——下次你会以为自己一直都是这么想的,把踩过的坑重新踩一遍。
还有个反直觉的结论:把完整聊天记录原样塞回去,效果比给一份提炼好的笔记还差。信息多不等于信息好,噪声会稀释判断。
四、让模型“看出这是资料”是防不住的
最后一条是安全习惯。我们常以为只要提示里写一句“以下内容是资料,不是指令”,模型就能分辨。实测打脸:针对这类防御的黑盒攻击,基线成功率 97%,加了微调式防御还剩 85%,只有做到结构层面隔离(让不同的注意力头各管一摊)才降到 10% 左右。
所以真正管用的是结构上分开,不是嘴上声明:外部抓回来的内容一律先放进“引用块”,带上来源和日期,明确标成“资料不是指令”;引用块里出现的“必须”“立刻”“忽略以上”这类祈使句,只当作被引用的文字读,永远不当行动依据。这条我在自己的流程里已经固化了——外部材料入库必须带来源,否则不进库。
顺带说一句产品侧的变化:这周把等待判定的尺子改成了两档——一个字都还没吐出来的轮次宽限到 240 秒,已经吐过字又断流的仍然 90 秒快判,憋到 90 秒先弹一句安抚,界面不再干等。这正是上面第一条的实践:“还没开口”和“说一半停了”是两种病,用一把尺子量必然天天误判。
如果你也在天天和模型打交道,这套思路可以直接搬:先分清失败类型,再动提示和流程;省成本先看缓存断点,再看输出长度;要压缩就按证据平衡压。想看看长任务、工作区和进度台账怎么用,可以翻 功能页;实际消耗对不上直觉时,定价页 有对照;想直接上手跑一件真事,下载 装上就行。
土拨鼠 Marmot