RAG:检索增强生成技术概览
背景与动机
将大模型应用于实际业务场景时,通用的基础大模型往往无法满足需求,主要原因包括:
- 知识的局限性:大模型无法获取实时性、非公开或离线数据。
- 幻觉问题:AI 模型基于概率运算,在缺乏特定知识时可能产生错误输出,且难以区分。
- 数据安全性:企业不愿将私域数据上传至第三方平台进行训练,存在泄露风险。
RAG vs Fine-tuning
- Fine-tuning(微调):使用数据集对 LLM 局部参数进行调整,期望模型更好地理解业务逻辑,提升 Zero-shot 能力。
- RAG(检索增强生成):先将内部文档数据进行 Embedding,通过检索获取大致知识范围,再结合 Prompt 输入给 LLM 生成最终答案。
核心概念
RAG = LLM + 外部知识
RAG(Retrieval-Augmented Generation)检索增强生成通过检索获取相关知识并融入 Prompt,让大模型参考相应知识从而给出合理回答。
Retrieval - 检索模型
旨在从一组给定文档或知识库中检索相关信息。具体流程是将用户查询 Embedding,以便与向量数据库中的上下文信息进行比对。通过相似性搜索,找到向量数据库中最匹配的前 k 个数据。
检索核心分为两部分:
- 索引(Indexing):Embedding 过程,将知识库转换为可搜索/查询的内容。
- 查询(Querying):从搜索内容中提取最相关、最佳的知识片段。
Augmented - 增强
将用户的查询和检索到的额外信息一起嵌入到一个预设的提示模板中。
Generate - 生成模型
最终,检索增强的 Prompt 被输入到 LLM 中生成回答。
技术架构与 Pipeline
1. 提取数据阶段 (Ingestion)
1.1 数据清洗
在进行后续步骤前,确保数据符合以下标准:
- Clean:应用自然语言处理基础清理技术,例如确保所有特殊字符正确编码。
- Correct:确保信息一致且事实准确,避免矛盾信息混淆 LLM。
1.2 Chunking(分块)
分块技术的选择至关重要。不同的文本拆分器会根据不同逻辑拆分文档(如按字符、标记等),取决于数据类型。例如,代码文件与 Markdown 文件需要不同的分块技术。
理想的分块长度(chunk_size)取决于用例:问答可能需要较短的具体分块,摘要则可能需要较长分块。分块过短可能缺乏上下文,过长则包含过多无关信息。
此外,需考虑分块间的**滚动窗口(overlap)**以引入额外上下文。
1.3 Embedding Models
通常,生成 Embedding 的维度越高,精度越高。根据实验显示,微调 Embedding Model 可带来 5%-10% 的性能提升。
1.4 Metadata(元数据)
为向量嵌入添加 Metadata 标注可在后续搜索结果处理中发挥重要作用,如进行元数据筛选。例如加入日期、章节引用等额外信息。
1.5 Multi-indexing(多重索引)
当 Metadata 无法充分区分不同上下文类型时,可尝试多重索引技术。针对不同文档类型采用不同索引策略,并在检索时加入索引路由机制。对于表格数据,可提取每个表生成适合检索的摘要,但将原始表返回给 LLM 进行答案合成。


