多智能体防幻觉这事儿被讲得越来越玄。玄到好像 agent 一多、让它们互相吵两句,幻觉就自己没了。
上个月翻到一篇金融问答的论文,CLAIR-Fin,arXiv 2608.13706,我点开的时候已经更到第三版了。九个智能体。第一反应:哦,又是个堆 agent 的。
从头看到尾,那九个根本不是重点。砍几个、换几个,这套东西照样成立。真正把我打醒的是它踩的一个坑——那坑我大概率也踩过,只是没意识到。
画开看看。
第一版图,我以为是这样的
我脑子里的多智能体防幻觉,长这样:
问题 ──► 好几个 agent 分头查资料 ──► 汇总成一份报告 ──► 再派几个 agent 吵这份报告 ──► 输出
↑
防幻觉就靠这一格
前一段写,后一段吵。挺顺吧。
问题出在后面那格到底在吵什么。你派三个 agent 去审一份报告——报告是什么?是几十条主张揉成的一段通顺的话。它读到的只能是"这段读起来靠不靠谱",读不出"第 7 条那个数字对不对"。
一条主张错了,旁边九条对的会把它包住。文本越通顺,包得越严实。
等等等等,先别急着说"就这?"。这个坑不是"agent 不够多"能填的——你派三十个去读同一段话,照样读不出来。错误是一条一条出的,验证却整篇整篇做,单位对不上,加多少人都不对上。
论文里那句话我看了两遍才回过味来:现有做法"辩论只核对汇总报告而非单条主张"。一句,把上面整件事说完了。
重来:把验证的单位改小
第二版图我是这么画的——
问题
│
▼ 拆
[主张1][主张2][主张3] ... [主张n] ← 原子化主张,进类型化的账本
│
│ 每条主张自带一个"证据权威等级"
│ (按主张类型定,不是所有模态一视同仁)
▼
起草 ──► ⚑ 交接处先查一次依据落地(不是等全写完再查)
│
▼
有争议的主张 ──► 进对抗式辩论,深度自适应
│
▼
蕴含审计 ──► 风险指数:标出"审过的"和"从没被质疑的"
│
▼
输出 / 兜不住就弃答
四个改动。
验证的单位从报告变成主张。 最根上的一刀。原来吵的是文本,现在吵的是清单上的一条。辩论 agent 的任务从"读这段像不像对的"变成"第 7 条这个数据,年报里到底有没有"。前者是感觉,后者可判定。
证据不再一视同仁。 论文管这个叫非对称证据权威——按主张类型决定该信哪个模态到什么程度。表格里的数字,和叙述文字里提到的数字,冲突的时候你更信哪个?以前是"反正都是召回的证据,一起塞进去";现在是"看这条主张是什么类型,再决定给谁多少权重"。这一条我觉得是整套里最容易被略过、也最实用的。
验证往前提了。 不在末端查,改在起草和对抗评审交接的那一格就查一次依据落地。看着是个小改动,含义不小——原来起草 agent 写歪了,要等全写完才被发现,中间那段时间错误已经进了正文,已经被别的 agent 当上下文读了。早查一次,等于把错误的传播路径掐短一截。
最后一条我格外喜欢:给"没被吵到"这件事本身标了个价。 末端一个蕴含审计,配一个持续更新的幻觉风险指数,把"经过审查的主张"和"从来没被质疑的主张"分开。
它承认了一件其它框架假装不存在的事:一条主张没被质疑,不等于它对,可能只是没轮到它。 跟测试覆盖率一个意思——跑过的不一定没问题,没跑过的你连说它没问题都没资格。✨
打出来什么效果
论文自己搭了测评集 BB-FinQA-X,500 道跨模态金融题,素材是孟加拉银行年报,按查询类型、格式、难度分了层。跟单轮 RAG 基线比,忠实度 0.780 → 0.889。
0.889 这个数单看没啥感觉。有感觉的是它把 HyDE、Graph-RAG 那批更猛的检索策略基线也压过去了——那批的上限是 0.874。压过检索策略的意义在于:这不是"查得更好",是"验得更细"。 检索这条线已经卷到头了,换个维度才有增量。
还有个数字我盯着看了挺久:证据不足的时候,5.4% 的问题它会选择弃答,而不是硬答。
这个比喻在哪漏风
"把报告拆成清单"这个说法,抓大方向没问题,但它漏风的地方我得标出来。
主张不是拆得越细越好。有些东西单独拎出来根本不成立,得靠上下文才成话——"不良贷款率上升"是一条主张,"上升"这两个字单独拿出来什么都不是。你拆到原子级,一定会拆出一批本来不该单独验的碎片,然后它们大概率查不到直接依据,然后它们就得走弃答。
我不敢说上面那 5.4% 全是这么来的,论文也没这么讲。但拆细有成本,这个成本一定会体现在某个地方,我觉得就是这儿。
另外还有一点我到现在也没完全画明白:账本里那套"类型",边界是谁定的?预设的分类,还是跑出来的?论文里没找到说得够清楚的地方。先放这儿,哪天想通了再补。
拉回来
所以这篇东西真正让我兴奋的地方,不是它用了九个 agent——那个数字甚至有点劝退。是它把"验证的单位"从文档挪到了主张。一挪之下,前面那一堆设计(非对称权威、交接处检查、风险指数)全变成了顺理成章的推论,而不是各立一摊的技巧。
单位选对了,剩下的都是它的自然延伸;单位选错了,agent 加多少个,都只是在更大的尺度上重复同一个错。
照例留个自检:现在你能不能给我讲明白,为什么"派三个 agent 去审一份报告"和"把报告拆成清单逐条审",抗幻觉能力的差别不在 agent 数量上?
讲得出来,这篇就没白画。讲不出来,卡在哪告诉我——多半是那儿我自己也还没绕清楚。
下期想画开哪个?手上还有两个候选:一个是 embedding 那个"把话变成坐标"到底怎么变的,另一个是为什么好多多智能体框架最后都在往回退,退到单路径。想看哪个?
本期画开:防幻觉的单位,比防幻觉的力度值钱。