从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 |
|---|---|---|
| 知识表示 | 平面文本向量 | 结构化知识图谱 |
| 关系理解 | 隐式、有限 | 显式、可解释 |
| 多跳推理 | 困难 | 天然支持 |
| 可解释性 | 低(黑盒相似度) | 高(可追溯的图谱路径) |
| 适用场景 | 事实性问答 | 复杂关联分析、推理 |
| 构建成本 | 低 | 较高(需要抽取和建模) |
典型应用场景
- 企业知识管理
- 组织架构关系查询
- 项目依赖分析
-
跨部门协作关系
-
医疗诊断支持
- 症状-疾病关联推理
- 药物相互作用分析
-
病历关系图谱
-
金融领域
- 企业关联图谱(股权、担保、交易)
- 风险传导分析
-
反欺诈关系识别
-
法律研究
- 案例之间的引用关系
- 法条适用场景关联
- 当事人关系网络
GraphRAG 的挑战与局限
挑战: - 构建成本高:需要高质量的实体抽取和关系建模 - 图谱维护:知识更新时需要同步更新图谱结构 - 查询复杂度高:图查询相比向量检索计算开销更大 - 规模限制:超大规模图谱的存储和查询性能问题
优化方向: - 结合传统 RAG 的混合检索策略 - 使用近似图算法降低查询复杂度 - 增量更新机制减少全量重建成本 - 考虑使用 [[LightRAG]] 作为轻量级替代方案
主流实现方案
| 方案 | 特点 |
|---|---|
| Microsoft GraphRAG | 官方实现,支持社区检测和分层摘要 |
| Neo4j + LLM | 成熟图数据库生态,查询灵活 |
| LlamaIndex Property Graph | 与 LlamaIndex 框架深度集成 |
| LangChain Graph QA | 易于上手,快速原型验证 |
相关资源
- 轻量级替代方案:[[LightRAG]] - 更低成本、支持增量更新的 GraphRAG 变体