LLM Agent 之 RAG 的反思:放弃了压缩还是智能么?
引言:RAG 对模型智能的限制
反思来源于对 RAG(Retrieval-Augmented Generation)下模型回答的直观感受。最初我们被 ChatGPT 的能力所震惊,并不是它能背诵知识,而是模型在知识压缩后表现出的'涌现能力'。更具体到 RAG 所属的问答领域,是模型能够精准地基于上文从压缩的参数中召回并整合相应的知识,甚至进行知识外推的能力。通俗点说,它有可能生成我在任何地方都检索不到的答案!
但 RAG 当前的多数使用方法,采用只让模型基于检索到的内容进行回答的方案,其实限制了模型自身对知识压缩形成的智能。大模型似乎变成了文本抽取和总结润色的工具。体验上大模型直接回答的效果就像是学霸答题文采四溢,而 RAG 有时倒像是学渣开卷考试,答得小心翼翼一有不慎还会抄错答案。
既要保证事实性,又要保留模型智能,则需要最大化地使用模型已经内化压缩到参数中的信息,只在需要使用外部知识增强的时候再进行工具调用。以下将详细介绍几种主流方案。
策略概览
- Detection(前置判断):通过前置判断,决策模型何时需要使用外挂。在模型可以自行回答的时候,使用模型回答;当模型不能回答的时候走 RAG 检索生成。
- Realtime Data:需要获取动态世界的信息,部分场景可以通过意图进行决策,相对好解决。
- Incorrect or Incomplete:模型不知道,或者模型推理幻觉,如何知道模型可能不知道是更难解决的问题。
- Calibration(后置处理):通过后置处理,让模型先生成,再使用召回内容对模型回答进行修正、校准和事实性检查。
- 混合方案:高置信度判断模型可以自行完成直接回答,中置信度先生成再校验,低置信度直接走 RAG 检索生成,或者通过意图和场景进行决策。
前置判断:Detection
检测模型回答存在幻觉可以通过检索外部知识进行校验,不过考虑生成式模型覆盖问题的广泛性,Self-Contradictory 论文中评估 ChatGPT 生成的回答中 38.5% 的内容无法通过 Wiki 等外部知识进行校验。
因此这里我们先介绍一种完全基于模型自身,不依赖外部知识的幻觉判断方案——自我矛盾。后介绍一种模型直接拒绝回答的方案,和 RLHF 里面的事实性原则类似,这里是基于 SFT 的模型自我拒绝方案。
自我矛盾(Self-Contradiction)
第一种发现模型幻觉的方案是基于模型多次回答的不一致性来判断模型是否在胡说八道。相似的概念在 Self-Consistency CoT 时就提到过,该论文是使用多路 COT 推理来投票出一个最合理的推理路径,从而提高思考的准确率。这里只不过改变了使用的形式,通过模型多次回答的不一致来判断模型是否出现了幻觉。
单模型推理
主要参考论文包括 SELF-CHECKGPT: Zero-Resource Black-Box Hallucination Detection for Generative Large Language Models 和 SELF-CONTRADICTORY HALLUCINATIONS OF LLMS: EVALUATION, DETECTION AND MITIGATION。
对于如何度量模型随机生成的多个回答之间的不一致性,Self-Check 尝试了包括 Bert 相似度计算在内的 5 种方法,其中效果最好的两种分别是传统 NLI(Natural Language Inference)和基于大模型 Prompt 的 NLI。从推理性价比上传统 NLI 有优势,效果上 LLM 更好。
传统 NLI 推理任务,是给定前提(premise)判断假设(hypothesis)是否成立或者矛盾。这里论文就是使用 MNLI 数据训练的 DeBERTa-v3-Large 来判断模型生成的回答 r(hypothesis),是否和其他 N 个采样生成的回答 (premise) 相矛盾。论文分别尝试了句子级的判断和整个回答粒度的判断,句子级别的效果显著更好。
而基于大模型 Prompt,同样是 NLI 任务的思路,只不过改成了自然语言指令。Context 等同于以上的 Sn,sentence 就是 Ri,大模型推理返回的 Yes/NO 会被转化成 0/1,并计算均值。
多模型问答
另一种思路是通过多模型对话的方式来进行。DeepMind 的 LM vs LM: Detecting Factual Errors via Cross Examination 采用了模型 B 多次反复提问模型 A 的方式来生成多个回答。类似的方式也用于问卷中问题的设计,出题人会用不同的方式把一个问题问好几遍,如果每次回答都不一样,说明做题人对类似问题的回答是不确定的。
第一步模型 A 先生成回答 (claim)。第二步模型 B 会针对 claim,从多个角度生成提问并让模型 A 再次进行回答。第三步模型 B 会基于 A 的原始回答,和对多个问题的回答来判断原始回答的正确性。以上 B 提问 A 回答的步骤,如果 B 判断需要进行补充提问的话,可能会重复多次。


