大模型之检索增强生成(RAG)
在大模型应用开发中,检索增强生成(RAG)RAG 几乎是最常见的知识增强方案。它的核心思想是“检索+ 生成” ,既发挥大语言模型的语言生成能力,又引入外部知识来弥补模型本身的记忆局限。一个标准的RAG 流程,可以分为索引阶段、检索阶段、生成阶段三大部分,也可以细分为五个核心环节:数据准备→ 向量化→ 索引存储→检索增强→ 生成答案。

1.数据准备
数据准备阶段的质量,直接决定后续检索与回答的准确度。一般来说需要将原始文档转化为结构化的、可处理的文本。常见步骤包括:
1.1.清洗文档:去掉多余的格式信息,如 HTML 标签、PDF 页眉页脚等。
1.2.分块处理:长文档不可能直接输入模型,因此要切分成较小的文本块。这里有3 种策略:语义切分:确保每个块是语义独立的(如问答对、完整段落)。结构切分:按标题层级切分,保留文档的逻辑结构。递归切分:当文本过长时,递归按字符数拆分,既保持连贯性又控制长度。
2. 向量化
完成分块后,每个文本块需要通过 嵌入模型(Embedding Model) 转换为向量。常见的模型有 BERT、Sentence-BERT、BGE 等。向量本质上是一个高维坐标点,用来表示文本的语义信息。比如“ 苹果手机” 和“iPhone”会被映射到相近的向量空间位置,从而实现语义层面的检索。
3.索引存储
向量化后的文本会被存入 向量数据库,如 Milvus、Faiss、Elasticsearch、Pinecone 等。这类数据库的优势是能够在海量向量中快速计算相似度,从而找到与查询语义最接近的内容。通常,数据库还会保存原始文本,以便在检索到相关向量时能够回溯真实内容。
4.检索增强
当用户提出问题时,系统会进行以下步骤:
1. 问题向量化:将用户的自然语言问题同样转为向量。
2. 向量检索:在数据库中查找与该向量相似的文本块。
3.重排序:初步结果可能噪音较多,可以采用 Reranker 模型(如 Cohere Reranker)重新排序,确保最相关的内容排在前面。
这里一步很关键,实践中有多种方式来做提升:
多阶段检索:先用 BM25 等关键词检索做粗筛,再用向量检索精排。
混合检索:将关键词检索和向量检索结果结合,通过 RRF(倒数排名融合)合并,解决“语义相似但关键词缺失”或“关键词匹配但语义偏差”的问题。这是大模型应用里常见的补强手段。
5.生成答案: 让模型把检索到的信息“说出来”
最后 ,系统会将 用户问题 + 检索到的相关文档 一并输入大语言模型。这里的关键是Prompt 设计。下面就是一个例子。
|
你是严谨的助手。请仅依据“ 相关文档”作答,不知道就说不知道,不要编造。 【 问题】{query} 【相关文档( 带编号)】 {contexts} # 例如:[1] 段落 A … [2] 段落 B … 【 要求】 1) 先给结论,再给依据; 2) 在依据处用[编号]标注来源; 3) 若文档冲突,指出冲突并分别给出可能结论; 4) 如问题与文档无关,明确说明无法回答并建议更精确的提问。 |
更多推荐
所有评论(0)