P
Prompt Master

Prompt 大师

掌握和 AI 对话的艺术

RAG

Retrieval-Augmented Generation:用检索提升 factuality

通用语言模型通过微调就可以完成几类常见任务,比如分析情绪和识别命名实体。这些任务不需要额外的背景知识就可以完成。

要完成更复杂和知识密集型的任务,可以基于语言模型构建一个系统,访问外部知识源来做到。这样的实现与事实更加一性,生成的答案更可靠,还有助于缓解“幻觉”问题。

Meta AI 的研究人员引入了一种叫做检索增强生成(Retrieval Augmented Generation,RAG)的方法来完成这类知识密集型的任务。RAG 把一个信息检索组件和文本生成模型结合在一起。RAG 可以微调,其内部知识的修改方式很高效,不需要对整个模型进行重新训练。

RAG 会接受输入并检索出一组相关/支撑的文档,并给出文档的来源(例如维基百科)。这些文档作为上下文和输入的原始提示词组合,送给文本生成器得到最终的输出。这样 RAG 更加适应事实会随时间变化的情况。这非常有用,因为 LLM 的参数化知识是静态的。RAG 让语言模型不用重新训练就能够获取最新的信息,基于检索生成产生可靠的输出。

Lewis 等人(2021)提出一个通用的 RAG 微调方法。这种方法使用预训练的 seq2seq 作为参数记忆,用维基百科的密集向量索引作为非参数记忆(使通过神经网络预训练的检索器访问)。这种方法工作原理概况如下:

RAG

图片援引自: Lewis et el. (2021)

RAG 在 Natural QuestionsWebQuestions 和 CuratedTrec 等基准测试中表现抢眼。用 MS-MARCO 和 Jeopardy 问题进行测试时,RAG 生成的答案更符合事实、更具体、更多样。FEVER 事实验证使用 RAG 后也得到了更好的结果。

这说明 RAG 是一种可行的方案,能在知识密集型任务中增强语言模型的输出。

最近,基于检索器的方法越来越流行,经常与 ChatGPT 等流行 LLM 结合使用来提高其能力和事实一致性。

LangChain 文档中可以找到一个使用检索器和 LLM 回答问题并给出知识来源的简单例子

📚 相关资源

❓ 常见问题

关于本章主题最常被搜索的问题,点击展开答案

RAG 是 Meta AI 提出的,它具体解决什么问题?

RAG(Retrieval Augmented Generation,Lewis 等人 2021)把信息检索组件和文本生成模型拼在一起,专门治知识密集型任务。模型输入时先去外部知识源(如维基百科)检索相关文档,再连同 prompt 一起喂给生成器。好处:缓解幻觉、答案带来源、知识更新不用重训整个模型。

RAG 和 fine-tuning 怎么选?

事实会变、知识库经常更新(产品文档、法规、wiki)选 RAG——改向量库就行,不动模型。要让模型学风格、领域语气、固定输出格式选 fine-tuning。两者也能叠:fine-tune 调风格 + RAG 注入实时事实,是企业知识问答最常见的组合。

Lewis 2021 的 RAG 在哪些 benchmark 上有效?

论文报告 RAG 在 Natural Questions、WebQuestions、CuratedTrec 上表现抢眼,在 MS-MARCO 和 Jeopardy 上生成的答案更符合事实、更具体、更多样,在 FEVER 事实验证上也得到更好结果。证明 RAG 在「问答 + 事实验证」这类知识密集型任务里是站得住脚的。

RAG 用什么做检索器和生成器?

Lewis 2021 的通用配方:预训练 seq2seq 模型作为参数化记忆(生成器),维基百科的密集向量索引作为非参数化记忆(被神经网络预训练过的检索器访问)。现代实现里 retriever 通常是 dense embedding(如 OpenAI / BGE),generator 用 GPT-4 / Claude,向量库放 Pinecone / Weaviate / pgvector。

ChatGPT 已经很强了,还有必要用 RAG 吗?

需要。LLM 的参数化知识是静态的——训练截止后发生的事、内部文档、最近的合同/政策,模型都不知道。RAG 让 LLM 不重训就能拿到最新信息,而且答案附来源便于审计。所以基于 retriever 的方法越来越流行,常和 ChatGPT 这种 LLM 配合提升事实一致性。