GraphRAG 入门教程:从原理到实战

GraphRAG 入门教程:从原理到实战

在这里插入图片描述

1. 什么是 GraphRAG?

GraphRAG 是一种结构化的、分层的检索增强生成(Retrieval-Augmented Generation,简称 RAG)方法

  • 和传统的 RAG 不同,GraphRAG 不仅仅依赖文本相似度搜索,而是先把文本转成 知识图谱(-Knowledge Graph),再基于图谱结构来检索和生成答案。
  • 【回答质量高,但 token 消耗大、生成时间久,所以使用代价较高,个人部署不建议 ~~~ 】

简单来说:

  • 传统 RAG:找到和问题最像的文本片段 → 直接生成答案。
  • GraphRAG:先提取实体和关系 → 构建知识图谱 → 检索更精准的信息 → 生成更丰富的答案。

这样做的好处是:

  • 更好地处理跨文档、多跳推理的问题。
  • 能发现信息之间的隐含联系,而不仅是关键词匹配。

2. GraphRAG 原理

在这里插入图片描述

GraphRAG 核心思想:

  1. 从原始文本中提取知识图谱
    • 节点(实体)+ 边(关系)
  2. 构建社区层级(Community Levels)
    • 发现信息的群体结构,比如哪些实体属于同一主题、组织或地理位置。
  3. 为这些社区生成摘要
    • 让模型理解某个社区的整体背景。
  4. 结合 RAG 任务执行问答
    • 通过图谱检索找到最相关的信息,再生成答案。

类比一下:传统 RAG 是“在书里找几段相关的句子”,GraphRAG 是“先画一张信息关系图,再从图上找到最优路径来回答问题”。


3. GraphRAG 的流程

GraphRAG 的整体流程可以分为两大部分:索引阶段查询阶段
在这里插入图片描述

3.1 索引阶段(Indexing)

  1. 切分文本: 把大文本库切成可处理的小单元(TextUnits)。
  2. 提取实体、关系和关键声明:用 LLM 从文本中抽取人物、地点、事件等实体及它们之间的关系。
  3. 构建知识图谱:节点是实体,边是关系。
  4. 社区检测与聚类:用 Leiden 等算法将图谱分成若干社区。
  5. 生成社区摘要:用 LLM 总结社区关键信息。
  6. 存储到图数据库:方便后续高效检索。

3.2 查询阶段(Querying)

  1. 解析用户问题:分解查询、识别涉及的实体。
  2. 全局检索:从社区摘要中获取整体背景。
  3. 局部检索:深入邻居节点和相关关系,获取细节。
  4. 生成答案:将检索结果交给 LLM,生成自然语言回答。

4. 示例对比

在这里插入图片描述

假设问题是:

“Query:19世纪的艺术运动是如何影响20世纪现代艺术的发展的?”

  • 传统 LLM 直接回答

    “19 世纪的艺术运动通过鼓励对色彩、形式和主题的实验,影响了 20 世纪的现代艺术……”

    笼统,没有细节链路!

  • 普通 RAG 回答(检索文本片段):

    检索:1. 像克劳德·莫奈这样的印象派艺术家引入了新技术,彻底改变了对光和颜色的描绘。2. 印象派的技法影响了后来的 …
    回答:莫奈引入新技术,改变了光和色彩的描绘;印象派影响了后来的艺术运动;毕加索开创立体主义……

    回答依旧可能割裂!

  • GraphRAG 回答(基于知识图谱):

    检索:(莫奈)- [引进] →(新技术)- [革新] →(光和颜色的描绘)…
    回答:“莫奈引入的新技术彻底改变了光和色彩的描绘,他的印象派技巧影响了后来的艺术运动,包括 20 世纪初出现的毕加索立体主义。这种影响帮助塑造了毕加索对碎片化视角的创新方法。”

    优势:

    • 有因果链条(莫奈 → 新技术 → 印象派 → 立体主义)
    • 信息更连贯

5. 实战:如何跑 GraphRAG

官方代码地址:https://github.com/microsoft/graphrag

Step 1. 克隆代码

git clone https://github.com/microsoft/graphrag.git
cd graphrag

Step 2. 安装依赖、初始化 & 配置

pip install poetry
poetry install
poetry run poe index --init--root .
  • 正确运行后,此处会在 graphrag 目录下生成 output、prompts、.env、settings.yaml 文件
  • 之后需要对 .env 文件配置 GRAPHRAG_API_KEY、修改 settings.yaml 设置 model

Step 3. 准备数据,放到 ./input 目录下

  • 准备一个包含多篇文档的文本数据集(比如企业内部报告)
  • 格式可以是 .txt / .csv / .json

Step 4. 构建索引 (文本越长越久)

python -m graphrag.index --init

之后会看到类似如下的一些生成信息:

create_base_text_units
...create base_extracted_entities
...create_summarized_entities
...create_base_entity_graph
...create_final_entity 
...create_final_communities
...
...
...All workflows completed successfully.
  • 正确运行后,会在 ./cache 文件夹下面生成4个文件夹,方便后续进行提问
    在这里插入图片描述

Step 5. 运行查询

python -m graphrag.query--root ./cases --method global "你的问题"  ## global 模式
  • local 答案生成(代价高):针对具体问题,GraphRAG通过结合元素和元素摘要生成初步答案,这些答案来源于GraphRAG中的特定社区;
  • global 答案生成 (代价非常高):对于需要涵盖整个数据集的全局性问题,GraphRAG采用Map-Reduce机制,将所有社区的初步答案组合起来。

6. 适用场景

GraphRAG 特别适合:

  • 跨文档问答:多个文档中信息关联的问题。
  • 多跳推理:需要从多个实体关系链推理出答案。
  • 知识管理:企业内部知识库、科研资料等。
  • 长文本总结:社区层级摘要可以提炼核心脉络。

7. 总结

GraphRAG 让 RAG 不再是“找最像的文本”,而是“基于关系图谱推理回答”。
它的关键价值在于:

  • 结构化信息 → 让知识更可检索、可推理。
  • 分层摘要 → 快速获得全局视野与细节。
  • 更适合复杂、跨域的问题。

如果你平时做的问答任务经常遇到:

  • 回答内容碎片化、不连贯
  • 模型找不到跨文档的关键信息

那 GraphRAG 值得你尝试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94768.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统集成项目管理工程师【第十一章 规划过程组】规划成本管理、成本估算、制定预算和规划质量管理篇

系统集成项目管理工程师【第十一章 规划过程组】规划成本管理、成本估算、制定预算和规划质量管理篇 一、规划成本管理:为成本管控定方向 规划成本管理是项目成本管理的起点,其核心是明确“如何管”的规则,为整个项目的成本管理提供统一框架。…

Xiphos Q8 SDR DOCK子板 AD9361 宽带收发器的 SDR 模块。

Q8 混合处理器卡的子板,包含基于 ADI 公司流行的 AD9361 宽带收发器的 SDR 模块。与基于 AD9361 的 SDR 模块接口PPS、CAN总线、串行、UART(LVDS)、USB接口电源接口(5V、12V) Q8 处理器卡的子板,集成了基于…

DPU(数据处理单元)架构中,SoC(系统级芯片)与FPGA(现场可编程门阵列)之间的数据交互

在DPU(数据处理单元)架构中,SoC(系统级芯片)与FPGA(现场可编程门阵列)之间的数据交互是实现高效异构计算的关键。根据通信目标和硬件特性,其交互数据类型可分为以下四类:…

图论(邻接表)DFS

竞赛中心 - 蓝桥云课 #include<bits/stdc.h> using namespace std; #define int long long const int A1e51; typedef pair<int,int>p; map<p,int>st; vector<p>edge[A]; int a[A]; int result0; bool dfs(int s,int u,int father,int v,int sum) {i…

深入理解VideoToolbox:iOS/macOS视频硬编解码实战指南

引言&#xff1a;VideoToolbox框架概述 VideoToolbox是Apple提供的底层框架&#xff0c;首次在WWDC2014上推出&#xff0c;为iOS和macOS开发者提供直接访问硬件编码器和解码器的能力。作为Core Media框架的重要组成部分&#xff0c;VideoToolbox专注于视频压缩、解压缩以及Cor…

Python基础语法练习

本文涵盖了 Python 基础编程中的多个重要概念&#xff0c;从简单的输出语句到运算符、字符串操作、变量赋值等都有涉及。这些例子非常适合初学者学习和理解 Python 的基本语法。1. Hello World# 输出Hello Worldprint("Hello, World!")2. 变量赋值# 创建变量并赋值na…

关于“致命错误:‘https://github.com/....git/‘ 鉴权失败”

问题分析 错误信息&#xff1a; remote: Invalid username or token. Password authentication is not supported for Git operations. 致命错误&#xff1a;https://github.com/yarajia/LittleTestToolsProject.git/ 鉴权失败原因&#xff1a;GitHub从2021年8月13日起不再支持…

基于Flask + Vue3 的新闻数据分析平台源代码+数据库+使用说明,爬取今日头条新闻数据,采集与清洗、数据分析、建立数据模型、数据可视化

介绍 本项目为新闻数据分析平台&#xff0c;目的是爬取新闻(目前仅含爬取今日头条)数据&#xff0c;然后对数据进行展示、采集与清洗、数据分析、建立数据模型、数据可视化。本项目采用前后端分离模式&#xff0c;前端使用 Vue3 ArcoDesign 搭建&#xff0c;后端使用 Python …

LabVIEW数字抽取滤波

​基于 LabVIEW 平台设计数字抽取滤波器&#xff0c;用于动态测试领域&#xff0c;解决高采样率数据的大动态范围需求与频带划分问题。方案替换硬件为可靠性优异的品牌&#xff0c;通过虚拟仪器架构实现信号处理功能&#xff0c;为动态信号分析提供高效、可复用的设计参考。应用…

云原生时代的 Linux:容器、虚拟化与分布式的基石

&#x1f4dd;个人主页&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 在云计算与容器化快速发展的今天&#xff0c;Linux 已经不再只是服务器上的操作系统&#xff0c;而是整个云原生生态的底层基石。无论是运…

多场景两阶段分布式鲁棒优化模型、数据驱动的综合能源系统

基于数据驱动的综合能源系统多场景两阶段分布式鲁棒优化模型 鲁棒优化是应对数据不确定性的一种优化方法&#xff0c;但单阶段鲁棒优化过于保守。为了解决这一问题&#xff0c;引入了两阶段鲁棒优化(Two-stage Robust Optimization)以及更一般的多阶段鲁棒优化&#xff0c;其核…

Python实现点云PCA配准——粗配准

本节我们来介绍PCA&#xff08;主成分分析&#xff09;算法进行点云配准&#xff0c;这是一种经典的统计降维与特征提取工具&#xff0c;在三维点云处理中常被用来完成“粗配准”。其核心思想是&#xff1a;先把两个待对齐的点云各自进行主成分分解&#xff0c;获得各自的“主轴…

零基础深度学习规划路线:从数学公式到AI大模型的系统进阶指南

引言在人工智能革命席卷全球的2025年&#xff0c;深度学习已成为改变行业格局的核心技术。本规划路线整合最新教育资源与实践方法&#xff0c;为完全零基础的学习者构建一条从数学基础到AI大模型的系统学习路径。通过清华大佬的实战课程、吴恩达的经典理论、Kaggle竞赛的实战锤…

基于Vue.js和Golang构建高效在线客服系统:前端实现与后端交互详解

在当今互联网时代&#xff0c;在线客服系统已成为企业与用户沟通的重要桥梁。本文将详细介绍如何使用Vue.js作为前端框架&#xff0c;Gin作为后端框架&#xff0c;构建一个高效的在线客服系统。一、项目背景与技术选型项目背景随着电子商务的迅猛发展&#xff0c;用户对即时咨询…

虚幻GAS底层原理解剖九 (内存管理)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、整体内存管理思路概览二、核心对象的生命周期与托管逻辑UGameplayAbility 的管理GameplayEffect 的内存管理ActiveGameplayEffect 生命周期三、属性&#xf…

Rust 通用库新增 WebAssembly

1 先判断&#xff1a;也许你的 crate 已经能跑 Wasm&#xff01;排查阻碍因素 直接文件/网络 I/O块式&#xff08;同步&#xff09;I/Ostd::thread 线程创建并不受支持的 C 系统库绑定快速验证rustup target add wasm32-unknown-unknown cargo build --target wasm32-unknown-…

java分布式定时任务

一、分布式锁的底层实现细节&#xff08;以 Redis 为例&#xff09;分布式锁是解决任务重复执行的核心&#xff0c;需保证原子性、超时释放和可重入性。以下是生产级 Redis 锁实现&#xff1a;public class RedisDistributedLock {private final RedisTemplate<String, Stri…

Kafka 的基本操作(1)

Kafka 是一个分布式流处理平台&#xff0c;核心功能是高吞吐量的消息发布与订阅。以下是 Kafka 最常用的基本操作&#xff0c;涵盖环境启动、主题管理、消息生产与消费等核心场景&#xff08;基于 Kafka 2.x 版本&#xff0c;使用命令行工具&#xff09;。 一、环境准备与启动 …

React 为什么要自定义 Hooks?

历史相关文章2024年&#xff1a; React 为什么引入 Hooks &#xff1f; React 中&#xff0c;Hook 是一个特定的概念 自定义 Hook&#xff08;Custom Hook&#xff09;在 React 中相当于&#xff1a; ✅ 一个可以复用的逻辑片段&#xff0c;封装了多个内置 Hooks 的组合和行为 …

[激光原理与应用-181]:测量仪器 - 频谱型 - 干涉仪,OCT(光学相干断层扫描技术)

OCT&#xff08;光学相干断层扫描技术&#xff09;的核心工作原理基于低相干光干涉&#xff0c;通过测量生物组织或材料内部不同深度结构的背向散射光信号差异&#xff0c;构建高分辨率的二维或三维图像。以下是其工作原理的详细解析&#xff1a;一、基础原理&#xff1a;低相干…