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

1.数据准备

数据准备阶段的质量,直接决定后续检索与回答的准确度。一般来说需要将原始文档转化为结构化的、可处理的文本。常见步骤包括:

1.1.清洗文档:去掉多余的格式信息,如 HTML  标签、PDF  页眉页脚等。

1.2.分块处理:长文档不可能直接输入模型,因此要切分成较小的文本块。这里有3 种策略:语义切分:确保每个块是语义独立的(如问答对、完整段落)。结构切分:按标题层级切分,保留文档的逻辑结构。递归切分:当文本过长时,递归按字符数拆分,既保持连贯性又控制长度。

2. 向量化

完成分块后,每个文本块需要通过 嵌入模型(Embedding Model 转换为向量。常见的模型有 BERTSentence-BERTBGE  等。向量本质上是一个高维坐标点,用来表示文本的语义信息。比如 苹果手机 “iPhone”会被映射到相近的向量空间位置,从而实现语义层面的检索。

3.索引存储

向量化后的文本会被存入 向量数据库,如 MilvusFaissElasticsearchPinecone  等。这类数据库的优势是能够在海量向量中快速计算相似度,从而找到与查询语义最接近的内容。通常,数据库还会保存原始文本,以便在检索到相关向量时能够回溯真实内容。

4.检索增强

当用户提出问题时,系统会进行以下步骤:

1. 问题向量化:将用户的自然语言问题同样转为向量。

2. 向量检索:在数据库中查找与该向量相似的文本块。

3.重排序:初步结果可能噪音较多,可以采用 Reranker  模型(如 Cohere Reranker)重新排序,确保最相关的内容排在前面。

这里一步很关键,实践中有多种方式来做提升:

多阶段检索:先用 BM25  等关键词检索做粗筛,再用向量检索精排。

混合检索:将关键词检索和向量检索结果结合,通过 RRF(倒数排名融合)合并,解决义相似但关键词缺失关键词匹配但语义偏差问题。这是大模型应用里常见的补强手段。

5.生成答案: 让模型把检索到的信息说出来

最后 ,系统会将 用户问题 +  检索到的相关文档 一并输入大语言模型。这里的关键是Prompt  设计。下面就是一个例子。

你是严谨的助手。请仅依据 相关文档作答,不知道就说不知道,不要编造。

 问题】{query}

【相关文档( 带编号)】

{contexts}    #  例如:[1]  段落 A  [2]  段落 B 

 要求】

1)  先给结论,再给依据;

2)  在依据处用[编号]标注来源;

3)  若文档冲突,指出冲突并分别给出可能结论;

4)  如问题与文档无关,明确说明无法回答并建议更精确的提问。

更多推荐