Skip to content

从RAG出发

RAG

简易流程: ![[Pasted image 20250814014613.png]] - 知识库 - 切割文档 - 知识块embedding - 切分:语义连贯性 同一段文本里语义连续 统一并且完全的 - 固定大小划分:按字符数 token - 标点符号划分:如换行符 - 文档结构划分:标题、章节 - 语义划分:句子按相关性整合成块 - 转为文本向量 - 去重词袋法和不去重词袋法 - TF-IDF:根据词频 - 稀疏向量 - 稠密向量:词嵌入:语义相关性好 - 向量数据库: - 嵌入文本 存储向量 相似度分析 - chromadb - 检索 - 基于文本相似度的检索:余弦相似度 - 语义捕捉效果好

- 基于关键字的检索
    - 分词去重->关键词文档对应表
    - 抽取关键词->查表匹配->匹配文档
    - 在部分关键词明确场景下命中率高
  • 回答
    • 提示词的构造

优化

检索优化

small-to-big

  • 摘要检索:根据摘要检索 ![[Pasted image 20250814020354.png]]
  • 子问题检索 ![[Pasted image 20250814020403.png]] 句子窗口检索![[Pasted image 20250814020521.png]]

多路召回

![[Pasted image 20250814020624.png]] 计算不同文档的得分

ReRANK

![[Pasted image 20250814020936.png]]为什么不直接rerank。模型消耗资源,第一步初步得到候选 ![[Pasted image 20250814021013.png]]

生成优化

  • refine模式
    • 文档太多浪费资源 ![[Pasted image 20250814023021.png]]
  • 多文档场景refine ![[Pasted image 20250814023141.png]] tree_summarize ![[Pasted image 20250814023409.png]]

改写提问

  • 提问不规范:语义模糊、有歧义、提问不规范
  • 多轮对话:结合历史问答提问改写,指代消解 tata
  • 复杂提问:拆解成多个问题,分别提问RAG

合理利用元数据

![[Pasted image 20250814023833.png]] - 检索前过滤 - 检索评估相关性 - 检索后重排 - 参考来源

评估RAG

  • 给出优化方向,量化成效,快速迭代
  • 指标
    • 准确率:用户角度看回答是否符合实际情况
    • 忠实度:生成的内容是否忠实于提供的上下文或背景信息
    • 召回率、精确率和F1 ![[Pasted image 20250814024509.png]]
  • 评估
  • ![[Pasted image 20250814024745.png]]
    • 人工评估
    • 模型自动评估
    • 评估框架
      • langsmith平台
      • langfuse平台
      • rags

RAG三个阶段

![[Pasted image 20250814025155.png]]

GraphRAG

为什么需要 GraphRAG

传统 RAG 只能进行文本片段的检索,无法理解片段之间的语义关系。当用户提问涉及多个实体关联、复杂逻辑推理时,传统 RAG 往往表现不佳。

GraphRAG 的核心优势: - 关系理解:通过知识图谱显式建模实体间的关系 - 全局推理:支持跨文档的多跳推理 - 结构化检索:基于图结构的精准检索,而非单纯的语义相似度

GraphRAG 架构流程

文档输入 → 文本分块 → 实体关系抽取 → 知识图谱构建 → 图谱检索 → 增强生成

1. 索引阶段(Index)

Step 1: 文档切分(Text Unit) - 将文档切分为合适的文本块(chunk) - 保持语义连贯性,通常按段落或语义边界切分 ![[Pasted image 20260309220531.png]]

Step 2: 实体与关系抽取

使用 LLM 从文本中提取: - 实体(Entities):人物、地点、组织、概念等 - 关系(Relationships):实体之间的语义关联 - 属性(Attributes):实体的特征描述

Step 3: 图谱构建与优化

![[Pasted image 20260309200628.png|500]]

  • 实体消歧:合并指代同一实体的不同表述
  • 例:"哈利·波特"、"Harry Potter"、"那个男孩" → 统一节点
  • 关系去重:合并重复或相似的关系
  • 构建社区(Community):将紧密关联的实体聚类形成社区

2. 查询阶段(Query)

全局搜索(Global Search) - 针对抽象、概括性问题 - 遍历整个图谱结构 - 利用社区摘要进行高层语义理解 从从community出发出发 - 提供query和community给LLM - LLM输出answer和score ![[Pasted image 20260309224229.png]]

局部搜索(Local Search) - 针对具体实体问题 - 用户问题变为向量 然后从向量数据库中进行搜索entity - 从相关实体出发,探索邻居节点 - 获取多跳关联信息 - 提供query和unit entities relationship communities给LLM

GraphRAG vs 传统 RAG 对比

维度 传统 RAG GraphRAG
知识表示 平面文本向量 结构化知识图谱
关系理解 隐式、有限 显式、可解释
多跳推理 困难 天然支持
可解释性 低(黑盒相似度) 高(可追溯的图谱路径)
适用场景 事实性问答 复杂关联分析、推理
构建成本 较高(需要抽取和建模)

典型应用场景

  1. 企业知识管理
  2. 组织架构关系查询
  3. 项目依赖分析
  4. 跨部门协作关系

  5. 医疗诊断支持

  6. 症状-疾病关联推理
  7. 药物相互作用分析
  8. 病历关系图谱

  9. 金融领域

  10. 企业关联图谱(股权、担保、交易)
  11. 风险传导分析
  12. 反欺诈关系识别

  13. 法律研究

  14. 案例之间的引用关系
  15. 法条适用场景关联
  16. 当事人关系网络

GraphRAG 的挑战与局限

挑战: - 构建成本高:需要高质量的实体抽取和关系建模 - 图谱维护:知识更新时需要同步更新图谱结构 - 查询复杂度高:图查询相比向量检索计算开销更大 - 规模限制:超大规模图谱的存储和查询性能问题

优化方向: - 结合传统 RAG 的混合检索策略 - 使用近似图算法降低查询复杂度 - 增量更新机制减少全量重建成本 - 考虑使用 [[LightRAG]] 作为轻量级替代方案

主流实现方案

方案 特点
Microsoft GraphRAG 官方实现,支持社区检测和分层摘要
Neo4j + LLM 成熟图数据库生态,查询灵活
LlamaIndex Property Graph 与 LlamaIndex 框架深度集成
LangChain Graph QA 易于上手,快速原型验证

相关资源

  • 轻量级替代方案:[[LightRAG]] - 更低成本、支持增量更新的 GraphRAG 变体