RAG流程详解
一基础大模型存在的问题我们为什么要学RAG那是因为基础的大模型存在一些问题不能满足我们日常的开发使用。如LLM 的知识不是实时的模型训练好后不具备自动更新知识的能力会导致部分信息滞后LLM 领域知识是缺乏的大模型的知识来源于训练数据这些数据主要来自公开的互联网和开源数据集无法覆盖特定领域或高度专业化的内部知识幻觉问题LLM 有时会在回答中生成看似合理但实际上是错误的信息数据安全性二RAG介绍RAGRetrieval-Augmented Generation即检索增强生成为大模型提供了从特定数据源检索到的信息以此来修正和补充生成的答案。一个典型的 RAG 应用有两个主要组成部分索引 (Indexing)从数据源获取数据并建立索引的管道 (pipeline)。这通常在离线状态下进行。检索和生成 (Retrieval and generation)实际的 RAG 链在运行时接收用户查询从索引中检索相关数据然后将其传递给模型。索引 (Indexing)加载 (Load)首先我们需要加载数据。这是通过文档加载器 Document Loaders 完成的。分割 (Split)文本分割器 Text splitters 将大型文档 (Documents) 分成更小的块 (chunks)。这对于索引数据和将其传递给模型都很有用因为大块数据更难搜索而且不适合模型有限的上下文窗口。存储 (Store)我们需要一个地方来存储和索引我们的分割 (splits)以便后续可以对其进行搜索。这通常使用向量存储 VectorStore 和嵌入模型 Embeddings model 来完成。检索和生成(Retrieval and generation)检索(Retrieval)给定用户输入使用检索器Retriever从存储中检索相关的文本片段。生成GenerateChatModel使用包含问题和检索到的数据的提示来生成答案。三流程解释1. 用户输入处理目标解析并理解用户查询的意图和关键信息。关键技术查询解析提取关键词、实体识别如 NER、语义解析理解深层意图。查询扩展通过同义词替换、上下文联想例如用户问 “Transformer 结构” 时补充 “注意力机制” 相关术语增强检索效果。向量化将查询转换为向量表示如使用 BERT、Sentence-BERT 等模型便于后续向量检索。2. 文档检索目标从外部知识库中快速找到与查询最相关的文档或段落。关键技术索引构建预处理知识库文档构建高效的索引结构如倒排索引、向量索引 FAISS/HNSW。检索算法稀疏检索基于词频的方法如 BM25适合关键词匹配。密集检索基于语义相似度的向量匹配如 DPR、ANCE 模型。多路召回结合多种检索策略如同时用 BM25 和向量检索提升召回率。3. 文档后处理目标优化检索结果确保输入生成模型的信息质量。关键技术去重与排序根据相关性如相似度分数或多样性筛选结果。截断与分块处理长文本如滑动窗口截断适配生成模型的输入长度限制。上下文增强添加元信息如文档来源、时间戳供生成模型参考。4. 生成回答目标基于检索结果和用户输入生成自然、准确的回答。关键技术提示工程将检索到的文档与用户查询拼接为生成模型的输入Prompt例如生成模型选择使用预训练生成模型如 GPT-3、T5、BART进行条件文本生成。可控生成通过 Temperature 调整、Top-k 采样等控制生成结果的多样性和准确性。5. 后处理与验证目标优化生成结果的格式和事实准确性。关键技术文本润色去除重复内容、语法纠错、调整句式。事实核验对比检索结果与生成内容确保一致性如使用 NLI 模型验证逻辑。引用标注标明答案的来源文档增强可信度。