一、RAG原理
用户输入了一个指令Instruct,RAG将其与Document store(向量库)中的预存文本进行匹配,然后将符合条件的筛选文本(Retrieved Documents)与指令Instruct,共同合成为一个增强型的Prompt,并将该增强型Prompt喂给大模型,最终大模型根据此增强型Prompt,生成最终的Response。
- RAG技术架构与实现原理
https://cloud.tencent.com.cn/developer/article/2436421
- 用通俗易懂的方式讲解:一文详解大模型 RAG 模块
https://blog.csdn.net/python1222_/article/details/140124845
二、RAG的缺陷
目前RAG效果不佳的原因:一个是Document=>Chunks的切分策略,另一个是在向量库检索(Retrieval)与指令Instruct关联的文本(Chunks)策略。
-
Document=>Chunks的切分策略:
现有工具将文档分成若干个段落,具有完整语义的段落被拆分为数个chunks,或者一个chunk包含几个不同语义的段落,当一个问题的答案需要通过多个不同的信息片段,并通过它们共享的属性来连接,进而提供新的综合见解时,基线 RAG 表现得很差。
-
向量库检索(Retrieval)与指令Instruct关联的文本(Chunks)策略:
从向量库检索匹配指令Instruct的文本,存在只能匹配细粒度的问题,在查询阶段,RAG将用户指令Instruct挨个在向量库与这些chunks的embedding向量进行相似度匹配,然后输出最匹配的k个作为prompt的上下文(context),未能考虑各个chunk之间的关联。当被要求在大量数据或复杂文档中进行总结、提炼和理解时,基线 RAG 往往表现不佳。
三、GraphRAG
GraphRAG 使用 知识图谱 来在推理复杂信息时显著提升问答性能。当需要对复杂数据进行推理时,GraphRAG 展示了优于基线 RAG 的性能,特别是在 知识图谱 的帮助下。
核心特点
1. 基于知识图谱的全局推理
通过引入知识图谱结构化数据,突破传统向量检索的局限性,动态捕捉实体关系,支持跨信息点的全局性关联分析(如发现隐藏的模式和跨领域逻辑链)。
2. 多层次查询能力
提供三层搜索模式:
- 全局搜索:基于社区聚类的宏观洞察(如Leiden层次聚类)
- 局部搜索:聚焦实体邻域关联的深度推理
- DRIFT混合搜索:结合局部与全局信息平衡精度与广度
3. 图神经网络增强架构
集成图机器学习技术,从结构化与非结构化数据中提取深度语义,提升复杂查询(如多跳推理、数据漂移分析)的响应质量。
4. 灵活可扩展的应用适配
提供Prompt调优工具链,支持针对不同场景(如企业知识库、科研文献库)定制检索生成策略,实现精准需求适配。
运行流程
索引(Indexing)过程
文本单元切分:将输入文本分割成 TextUnits,每个 TextUnit 是一个可分析的单元,用于提取关键信息。
实体和关系提取:使用 LLM 从 TextUnits 中提取实体、关系和关键声明。
图构建:构建知识图谱,使用 Leiden 算法进行实体的层次聚类。每个实体用节点表示,节点的大小和颜色分别代表实体的度数和所属社区。
社区总结:从下到上生成每个社区及其成员的总结,帮助全局理解数据集。
查询(Query)过程
索引完成后,用户可以通过不同的搜索模式进行查询:
全局搜索:当我们想了解整个语料库或数据集的整体概况时,GraphRAG 可以利用 社区总结 来快速推理和获取信息。这种方式适用于大范围问题,如某个主题的总体理解。
局部搜索:如果问题关注于某个特定的实体,GraphRAG 会向该实体的 邻居(即相关实体)扩展搜索,以获得更详细和精准的答案。
DRIFT 搜索:这是对局部搜索的增强,除了获取邻居和相关概念,还引入了 社区信息 的上下文,从而提供更深入的推理和连接。
Prompt 调优
为了获得最佳性能,GraphRAG 强烈建议进行 Prompt 调优,确保模型可以根据你的特定数据和查询需求进行优化,从而提供更准确和相关的答案。