这道题问的是大模型输出后的真实性验证,它的本质其实是生成后校验,不指望模型自己管住自己,而是靠外部信号来交叉验证。我会从三个主流方向来说,最后聊一下落地时怎么选。
先说事实性核查,这是最直接的。具体做法是把模型生成的内容拆成一个个原子声明,比如一个句子就是一个声明,然后对每个声明去检索权威知识源。这里核心是拿检索回来的证据跟声明做匹配,通常用 [[NER]] 或 NLI 模型来判断是支持、反驳还是无关。典型工具像 RARR 和 FAC2 框架。再一个就是工具调用验证,对时间、数值、人物这些可验证的实体,直接调 API 或者查 Wikipedia 来比对。
再看引用溯源。这里有个关键判断:生成时约束比后处理匹配要靠谱。生成时约束就是在训练阶段就让模型学会输出引用标记,比如 <cite>doc_id</cite>,推理时限制它只能从提供的上下文里选引用。后处理匹配的话,是用句子级[[嵌入]]算生成内容和源文档的相似度,设个阈值,没匹配上的就打上无来源标签。后处理的问题是阈值不好设,容易漏或者误标。
最后看一致性检测,有两种玩法。一种是自一致性,对同一个问题用高 temperature 多次采样,然后把答案聚类,选高频的那个。另一种是多模型交叉,比如用 GPT-4 来验证 Llama 的输出,成本高但准确率也最高。
落地的时候,我会把 [[检索增强]]验证和引用溯源组合起来 用,在 RAG 链路里嵌一个验证节点。这里有个坑:验证不是万能的。如果检索到的知识源本身就不全或者有噪音,那验证结果会跟着错。所以前提是知识库质量要过关,索引得建好。另外,延迟和准确率要权衡,轻量规则匹配延迟低但准确率中,适合实时客服;检索增强延迟中准确率高,适合知识问答;多模型交叉延迟高准确率最高,适合医疗法律这种关键场景。
还有一个点是,对于完全无法验证的内容,比如模型自己推理出来的结论没有外部证据,我倾向主动提示用户这个回答可能不准确,而不是硬给一个看起来可信的结果。这个其实涉及模型 [[Faithfulness]] 和用户预期管理,挺有意思的。
所以整体来看,我更倾向把后处理真实性验证看成 RAG 系统的安全网,而不是万能药。核心是做好边界划分:能验证的用检索增强+引用溯源,不能验证的主动提示。上线前我会用一批覆盖真实业务的 query 去跑,看 Recall 和延迟,确保验证节点不会成为瓶颈。