RAG DESIGN 2025 · 06 · 12 方法论

让大模型"不要乱说":RAG 约束在复杂场景的设计逻辑 Constraining RAG — Designing for High-Stakes

RAG 的真正价值不在"检索",而在"给生成划定边界":只让它在可信材料范围内说话,材料不足时承认不知道,材料冲突时替它定好信谁。

00 引子

当一句话的代价很高

在一些场景里,大模型说错一句话,代价可以忽略;在另一些场景里,代价高到不可接受。

一个专科问诊辅助系统,把并不存在的禁忌症讲得有鼻子有眼;一个金融合规问答,把早已废止的条款当成现行规定。这两个场景的共同点是:用户没有能力当场分辨真假,而错误会被当作专业结论直接采纳。

RAG(检索增强生成)几乎是所有人对付这类问题的第一反应:先去可信知识库检索,再让模型参考检索到的材料回答,而不是凭参数记忆瞎编。方向没错。但"接一个向量库"和"让大模型在复杂场景里不乱说",中间隔着一整套约束设计

01 误解

检索到了,不等于答对了

RAG 最大的误解,是把它当成一个检索问题,仿佛只要能找到正确材料,答案就正确了。

RAG 的本质,是把闭卷考试改成开卷考试:给模型发一份小抄,让它参考材料作答。但开卷考试也会考砸。小抄找对了,不代表抄对了、用对了。

把一次 RAG 回答拆开,至少有三个可以独立失败的环节。它们可以一高两低:检索很好,生成器却误读、扭曲了证据;或者答案读起来很对、很流畅,却没有任何检索材料支撑。

FIG.01一次 RAG 回答的三个独立失败环节
Stage 1
检索召回

该找到的材料,到底找到了没有

漏检 → 缺证据
Stage 2
忠实度

有没有忠于材料,有没有超出材料自行发挥

脱离证据 → 编造
Stage 3
答案相关性

答得切不切题,有没有跑偏

答非所问
一个看起来忠实度很高的回答,可能恰恰是因为检索漏掉了关键信息,模型用残缺的上下文编出了一段自洽的话。所以约束的重心,要从"检索能不能找到",后移到"生成器会不会忠实使用,以及证据不足时会不会硬编"。
02 反直觉

检索越多越准,是个错觉

直觉会说:多检索一点、把上下文给满,模型答得更准。复杂场景里,这个直觉是错的。

学术界一个反直觉的发现是:相关但非正解的文档,比完全不相关的文档更有害。完全跑题的材料,模型容易识别并忽略;似是而非的材料,模型会当真,被带偏。这和考试里最容易选错的,永远是那个看着眼熟的干扰项,是同一个道理。

与之配套的另一条:把上下文塞满,反而丢信息。长上下文里,模型对开头和结尾记得最牢,对中间段落明显走神,这被称为 lost in the middle。把关键证据埋在一长串材料的中间,约等于没给。

FIG.02三类检索材料对生成的影响
完全不相关

跑题明显,模型容易识别并忽略

害值 低
相关但非正解

似是而非,被当真,把回答带偏

害值 高
少量精准

证据集中,信噪比高,最优解

最优
复杂场景的约束设计,第一课不是"怎么检索更多",而是"敢不敢少给"。少量精准的证据,通常胜过塞满上下文的大杂烩。
03 冲突

喂了资料,模型不一定听

还有一个更隐蔽的陷阱:很多人默认,只要把正确材料喂进去,模型就会照着说。事实并非如此。

当检索到的证据,和模型参数里的既有认知发生冲突时,模型不会无条件服从证据。研究发现,如果外部证据与模型记忆部分一致、部分冲突,会触发明显的确认偏误:它倾向于挑出和自己记忆一致的部分,忽略冲突的部分。而且,证据写得越自信、越连贯、越有说服力,越能压过模型记忆;措辞平淡的正确证据,反而推不动一个错误的先验。

这意味着,在高风险场景里,知识冲突消解必须被显式设计。哪些来源优先、冲突时信谁、过期内容如何剔除,都要落到机制里,而不是寄望于模型自觉。

04 约束链

降幻觉是一条递进的约束链

降幻觉从来不是"接个向量库"这一个开关,而是一条逐级叠加的约束链。Anthropic 公开过一组很说明问题的实测,在一个标准检索任务上,失败率随约束逐层叠加而下降。

FIG.03约束逐层叠加,检索失败率下降(Anthropic 实测)
朴素分块检索
5.7%
+ 情境化分块
3.7%
+ 混合检索(BM25)
2.9%
+ 重排序 reranking
1.9%
从 5.7% 到 1.9%,失败率降了约三分之二,靠的不是换更强的模型,而是把约束一层层叠上去。更复杂的关系型场景,还要再上一层:用知识图谱约束语义检索里的伪相关。

一个经典例子:保温大棚和保温杯,在语义上很相近,纯向量检索可能把它们当成相关内容一起召回,引入幻觉。领域知识图谱可以沿实体之间真实的关系走,把这种似是而非的相关性约束掉。

05 拒答

最高难度:让它"不知道就说不知道"

约束设计里最难的一环,不是让模型多答对,而是让它在该闭嘴时闭嘴。

"如果材料里没有答案,就回答不知道",这条指令谁都会写,但真正做好极难,因为它会两头翻车。拒答做得太松,证据不足时模型照样编;做得太紧,塞进检索内容后,模型连本来会的也不敢答了,这是一种被检索内容干扰后的置信度崩坏。

FIG.04拒答机制的两头翻车
← 拒答太松证据不足也照答,流畅地编
拒答太紧 →被检索干扰,本来会的也不敢答
中间的窄带 = 强制引用 + 可靠拒答
每条结论可溯源,证据不足时明说"无法支持"
拒答能力引用能力当作可以训练、可以评估的目标,而不是事后补的一句兜底提示,才是高风险场景 RAG 能上线的分水岭。
06 结论

不是教它多说,是教它在边界内说

让大模型在复杂场景里不乱说,靠的不是更大的模型,也不是更大的向量库。

RAG 的真正价值,不在"检索",而在"给生成划边界":只让它在可信材料的范围内说话,材料不足时让它承认不知道,材料冲突时替它定好信谁。检索只是起点,约束才是工程。

一句话:RAG 不是教模型多说,而是教它在边界内说,并学会闭嘴。