RAG全称 Retrieval-Augmented Generation,即 检索增强生成,是一种基于大模型的生成式技术。 就是回答问题前,先做一轮内部知识检索,根据检索结果,再调用大模型生成回答。
RAG是目前全球最流行的AI技术。RAG的能力可以将参考资料、样例放在Prompt中,叫做In-Context-Learning。但是目前的大模型能接收的提示词有字数限制,而且提示词内容多了性能会严重下级,所以需要一个知识库,需要的时候就在知识库里找一些有用的信息,是一种结合外部知识检索与大语言模型(LLM)生成能力的混合架构,旨在弥补大模型知识时效性不足、无法访问私有数据及幻觉问题等缺陷。本文将详细阐述RAG系统的完整架构设计,从核心组件到优化策略,提供一个专业、全面且可落地的RAG系统解析。

一、RAG系统核心架构

RAG系统主要由四个核心模块构成:文档处理模块、向量存储模块、检索模块和生成模块。这四个模块协同工作,形成了一个闭环的信息检索与生成流程。
在这里插入图片描述

1. 文档处理模块

文档处理模块是RAG系统的数据入口,负责将原始文档转换为可检索的知识单元。该模块包含以下子流程:

  • 文档加载:支持多种格式文档的输入(如PDF、Word、HTML、Markdown、CSV等)
  • 文本解析:提取文档中的有效文本内容,保留文档结构信息
  • 文档分块(Chunking):将长文档分割成适当大小的文本块,保留语义完整性
  • 元数据保留:记录每个文本块的来源信息(如文档标题、页码、章节等)
  • 向量化(Embedding):将文本块转换为高维向量表示

这些子流程共同将原始文档转换为向量数据库中可检索的知识单元,是RAG系统的基础。

2. 向量存储模块

向量存储模块是RAG系统的"记忆库",负责高效存储和检索高维向量。该模块包含以下关键组件:

  • 向量数据库: 如Milvus、FAISS、ChromaDB等,支持大规模向量存储和快速检索
  • 索引结构: 如HNSW (Hierarchical Navigable Small World)索引,显著提升检索效率
  • 向量量化: 如二进制量化(存储压缩32倍)或产品量化(PQ),平衡存储空间与检索精度
  • 嵌入模型: 如text-embedding-v3(支持多语言、8192 token)或OpenAI的text-ada-embedding-002,负责文本向量化

向量存储模块的质量直接决定了RAG系统的检索效率和准确性,是系统性能的关键瓶颈。

3. 检索模块

检索模块是RAG系统的"信息筛选器”,负责从向量数据库中快速定位与用户查询最相关的知识单元。该模块包含以下子组件:

  • 稀疏检索器: 如BM25,基于关键词匹配进行初步筛选
  • 稠密检索器: 如DPR或OpenAI的语义检索,基于向量相似度进行深度匹配
  • 混合检索器: 如RRF(Reciprocal RankFusion),融合稀疏和稠密检索结果
  • 重排序器: 如LLMRerank,利用小模型对检索结果进行二次排序
  • 分层检索器: 如HIRO,根据文档层次结构进行递归检索和剪枝

检索模块通过多种策略组合,确保能够从海量知识库中精准定位相关上下文。

4. 生成模块

生成模块是RAG系统的"回答构建者",负责利用检索到的上下文和用户查询生成最终回答。该模块包含以下关键组件:

  • Prompt模板: 结构化格式,指导LLM如何利用检索结果
  • 上下文组装: 将检索结果按一定顺序组织,形成LLM输入
  • 上下文压缩: 如AMR概念蒸馏,减少上下文长度同时保持语义完整性
  • 知识图谱增强: 如MedGraphRAG,利用知识图谱结构提升复杂推理能力
  • 生成器: 如GPT-3.5-turbo或GPT-4,负责最终回答生成

生成模块的质量决定了RAG系统最终输出的准确性和可读性,是用户体验的直接体现。

二、RAG系统完整工作流程

RAG系统的工作流程分为离线预处理阶段和在线问答阶段两个主要部分。以下是对这两个阶段的详细解析:

发展路径

  • 离线预处理:将外部知识库构建为可高效检索的向量数据库,是系统的初始化过程。
  • 在线问答:根据用户查询,从向量数据库中检索相关上下文,并生成最终回答。

1. 离线预处理阶段

离线预处理阶段是RAG系统的初始化过程,负责将外部知识库构建为可高效检索的向量数据库。

流程步骤:
  1. 文档加载与解析

    • 输入: 多种格式的原始文档(PDF、Word、HTML等)
    • 处理: 使用文档加载器(如LangChain的webBaseLoader)提取有效文本
    • 输出: 结构化文本集合
  2. 文档分块与元数据保留

    • 输入: 结构化文本集合
    • 处理:
      • 智能分块: 保留语义完整性,通常为300-1000字
      • 元数据添加: 记录文档来源信息(标题、页码等)
    • 输出: 带元数据的文本块集合
  3. 文本向量化

    • 输入: 带元数据的文本块集合
    • 处理:
      • 使用嵌入模型(如text-embedding-v3)生成向量表示
      • 处理长文本截断问题(如text-embedding-v3支持8192 token)
    • 输出: 文本块向量集合
  4. 向量存储

    • 输入: 文本块向量集合
    • 处理:
      • 使用向量数据库(如FAISS)存储向量
      • 构建高效索引结构(如HNSW)
      • 应用向量量化技术(如二进制量化)压缩存储空间
    • 输出: 初始化的向量数据库
离线预处理阶段的关键技术:
  • 智能分块策略:在段落、标题、列表等自然分隔处切分,避免切断关键信息
  • 元数据管理:每个文本块应保留来源页码、标题等上下文信息,便于溯源
  • 向量化优化:根据文档规模选择合适的嵌入模型和向量维度
  • 向量存储配置:根据实际需求选择向量数据库并优化索引参数

2. 在线问答阶段

在线问答阶段是RAG系统的运行时流程,负责根据用户查询生成准确、有依据的回答。

流程步骤:
  1. 用户查询接收

    • 输入:用户自然语言查询
    • 处理:记录查询时间、用户身份等上下文信息
    • 输出:带上下文的用户查询
  2. 问题改写与扩展

    • 输入:用户查询
    • 处理
      • 查询扩展:如HyDE技术,利用LLM生成伪文档扩展查询
      • 问题改写:调整查询表述以匹配知识库中的术语
      • 实体识别:提取查询中的关键实体和关系
    • 输出:优化后的查询表述
  3. 混合检索与重排序

    • 输入:优化后的查询表述
    • 处理
      • 稀疏检索:如BM25,基于关键词匹配初步筛选
      • 稠密检索:如DPR,基于向量相似度深度匹配
      • RRF融合:计算RRFscore = 1/(k + rank),融合多检索器结果(k通常为60或1)
      • 重排序:如LLM Rerank,利用小模型对检索结果进行二次排序
      • 层级检索:如HIRO,根据文档层次结构递归检索和剪枝
    • 输出:按相关性排序的检索结果集合
  4. 上下文组装与优化

    • 输入:排序后的检索结果集合
    • 处理
      • 上下文截断:选择最相关前N个检索结果
      • 上下文反转:反转检索结果后半段顺序,缓解LLM"中间信息遗忘"问题
      • 上下文压缩:如AMR概念蒸馏,减少上下文长度
      • 知识图谱增强:如MedGraphRAG,利用知识图谱结构增强上下文
    • 输出:优化后的上下文集合
  5. Prompt构建与LLM调用

    • 输入:用户查询、优化后的上下文集合
    • 处理
      • Prompt模板填充:使用ChatPromptTemplate结构化拼接查询和上下文
      • 上下文位置优化:将最相关上下文放置在靠近用户查询的位置
      • 系统指令添加:指导LLM如何利用检索结果生成回答
    • 输出:完整的LLM输入Prompt
  6. 回答生成与溯源

    • 输入:完整Prompt
    • 处理
      • LLM推理:调用大语言模型生成回答
      • 信息过滤:去除检索结果中的冗余和矛盾信息
      • 逻辑整合:串联分散的检索信息形成连贯回答
    • 输出:最终回答及对应的引用溯源
  7. 评估与反馈

    • 输入:最终回答、用户反馈
    • 处理
      • 回答质量评估:如CSGA(与地面真实答案的余弦相似度)
      • 知识库更新:根据反馈更新相关文档
      • 模型参数调整:如调整检索阈值、上下文长度等
    • 输出:优化后的RAG系统

三、RAG系统优化策略

为提升RAG系统性能,研究者提出了多种优化策略,主要包括检索优化、上下文优化和生成优化三个维度。

1. 检索优化策略

检索优化策略旨在提高检索结果的相关性和多样性,减少对LLM的干扰。

(1) 分层检索(Hierarchical Retrieval)

分层检索通过构建文档层次结构(如文档→段落→句子)进行多级检索,显著减少检索结果的冗余性。

  • 实现方式
    • Tree Traversal:逐层检索,从高层到低层逐步筛选
    • collapsed tree:扁平化检索,将层次结构展开为单层检索
    • HIRO优化:采用DFS递归检索和动态剪枝(通过Selection Threshold和Delta Threshold控制层级深度)
    • Hybrid Retriever:结合BM25和DPR的混合检索器,通过RRF公式融合结果
  • 效果:在医学问答等专业领域,分层检索可将准确率提升15-20%,同时减少40%的检索噪声。
    在这里插入图片描述
(2) 查询扩展(Query Expansion)

查询扩展通过丰富用户查询的表述,提高检索的召回率和准确性。

  • 实现方式
    • HyDE技术:利用LLM生成伪文档并拼接为新查询
    • 实体识别扩展:识别查询中的关键实体并扩展相关术语
    • 同义词替换:使用NLP工具识别并替换查询中的同义词
    • 多语言适配:如text-embedding-v3支持的50+语种扩展
  • 效果:在金融风控等专业领域,查询扩展可将检索相关性从68%提升至85%,同时减少15%的幻觉回答。
    在这里插入图片描述

2. 上下文优化策略

上下文优化策略旨在提高LLM处理检索结果的效率和效果,解决上下文过长问题。

(1) 上下文压缩(Contextual Compression)

上下文压缩通过提取检索结果中的核心概念,在保持语义完整性的同时显著减少上下文长度。

  • 实现方式
    • AMR概念蒸馏:提取抽象意义表示(Abstract Meaning Representation)的核心概念
    • 关键词提取:使用TextRank等算法提取检索结果中的关键词
    • 层级压缩:如HiRAG的HiCompress模块,根据文档层次结构进行分级压缩
    • 长度控制:根据LLM的上下文窗口限制(如4096、8192 token)动态调整检索结果数量
  • 效果:在长文档处理场景,AMR压缩可在保持ROUGE-L 0.85以上时,将上下文长度减少40%,显著降低LLM推理时间。
  • 关键效果:AMR压缩可在保持ROUGE-L 0.85以上时,将上下文长度减少40%,显著降低LLM推理时间。
(2) 上下文反转(Context Reversal)

上下文反转通过调整检索结果在Prompt中的顺序,缓解LLM的“中间信息遗忘”问题。

  • 实现方式
    • 检索结果按相关性排序
    • 将后半段检索结果反转顺序
    • 保持最相关结果在最前端
  • 效果:在生物医学文献问答场景,上下文反转可将中间信息的利用率从32%提升至75%,显著改善回答质量。
    在这里插入图片描述

3. 生成优化策略

生成优化策略旨在提高LLM生成回答的质量和可靠性,减少幻觉和错误。

(1) 层次化知识桥接(Hierarchical Knowledge Fusion)

层次化知识桥接通过知识图谱结构整合检索结果,解决语义相关但结构疏远的知识碎片化问题。

  • 实现方式
    • 构建知识图谱索引(HiIndex)
    • 检索时同时获取摘要实体和细节实体
    • 按语义关联重组检索结果,形成连贯上下文
  • 效果:在医疗问答领域,层次化知识桥接可将复杂推理准确率提升15%,显著优于传统RAG方法。
  • 关键效果:在医疗问答领域,层次化知识桥接可将复杂推理准确率提升15%,显著优于传统RAG方法。
(2) 动知识验证 (Dynamic Knowledge Verification)

动态知识验证通过小模型预生成答案候选,再反向检索相关文档,形成闭环优化。

  • 实现方式:
    • 用户输入LLM生成初始答案
    • 初始答案一检索相关文档验证
    • 验证结果一>重新生成最终答案
  • 效果: 在法律咨询场景,动态知识验证可将答案的准确性和可靠性提升25%,同时减少30%的检索延迟。
  • 在这里插入图片描述

四、RAG系统流程图详解

以下是对RAG系统完整流程图的逐层解析,包含各组件间的交互逻辑和数据流向:

1. 离线预处理阶段

  • 文档加载与解析:系统首先从外部知识库加载原始文档,支持多种格式(如PDF、Word、HTML等)。文档加载器会提取文档中的有效文本内容,并保留文档结构信息(如标题、章节等)。
  • 文档分块与元数据保留:将长文档分割成适当大小的文本块(通常为300-1000字),关键在于保留语义完整性。每个文本块都会添加元数据(如文档标题、页码、章节等),便于后续溯源和验证。
  • 文本向量化:使用嵌入模型(如text-embedding-v3或OpenAI的text-ada-embedding-002)将文本块转换为高维向量表示。处理长文本截断问题(如text-embedding-v3支持8192 token)。
  • 向量存储:将生成的文本块向量存储在向量数据库(如FAISS、Milvus、ChromaDB)。使用高效索引结构(如HNSW)和向量量化技术(如二进制量化)优化存储空间和检索效率。

2. 在线问答阶段

  • 用户查询接收:系统接收用户自然语言查询,并记录查询时间、用户身份等上下文信息。
  • 问题改写与扩展:对用户查询进行优化,包括查询扩展(如HyDE技术)和问题改写,提高检索的召回率和准确性。同时进行实体识别,提取查询中的关键实体和关系。
  • 混合检索与重排序:执行多级检索,包括:
    • 稀疏检索(如BM25)基于关键词匹配初步筛选
    • 稠密检索(如DPR)基于向量相似度深度匹配
    • RRF融合计算RRFscore = 1/(k + rank)融合多检索器结果
    • 重排序(如LLM Rerank)利用小模型对检索结果进行二次排序
    • 层级检索(如HIRO)根据文档层次结构递归检索和剪枝
  • 上下文组装与优化:将检索结果进行优化处理,包括:
    • 上下文截断选择最相关前N个检索结果
    • 上下文反转反转检索结果后半段顺序
    • 上下文压缩(如AMR概念蒸馏)减少上下文长度
    • 知识图谱增强(如MedGraphRAG)利用知识图谱结构增强上下文
  • Prompt构建与LLM调用:使用ChatPromptTemplate结构化拼接查询和上下文,形成完整的LLM输入Prompt。将最相关上下文放置在靠近用户查询的位置,提高LLM对关键信息的关注度。
  • 回答生成与溯源:调用大语言模型生成回答,同时保留引用溯源信息(如文档标题、页码等)。LLM会过滤检索结果中的冗余和矛盾信息,并整合分散的信息形成连贯回答。
  • 评估与反馈:根据用户反馈和评估指标(如CSGA)优化系统,包括更新知识库内容和调整系统参数。

五、RAG系统在不同领域的应用

RAG系统在多个领域展现出独特价值,其核心组件和流程可根据具体需求进行调整。

1. 医疗健康领域

MedGraphRAG:牛津大学等提出的医学GraphRAG方法,通过生成循证回答和官方医学术语解释,显著提升LLM在医学领域的表现。

  • 关键调整
    • 检索模块:采用知识图谱检索,将用户问题映射为SPARQL查询
    • 生成模块:加入医学术语验证和证据引用要求
    • 评估指标:增加临床准确性、循证等级等医学特有指标
  • 效果:在11个医学问答数据集上达到SOTA,诊断准确率提升15%。

2. 金融风控领域

金融RAG:通过结合监管文件检索和历史案例分析,提升风险评估的准确性和合规性。

  • 关键调整
    • 知识库:整合法律法规、监管文件和历史案例
    • 检索模块:增加时间敏感性过滤,优先检索最新法规
    • 生成模块:加入风险评估框架和合规性验证要求
    • 评估指标:增加合规性评分和风险预测准确率
  • 效果:在反洗钱场景,金融RAG可将风险识别准确率提升20%,同时减少30%的误报。
    在这里插入图片描述

3. 企业知识管理领域

企业RAG:构建内部问答系统,快速定位政策、流程文档。

  • 关键调整
    • 知识库:整合企业内部文档、政策和流程
    • 检索模块:增加部门和权限过滤,确保回答符合用户权限
    • 生成模块:加入企业术语和表述规范要求
    • 评估指标:增加响应时间和员工满意度
  • 效果:在三甲医院应用中,RAG系统整合电子病历与医学文献,实现辅助诊断,诊断准确率提升15%。

六、RAG系统挑战与未来方向

尽管RAG系统在多个领域取得了显著成果,但仍面临以下核心挑战:

1. 当前挑战

  • 检索噪声传播:检索结果中的错误信息可能被LLM放大和传播
  • 知识冲突:外部证据与模型参数记忆之间的知识可能不一致
  • 检索-生成闭环缺陷:检索与生成之间的反馈机制不完善
  • 长上下文处理:LLM在处理长上下文时容易出现"中间信息遗忘"问题
  • 动态知识更新:知识库的更新与LLM的适应之间存在滞后

2. 未来发展方向

  • 知识可信度评估:开发系统性的知识可信度评估机制,减少噪声传播
  • 多模态RAG:整合文本、图像和表格等多模态知识源
  • 实时知识更新:建立动态知识库更新机制,缩短知识滞后时间
  • 推理能力增强:提升RAG系统的复杂推理能力,特别是在专业领域
  • 个性化知识检索:根据用户背景和专业领域调整检索策略

七、RAG系统实现建议

根据研究结果,以下是实现高效RAG系统的建议:

1. 架构选择建议

  • 知识密集型任务:优先考虑图结构RAG(如MedGraphRAG),提升复杂推理能力
  • 实时性要求高:采用分层检索(如HIRO)优化检索效率,减少延迟
  • 多语言场景:选择支持多语言的嵌入模型(如text-embedding-v3)
  • 资源受限环境:采用向量量化技术(如二进制量化)压缩存储空间

2. 优化策略建议

  • 对于幻觉问题:采用动态知识验证(如FB-RAG),形成闭环优化
  • 对于上下文过长:采用AMR概念蒸馏或上下文反转优化
  • 对于专业领域:结合查询扩展(如HyDE)和知识图谱增强
  • 对于多跳推理:采用HiRAG的“重新思考”机制,验证和重新检索信息

3. 评估与迭代建议

  • 定量指标:使用精确率(Precision)、召回率(Recall)、F1值评估检索效果;通过ROUGE-L、BLEU等指标评估生成质量
  • 定性评估:邀请领域专家对系统输出进行人工评分和反馈
  • 持续优化:根据用户反馈调整检索阈值、更新知识库内容
  • A/B测试:对比不同优化策略的效果,选择最适合业务场景的方案

八、总结

RAG系统通过将大语言模型的生成能力与外部检索系统相结合,为解决大模型的知识时效性不足、无法访问私有数据及幻觉问题提供了一条有效路径。系统的核心架构包括文档处理模块、向量存储模块、检索模块和生成模块,各模块协同工作形成完整的知识检索与生成流程。
通过分层检索、查询扩展、上下文压缩和层次化知识桥接等优化策略,RAG系统在多个领域(如医疗健康、金融风控和企业知识管理)展现出显著优势。系统面临的挑战主要集中在检索噪声传播、知识冲突和长上下文处理等方面,未来发展方向将聚焦于知识可信度评估、多模态RAG和实时知识更新。
最终,RAG系统的成功应用取决于对业务场景的深入理解,以及对系统架构和优化策略的合理选择与配置。通过本文的详细解析,希望读者能够全面理解RAG系统的架构与流程,并在实际应用中取得良好效果。

关键总结:RAG系统的成功应用取决于对业务场景的深入理解,以及对系统架构和优化策略的合理选择与配置。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐