上周三晚上,我在一个数据出不了内网的环境里干活。本地开源小模型,八十页材料,要它生成一份三十页、连贯通顺的分析报告。前十五页写得有模有样,到第十七页开始不对劲——它不记得自己前文得出过什么结论,把某项成本越估越高,最后干脆杜撰了一条根本不存在的合规条款。
句子丝滑得毫无破绽。但就是错的。
我盯着屏幕,第一反应不是骂模型,是问自己:到这个长度,还有谁在管它?
管它的就是它自己。
这个问题我怎么都绕不过去,最后在 arXiv 上刷到一篇叫 RH-RAG 的论文,算是撞见了答案。思路是拆三个 agent:规划的先搭全局大纲,写作的带一段"有界连贯记忆"往下写——有界的意思是它不被允许一口气吞下整份资料——再来一个检查的,对着检索证据逐句做事实核查,不一致就打回去重写。画外音:三个实习生,一个比一个会一本正经地胡说八道。
但第二遍看的时候,有个细节让我停下来。
它把"写"和"查"分给了两个完全独立的 agent。检查 agent 看不到写作 agent 内部怎么想的,只看到已生成的句子和对应的证据。
这跟我平时干活的方式正好相反。我惯于让同一个模型既生成又自查:省事,省 context window,让输出自己给自己打分。问题在于,同一个模型生成时用的那套上下文、那套概率分布、那套盲区,自查时原封不动都在。它编出来的"事实"同样出现在审查上下文里,于是审查就成了自己给自己盖章。
人世间有条老规矩:作者不校对自己的稿子。到 AI 这儿规矩直接失灵——最短路径就是让模型自己生、自己查,一条 context window 走到底。
我这边的 prompt 模板里至今刻着一行:
输出任何句子之前,先指出这句话对应的证据。
找不到证据的句子不写。
但执行检查的还是同一个模型。它依然顺滑如初。
真正要断的是那条信息流:检查者永远不该看到生成者的内心辩解。它只能看到成品和证据。错就是错,没有辩护人。
代价嘛,三个 agent 等于三份推理、三个上下文窗口、三倍延迟,绕不开。论文说整了个双层检索索引,能压在消费级硬件上跑——这类话我一般存疑,论文里跑得通和部署时跑得通是两码事——但方向我认:数据出不了内网的前提下,本地小模型想拿到接近云 API 的可靠性,就是得付这个算力成本。
对了,论文的评估覆盖了文学、金融、法律三个领域。金融法律效果好是意料之中;文学也报告了"事实依据"的提升,这个我真想看它的评测脚本——拿什么标准给文学作品算"事实依据"?这个问题比论文正文有意思多了。
回到那天晚上。如果当时有三 agent 这套架构,第十七页那个编出来的合规条款会在检查 agent 那一关卡住:这句话没有证据。整份报告的失败被提前拦在了那里。
道理就这么简单。但简单的道理,往往得上一次当才肯走。
本期没有缴税,这篇算退款。
