一、概述
RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合检索系统与生成模型的技术架构。其核心思想是:在 LLM 生成回答之前,先从知识库中检索相关文档或片段(chunk),将检索结果作为上下文提供给 LLM,从而提升回答的准确性和可信度,同时有效缓解 LLM 的「幻觉」问题。
RAG 主要解决以下问题:
- 知识时效性问题:LLM 的训练数据有截止日期,无法获取最新信息。RAG 通过实时检索外部知识库,使系统能够回答训练数据之后的新知识。
- 私域知识问题:企业内部的专有数据(如内部文档、产品手册、客户资料等)不会被纳入通用 LLM 的训练数据。RAG 可以将这些私域知识纳入检索范围,使 LLM 能够回答特定领域的问题。
- 幻觉问题:LLM 有时会「编造」看似合理但实际错误的信息。RAG 通过提供可靠的检索结果作为上下文,约束 LLM 的回答范围,显著降低幻觉发生的概率。
从整体上看,RAG 工作流程分为两个阶段:
- 离线数据存储阶段:把各种来源的知识库源文件,经过处理后存储到向量数据库中。
- 在线检索阶段:用户输入查询内容,系统完成检索和生成,最终输出结果。
二、离线数据存储阶段
离线阶段的核心目标是将原始文档转化为可检索的向量数据。整个流程可分为以下几个步骤:
2.1 数据收集
从各类知识来源收集原始文档,包括 PDF、Word、Markdown、网页等多种格式。来源可能包括内部文档库、产品手册、FAQ、技术文档等。
2.2 数据清洗
对原始数据进行格式化和校验,去除无效符号(如乱码、特殊控制字符)、重复内容、噪声数据等,确保后续处理的输入质量。
2.3 文档切分(Chunking)
将文档切分成一个个小的文本块(Chunk),这是因为:
- 完整文档通常过长,超出 LLM 的上下文窗口限制
- 细粒度的 Chunk 便于精准检索,避免引入过多无关上下文
- 合理的切分策略直接影响检索效果和生成质量
常见的切分策略包括按段落、按句子、滑动窗口、基于语义等方法。具体策略的选择需要根据业务场景和文档特点来决定。
详细的chunk切分策略可以查看这篇文章:RAG 检索的 Chunk 切分策略完全指南
2.4 Embedding 向量化
使用 Embedding 模型将切分后的 Chunk 转化为稠密向量,然后存储到向量数据库中。模型的选择需要考虑维度、语言支持、领域适配等因素。
详细的Embedding模型选择可以查看这篇文章:RAG检索效果差?可能是你的Embedding模型没选对!
2.5 向量数据库存储
将向量化后的 Chunk 连同其元数据(如来源文档、时间、标签等)一并存入向量数据库。常用的向量数据库包括 Milvus、Pinecone、Chroma、Weaviate 等。
2.6 质量验证
数据入库后应进行抽样质量检查,包括:验证 Embedding 是否正确生成、Chunk 内容是否完整、关键信息是否丢失等,确保知识库的基础质量。
三、在线检索阶段
在线阶段是 RAG 系统响应用户查询的核心流程。我们通过拆解这个问题来理解:
「在一个 RAG 系统中,用户输入检索内容后,都发生了什么?」
3.1 意图识别
对用户输入进行意图识别,判断用户想要做什么。常见的处理包括:
- 闲聊/问候类内容(如「你好」、「hello」)→ 直接返回固定回复,减少检索资源消耗
- 知识问答类 → 走 RAG 检索通道
- 特定场景区分 → 根据业务领域进行细分,如电商场景中的产品查询、售后咨询等
3.2 路由分发(Routing)
根据意图识别结果,将请求分发到不同的处理通道。例如,电商场景中产品咨询走产品知识库通道,售后问题走售后知识库通道。路由可以使后续检索更加专业和精准。
3.3 Query 预处理
对用户输入进行规范化处理,包括:
- 去除空白字符、空行
- 纠正错别字、拼写错误
- 统一标点符号格式
3.4 Query 改写与扩展
针对搜索场景优化的预处理步骤:
- Query 改写:理解用户真实意图,改写为更利于检索的表达
- Query 扩展:补充同义词、近义词、相关概念,提升召回率
- Query 分解:将复杂问题拆分为多个简单子问题,便于多步检索
3.5 Query Embedding
将预处理后的 Query 向量化,然后到向量数据库中进行检索。这一步使用的 Embedding 模型应与离线阶段保持一致。
3.6 多路召回(Multi-Channel Retrieval)
实际应用中通常采用多路召回策略,通过多种途径获取综合性的候选结果:
- 向量检索(Dense Retrieval):基于语义相似度进行匹配
- 关键词检索(Sparse Retrieval):如 BM25,捕捉词汇层面的精确匹配
- 混合检索:结合向量检索和关键词检索的优势
- 其他:根据业务需要,还可以引入知识图谱检索、协同过滤等
3.7 Rerank 重排
根据多路召回的结果,进行更精准的筛选和排序。常用的方法包括:
- 交叉编码器(Cross-Encoder):对 Query 和候选 Chunk 进行精细化打分
- 相关性过滤:根据相似度分数过滤低质量结果
- 多样性考量:避免返回内容高度相似的结果,保证覆盖度
最终返回 Top-K 个最相关的 Chunk 作为后续生成的输入。
3.8 上下文组装
将重排后的检索结果拼接到 Prompt 中,形成完整的上下文。需要注意:
- 控制上下文长度,避免超出 LLM 的 token 限制
- 必要时对上下文进行压缩或摘要,提取最关键的信息
- 保持信息的完整性和连贯性
3.9 LLM 生成
将组装好的 Prompt 发送给 LLM,由 LLM 生成最终回答。
补充说明:在简单的知识库问答系统中,上述步骤即为完整的处理流程。但在复杂的 Agent 系统中,Prompt 拼接和 LLM 调用可能只是某一次工具调用的一部分。系统需要根据 LLM 的返回结果判定是否需要继续检索、进行其他工具调用,或执行其他任务——这就是 Agent 工作流相关的内容了。
四、RAG 评估体系
评估 RAG 系统通常从两个维度进行:
检索质量
衡量检索系统找到相关信息的能力,常用指标包括:召回率(Recall)、精确率(Precision)、MRR(Mean Reciprocal Rank)、NDCG 等。
生成质量
衡量 LLM 生成回答的质量和相关性,常用方法包括:人工评估、自动评估(如 RAGAS 框架)、LLM-as-Judge 等。
五、总结
RAG 工作流程涵盖了从数据处理到最终生成的完整链路。离线阶段完成知识库的构建,在线阶段完成用户查询的理解、检索和回答生成。理解每个环节的作用和优化点,是构建高质量 RAG 系统的基础。
随着技术的发展,RAG 也在持续演进,从简单的检索增强到 Agentic RAG、自适应检索、多跳推理等高级能力不断丰富。在实际应用中,应根据业务场景和需求,选择合适的方案组合。
