当前位置: 首页 > news >正文

RAG 系列(十六):Graph RAG——用知识图谱解决多跳关系问题

向量检索的关系盲点

前面几篇从各个角度优化了检索质量:更好的分块、Rerank 重排序、查询改写、CRAG 纠偏。但有一类问题,这些方法都帮不上多少忙:

需要横跨多个实体推理的问题。

举个例子:

“bge-large-zh-v1.5 和 bge-reranker-v2-m3 都来自哪个机构?各自在 RAG 中扮演什么角色?”

向量检索会找到提到 BAAI 或 bge 的文档片段——这没问题,两个模型都会出现。但检索的语义是"找相似",不是"找关系"。LLM 拿到的是两段分散的文本,需要自己去理解"它们都来自 BAAI"这个关联。

再复杂一点:

“从 RAG 到 CRAG,检索质量评估经历了哪些演进步骤?”

这个问题要求按技术演进顺序把 RAG → Rerank → Self-RAG → CRAG 串联起来。向量检索找到的是语义最相似的 top-4 文档,不保证是这条演进链上的节点。

Graph RAG 的切入点:把文档中的实体和关系显式提取出来,构建成知识图谱。检索时不是"找最像的文档",而是"从问题实体出发,沿关系边遍历图"——这天然适合多跳推理。


知识图谱的核心概念

知识图谱的基本单位是三元组

(头实体,关系,尾实体)

例如:

BAAI --[开发]--> bge-large-zh-v1.5 BAAI --[开发]--> bge-reranker-v2-m3 bge-large-zh-v1.5 --[用于]--> 向量检索 bge-reranker-v2-m3 --[用于]--> 重排序

把这些三元组组织成有向图(NetworkX DiGraph),"BAAI 开发了哪些模型"这个问题就变成了:找到 BAAI 节点,列出所有出边。


Graph RAG 的完整流程

构建阶段(离线): 文档 → LLM 提取三元组 → NetworkX 有向图 文档 → Embedding → ChromaDB 向量索引 查询阶段(在线): 问题 ↓ LLM 提取问题实体(如 BAAI、bge-large-zh-v1.5) ↓ 模糊匹配图节点(子串匹配) ↓ BFS 2跳遍历:seed_nodes → 邻居 → 邻居的邻居 ↓ 组装三元组上下文(图遍历结果 + top-2 向量文档补充) ↓ LLM 生成答案

关键设计:Graph RAG 不是纯图检索,而是图遍历上下文 + 向量检索的混合。纯图遍历有"实体边界"——如果问题中的实体没被提取进图,就会漏检;向量检索兜底覆盖这类盲区。


实现:三元组提取

先踩了一个坑

LangChain 提供了LLMGraphTransformer,专门用于从文本提取图结构。我最初使用它:

fromlangchain_experimental.graph_transformersimportLLMGraphTransformer graph_transformer=LLMGraphTransformer(llm=llm)graph_docs=graph_transformer.convert_to_graph_documents([doc])

结果 12 篇文档全部报错:

Invalid JSON: invalid number at line 1 column 2 [type=json_invalid, input_value='- Node: RAG (Retrieval-A...']

原因:LLMGraphTransformer要求 LLM 返回严格的 JSON 格式,但 GLM-4-flash 返回的是文本列表(- Node: xxx),Pydantic 解析失败。

改用自定义 prompt

放弃 JSON,改用更宽松的分隔符格式——实体A | 关系 | 实体B,每行一个三元组,split("|")解析,不依赖 JSON,容错性强:

TRIPLE_EXTRACT_PROMPT=ChatPromptTemplate.from_messages([("system","从以下文本中提取实体和关系,输出三元组列表。\n""格式要求:每行一个三元组,格式严格为:实体A | 关系 | 实体B\n""规则:\n""- 实体用名词短语,不加括号或引号\n""- 关系用动词短语,如:使用、包含、由...提出、适用于、优于\n""- 每行只输出三元组,不要编号,不要解释,不要其他内容\n""- 每篇文档提取8-15个三元组\n\n""示例输出(格式参考):\n""RAG | 使用 | 向量检索\n""RAGAS | 由...提出 | Es等人\n""Chroma | 适用于 | 本地开发"),("human","文本:\n{text}"),])defextract_triples
http://www.jsqmd.com/news/824340/

相关文章:

  • Rust ORM实战:Diesel深度解析
  • 《AI视觉技术:从入门到进阶》第三章(3)
  • STM32串口通信实战:从原理到蓝桥杯嵌入式竞赛应用
  • 一次断电引起的Oracle故障恢复-ora-600 2662故障---惜分飞
  • 贾子竞争哲学与新范式升维战略——从 “多维对抗“ 到 “意义消解“ 的终极战略蓝图
  • CMP仿真:芯片制造良率保障与可制造性设计的关键技术
  • OCPP 1.6 协议详解:ClearChargingProfile 清除充电配置文件指令
  • 对比直接调用与通过taotoken聚合调用的ubuntu端延迟体感
  • 基于物联网的智能家居灯光控制系统(有完整资料)
  • 【职场】所有的职场画饼,都是低成本的控制术
  • 抖音直播弹幕数据抓取:如何构建高效的实时监控系统?
  • 北京正规乔雅登注射机构实地盘点与资质解析 - 资讯焦点
  • 实战指南:利用CTFTraining题库与Docker-Compose在CTFd中一键部署Web靶场
  • Fast-Planner核心思想拆解:从B样条优化到时间重分配,如何让无人机飞得更快更稳?
  • 成都钢材市场包钢集团H型钢2026年5月(上、中、下旬)出厂价格及政策|盛世钢联现货行情与预测 - 四川盛世钢联营销中心
  • Openclaw 错误分析 与 解决方案 之:Selected model is at capacity. Try a different model, or wait and retry.
  • MoneyPrinterTurbo终极指南:5步实现AI短视频自动化创作
  • CANape工程实战指南:从零搭建XCP测量与标定环境
  • diagram-js模块化架构解密:依赖注入与插件系统详解
  • 蛐蛐(QuQu)性能优化技巧:让你的语音识别速度提升50%
  • ACID [Atomicity, Consistency, Isolation, Durability]
  • 谷歌关键词搜索怎么做上去? 提升首页点击率的4个标题优化细节
  • 紧急预警:传统地理文献管理方式正在失效!用NotebookLM重建你的学术记忆系统(含2024最新API适配方案)
  • 探讨国内外AI发展前瞻---未来国内会不会出台政策干预
  • 2026 乌兰浩特搏击训练营哪家好?本地内行带路与避坑考察 - 资讯速览
  • 2026 扬州市江都区格斗馆哪家好?本地内行带路与避坑考察 - 资讯速览
  • 基于Git与Markdown构建本地开发者知识库:Grimoire项目实践指南
  • ComfyUI全面掌握-知识点详解——Nodes 2.0 新特性与实操技巧
  • 当实施动环监控系统时,如何有效提升机房管理的智能化与运行效率?
  • 告别激活烦恼:3分钟搞定Windows和Office永久免费激活的智能方案