RAG 的核心是:
先找资料,再基于资料回答。普通 LLM 回答主要依赖模型参数里的记忆:
用户问题 -> 模型参数 -> 回答RAG 在中间加了外部知识访问:
用户问题 -> 检索相关资料 -> 组装上下文 -> 模型基于证据回答它要解决的不是“让模型更会背”,而是让系统能访问可更新、可追溯、可权限控制的外部知识。
基本流程
一个经典 RAG 系统通常分成两个阶段。
离线索引阶段
flowchart TD
A["原始资料"] --> B["清洗与解析"]
B --> C["切分 chunk"]
C --> D["生成 embedding"]
D --> E["写入索引 / 向量库"]
C --> F["保存 metadata 与来源"]这一阶段回答的问题是:
哪些资料可以被检索?它们被切成什么粒度?如何保留来源、权限和元数据?在线问答阶段
flowchart TD
A["用户问题"] --> B["查询改写 / 扩展"]
B --> C["检索候选 chunk"]
C --> D["重排 / 过滤"]
D --> E["组装上下文"]
E --> F["LLM 生成回答"]
F --> G["引用来源 / 自检 / 输出"]这一阶段回答的问题是:
用户问这个问题时,应该找哪些资料?哪些资料真正相关?模型回答是否忠于证据?现在有多种RAG的演化版本,但是我感觉这个东西意义其实不是很大,懒得研究和整理了
相关论文
2020 年 NeurIPS 论文提出 RAG:Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks(Lewis et al., arXiv:2005.11401)。
大型语言模型的局限性:大型预训练语言模型(如 T5 或 BART)能够在其网络参数中隐式地存储大量事实知识。然而,它们在访问和精确操作这些知识时仍存在局限性,容易产生“幻觉”(hallucinations)。
记忆难以更新与解释:纯参数化模型无法轻松地扩展或修改其记忆,也不能直观地提供其预测结果的来源依据。
RAG 模型架构
检索器 (Retriever) —— 非参数化记忆
- 组件基础:检索器基于 DPR (Dense Passage Retriever) 构建,采用双编码器架构。
- 工作原理:它将维基百科切分成约 2100 万个约 100 词的文档片段,并构建成密集向量索引(非参数化记忆)。给定输入查询 (x),检索器使用最大内积搜索 (MIPS) 找出最相关的 top-K 个文档。
生成器 (Generator) —— 参数化记忆
- 组件基础:生成器使用的是 BART-large,这是一个约 4 亿参数的预训练 seq2seq Transformer 模型。
- 工作原理:在生成文本时,模型会将输入 (x) 与检索到的文档内容 (z) 进行拼接,BART 基于这些上下文信息生成最终输出序列。