微软GraphRAG 端到端使用及自用工具类

文章目录

    • 一. 环境准备
      • 1.安装 Python 环境
      • 2.安装依赖
      • 3.配置 LLM API Key
    • 二. 初始化项目
    • 三. 文档上传 & 索引构建
    • 四. 问答(CLI 方式)
      • 示例:
    • 五. 代码中调用 GraphRAG
      • 工具概览
      • 核心工具详解
      • 1. simple_graphrag_integration.py - 智能问答核心
      • 2. view_graph.py - 基础数据查看
      • 3. visualize_graph.py - 图谱可视化
      • 4. export_to_neo4j.py - Neo4j数据库导入
      • 5. export_to_csv_for_neo4j.py - CSV批量导出
      • 6. parquet_viewer.py - 文件查看转换
      • 7. view_communities.py - 社区分析
    • 六. Tips

之前我写过一篇端到端构建知识图谱的文章,有人在后台问我关于GraphRAG的相关使用,今天我来讲一下微软的GraphRAG的使用。以及我自己写的一些工具类,我把它们封装成了每个都可以单独使用的文件,有需要的可以直接拿来用 仓库链接。

一. 环境准备

1.安装 Python 环境

要求 Python 3.10+(推荐 3.11)。

# 建议创建虚拟环境
python3 -m venv graphrag_env
source graphrag_env/bin/activate  # Linux/Mac
graphrag_env\Scripts\activate     # Windows

2.安装依赖

GraphRAG 使用 poetry 管理依赖。

pip install poetry# 克隆官方仓库
git clone https://github.com/microsoft/graphrag.git
cd graphrag# 安装依赖
poetry install

3.配置 LLM API Key

GraphRAG 默认支持 Azure OpenAIOpenAI

新建 .env 文件(或在环境变量里设置):

OPENAI_API_KEY=your_openai_key
OPENAI_API_BASE=https://api.openai.com/v1
OPENAI_API_MODEL=gpt-4o-mini   # 或 gpt-4o, gpt-5 等
OPENAI_EMBEDDING_MODEL=text-embedding-3-small

如果用 Azure OpenAI,替换为:

AZURE_OPENAI_API_KEY=your_azure_key
AZURE_OPENAI_ENDPOINT=https://xxx.openai.azure.com/
AZURE_OPENAI_DEPLOYMENT=gpt-4o
AZURE_OPENAI_EMBEDDING_DEPLOYMENT=text-embedding-3-small

二. 初始化项目

在工作目录(例如 ~/my_graphrag)执行:

graphrag init --root ./my_graphrag

它会生成一个 settings.yaml 配置文件和数据目录结构:

my_graphrag/├── settings.yaml├── input/         # 放文档├── output/        # 索引和结果└── state/         # 中间状态

如果没有对应的目录结构手动创建 mkdir -p my_graphrag/input


三. 文档上传 & 索引构建

把你要问答的文档(txt/pdf/markdown 等)放到 input/ 目录。

例如:

input/└── demo.txt

然后执行索引构建:

  graphrag index --root ./my_graphrag

GraphRAG 会自动完成:

  • 文档切分(text units)
  • 实体 & 关系抽取
  • 构建知识图谱
  • 社区检测 & 摘要生成
  • 向量存储

最终结果会放在 output/ 目录。

在这里插入图片描述


四. 问答(CLI 方式)

GraphRAG 支持 local / global / drift 三种查询模式。

示例:

# 本地检索(local)
graphrag query --root ./my_graphrag --method local -q "请总结一下报告中公司的主要业务?"# 全局检索(global)
graphrag query --root ./my_graphrag --method global -q "公司和竞争对手的差异是什么?"# 漂移搜索(drift)
graphrag query --root ./my_graphrag --method drift -q "哪些部门与AI相关?"

结果会直接输出在终端


五. 代码中调用 GraphRAG

环境搭建好以后,就可以在我们的项目中根据需要来使用GraphRAG的能力,下边我罗列了一些工具类。

工具概览

工具名称主要功能适用场景
simple_graphrag_integration.py核心查询服务在应用中集成 GraphRAG 问答功能
view_graph.py基础数据查看快速了解知识图谱的基本统计信息
visualize_graph.py图谱可视化生成知识图谱的网络图像
view_communities.py社区分析查看和分析图谱中的社区结构
parquet_viewer.py文件查看器查看和转换 GraphRAG 输出文件
export_to_neo4j.pyNeo4j 集成将知识图谱导入到 Neo4j 数据库
export_to_csv_for_neo4j.pyCSV 导出生成 Neo4j 兼容的批量导入文件

核心工具详解

1. simple_graphrag_integration.py - 智能问答核心

主要类:

# 基础服务
service = SimpleGraphRAGService("./graphrag/my_graphrag")
result = service.query("什么是RAG?", method="auto")# 聊天机器人
chatbot = SimpleGraphRAGChatBot("./graphrag/my_graphrag")
response = chatbot.chat("介绍一下这个知识库")

查询方法:

  • local - 基于相关实体回答具体问题
  • global - 基于社区报告回答概括性问题
  • auto - 自动选择最适合的方法

核心功能:

  • 自然语言问答
  • 上下文智能构建
  • 对话历史管理
  • 多种查询策略

2. view_graph.py - 基础数据查看

def view_entities():df = pd.read_parquet("./graphragmy_graphrag/output/entities.parquet")print(f"总实体数: {len(df)}")print(df[['title', 'type', 'description']].head())def view_relationships():df = pd.read_parquet("./graphragmy_graphrag/output/relationships.parquet")print(f"总关系数: {len(df)}")print(df[['source', 'target', 'description']].head())

输出示例:

=== 实体信息 ===
总实体数: 68title    type                description
0                 RAG  CONCEPT  检索增强生成技术...
1                 LLM  CONCEPT  大语言模型...

3. visualize_graph.py - 图谱可视化

def create_network_graph():"""创建网络图可视化"""# 读取数据entities_df = pd.read_parquet("my_graphrag/output/entities.parquet")relationships_df = pd.read_parquet("my_graphrag/output/relationships.parquet")# 创建图G = nx.Graph()for _, entity in entities_df.iterrows():G.add_node(entity['title'])for _, rel in relationships_df.iterrows():G.add_edge(rel['source'], rel['target'])# 可视化plt.figure(figsize=(15, 10))pos = nx.spring_layout(G, k=3, iterations=50)nx.draw(G, pos, with_labels=True, node_color='lightblue')plt.savefig('knowledge_graph.png', dpi=300)

生成文件: knowledge_graph.png - 高分辨率知识图谱图像

4. export_to_neo4j.py - Neo4j数据库导入

class Neo4jExporter:def __init__(self, uri, user, password):self.driver = GraphDatabase.driver(uri, auth=(user, password))def create_entities(self, entities_df):"""创建实体节点"""with self.driver.session() as session:for _, entity in entities_df.iterrows():query = """CREATE (e:Entity {title: $title,type: $type,description: $description})"""session.run(query, **entity.to_dict())def create_relationships(self, relationships_df):"""创建关系"""with self.driver.session() as session:for _, rel in relationships_df.iterrows():query = """MATCH (a:Entity {title: $source})MATCH (b:Entity {title: $target})CREATE (a)-[r:RELATED_TO {description: $description}]->(b)"""session.run(query, **rel.to_dict())

常用Cypher查询:

-- 查找最重要的实体
MATCH (n:Entity)
RETURN n.title, COUNT { (n)--() } as connections
ORDER BY connections DESC LIMIT 10-- 查找两个实体间的最短路径
MATCH path = shortestPath((a:Entity {title: 'RAG'})-[*]-(b:Entity {title: 'LLM'}))
RETURN path

5. export_to_csv_for_neo4j.py - CSV批量导出

def export_for_neo4j_csv():"""导出Neo4j兼容的CSV文件"""# 读取数据entities_df = pd.read_parquet("my_graphrag/output/entities.parquet")relationships_df = pd.read_parquet("my_graphrag/output/relationships.parquet")# 准备节点CSVnodes_df = entities_df[['title', 'type', 'description']].copy()nodes_df.columns = ['title:ID', 'type', 'description']nodes_df[':LABEL'] = 'Entity'# 准备关系CSVrels_df = relationships_df[['source', 'target', 'description']].copy()rels_df.columns = [':START_ID', ':END_ID', 'description']rels_df[':TYPE'] = 'RELATED_TO'# 保存文件nodes_df.to_csv('neo4j_nodes.csv', index=False)rels_df.to_csv('neo4j_relationships.csv', index=False)

Neo4j导入命令:

neo4j-admin database import full \--nodes=neo4j_nodes.csv \--relationships=neo4j_relationships.csv \neo4j

6. parquet_viewer.py - 文件查看转换

def view_parquet_info(file_path):"""查看parquet文件信息"""df = pd.read_parquet(file_path)print(f"文件: {file_path}")print(f"行数: {len(df)}, 列数: {len(df.columns)}")print(f"列信息: {list(df.columns)}")print(df.head(3))def convert_to_csv(parquet_path):"""转换为CSV格式"""df = pd.read_parquet(parquet_path)csv_path = parquet_path.replace('.parquet', '.csv')df.to_csv(csv_path, index=False, encoding='utf-8')return csv_path

7. view_communities.py - 社区分析

def view_community_reports():"""查看社区报告"""df = pd.read_parquet("my_graphrag/output/community_reports.parquet")print(f"社区总数: {len(df)}")for i, row in df.iterrows():print(f"\n--- 社区 {i} ---")print(f"标题: {row.get('title', 'N/A')}")print(f"层级: {row.get('level', 'N/A')}")content = str(row.get('full_content', ''))[:200] + '...'print(f"内容摘要: {content}")

这套工具集提供了完整的GraphRAG数据处理和应用集成解决方案,从基础查看到高级分析,满足不同层次的使用需求。

六. Tips

  1. 选择方法

    • local → 适合精准事实类问答(小范围)
    • global → 适合总结、综合类问题(大范围)
    • drift → 资源有限时的折中选择
  2. Prompt 调整
    修改 settings.yaml 里的 prompts 部分,能优化答案风格。

  3. 文档更新
    如果增加/修改文档,只需再次运行:

    graphrag index --root ./my_graphrag
    

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

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

相关文章

sqlserver2008导入excel表数据遇到的问题

1.如果表格为.xlsx格式时可能会提示“没有为此链接管理提供列”,无法点击下一步的话,建议可以使用.csv格式 .csv格式可能也会存在此提示,但是可以不用管 2.导入.csv数据时,字段为int时,填null导入不进去的话可以给个0作…

Unity游戏打包——打包流程

本文由 NRatel 历史笔记整理而来,如有错误欢迎指正。一、基本流程二、组合步骤把上述每步做成独立的输入输出逻辑 y fuc(x)然后,控制/组合其过程,可灵活产生不同的流程:1、单渠道出测试包2、单渠道出正式包3、单渠道包热更三、构…

卷积神经网络(二):手写数字识别项目(一)

文章目录手写数字识别项目一、准备数据集二、定义模型三、模型训练3.1 导入依赖库3.2 设备设置(CPU/GPU 自动选择)3.3 超参数定义3.4数据集准备1.获取数据集2.划分训练集与验证集3.创建 DataLoader(按批次加载数据)3.5模型初始化与…

批量给文件夹添加文件v2【件批量复制工具】

代码功能介绍 这个代码的功能就是一个,给某个文件夹里面添加某个文件(含父级文件夹下的每一个子文件夹) 举个例子,父级文件夹是:“D:\Desktop\1,要添加的文件路径是:D:\1.txt” 则最后会把文件…

Qt实现2048小游戏:看看AI如何评估棋盘策略实现“人机合一

2048 是一款经典的数字益智游戏,其简单的规则背后蕴含着丰富的策略性。该项目不仅完整实现了 2048 的核心玩法,还包含了一个基于启发式评估和蒙特卡洛方法的智能 AI 玩家。 我们将从项目整体架构入手,逐一解析游戏核心逻辑、UI 渲染、事件处理、AI 策略等关键模块,并通过展…

封装红黑树实现mysetmymap

1. 源码分析 set实例化rb_tree时第二个模板参数给的是key&#xff0c;map实例化rb_tree时第⼆个模板参数给的是 pair<const key,T>&#xff0c;这样一颗红黑树既可以实现key搜索场景的set&#xff0c;也可以实现key/value搜索场 景的map源码里面模板参数是用T代表value&…

以OWTB为核心以客户为基础的三方仓运配一体化平台分析V0.2

一、系统概述以OWTB&#xff08;Order-Warehouse-Transportation-Billing&#xff0c;订单-仓储-运输-结算&#xff09;为核心的三方仓运配一体化平台&#xff0c;是专为第三方物流企业打造的深度定制化解决方案。该平台以第三方仓运配为主线&#xff0c;以多客户/多SKU/个性化…

技术框架之脚手架实现

一、 序言在日常的企业级Java开发中&#xff0c;我们经常会发现自己在重复地做着一些项目初始化工作&#xff1a;创建相似的项目结构、引入一堆固定的依赖包、编写通用的配置文件、拷贝那些几乎每个项目都有的基础工具类和日志配置。这些工作不仅枯燥乏味&#xff0c;而且容易出…

小迪安全v2023学习笔记(七十七讲)—— 业务设计篇隐私合规检测重定向漏洞资源拒绝服务

文章目录前记WEB攻防——第七十七天业务设计篇&隐私合规检测&URL重定向&资源拒绝服务&配合项目隐私合规 - 判断规则&检测项目介绍案例演示URL重定向 - 检测判断&钓鱼配合介绍黑盒测试看业务功能看参数名goole语法搜索白盒测试跳转URL绕过思路钓鱼配合资…

用AI做旅游攻略,真能比人肉整理靠谱?

大家好&#xff0c;我是极客团长&#xff01; 作为一个沉迷研究 “AI 工具怎么渗透日常生活” 的科技博主&#xff0c;我开了个 AI 解决生活小事系列。 前两期聊了用 AI 写新闻博客、扒商业报告&#xff0c;后台一堆人催更&#xff1a;能不能搞点接地气的&#xff1f;比如&am…

Axure RP 9 Mac 交互原型设计

原文地址&#xff1a;Axure RP 9 Mac 交互原型设计 安装教程 Axure RP 9是一款功能强大的原型设计和协作工具。 它不仅能够帮助用户快速创建出高质量的原型设计&#xff0c;还能促进团队成员之间的有效协作&#xff0c;从而极大地提高数字产品开发的效率和质量。 拥有直观易…

多线程——线程状态

目录 1.线程的状态 1.1 NEW 1.2 RUNNABLE 1.3 BLOCKED 1.4 WAITING 1.5 TIMED_WAITING 1.6 TERMINATED 2.线程状态的相互转换 在上期的学习中&#xff0c;已经理解线程的启动&#xff08;start()&#xff09;、休眠&#xff08;sleep()&#xff09;、中断&#xff08;i…

IMX6ULL的设备树文件简析

先分析一个完整的设备树&#xff0c;是怎么表达各种外设信息的。以imux6ull开发板为例进行说明。这个文件里就一个设备信息才这么点内容&#xff0c;是不是出问题了&#xff1f;当然不是&#xff0c;我们知道dts文件是可包含的&#xff0c;所以&#xff0c;最终形成的一个完整文…

【ARM】PACK包管理

1、 文档目标对 pack 包的管理有更多的了解。2、 问题场景客户在安装了过多的 pack 包导致软件打开比较慢&#xff0c;各种 pack 包颜色的区别&#xff0c;及图标不同。3、软硬件环境1&#xff09;、软件版本&#xff1a;Keil MDK 5.392&#xff09;、电脑环境&#xff1a;Wind…

【Kubernetes】知识点4

36. 说明K8s中Pod级别的Graceful Shutdown。答&#xff1a;Graceful Shutdown&#xff08;优雅关闭&#xff09;是指当 Pod 需要终止时&#xff0c;系统给予运行中的容器一定的时间来等待业务的应用的正常关闭&#xff08;如保存数据、关闭连接、释放资源等&#xff09;&#x…

Paraverse平行云实时云渲染助力第82届威尼斯电影节XR沉浸式体验

今年&#xff0c;Paraverse平行云实时云渲染平台LarkXR&#xff0c;为享有盛誉的第82届威尼斯国际电影节&#xff08;8月27日至9月6日&#xff09;带来沉浸式体验。 LarkXR助力我们的生态伙伴FRENCH TOUCH FACTORY&#xff0c;实现ITHACA容积视频的XR交互演示&#xff0c;从意大…

大数据开发计划表(实际版)

太好了&#xff01;我将为你生成一份可打印的PDF版学习计划表&#xff0c;并附上项目模板与架构图示例&#xff0c;帮助你更直观地执行计划。 由于当前环境无法直接生成和发送文件&#xff0c;我将以文本格式为你完整呈现&#xff0c;你可以轻松复制到Word或Markdown中&#xf…

GitLab 18.3 正式发布,更新多项 DevOps、CI/CD 功能【二】

沿袭我们的月度发布传统&#xff0c;极狐GitLab 发布了 18.3 版本&#xff0c;该版本带来了通过直接转移进行迁移、CI/CD 作业令牌的细粒度权限控制、自定义管理员角色、Kubernetes 1.33 支持、通过 API 让流水线执行策略访问 CI/CD 配置等几十个重点功能的改进。下面是对部分重…

Docker学习笔记(二):镜像与容器管理

Docker 镜像 最小的镜像 hello-world 是 Docker 官方提供的一个镜像&#xff0c;通常用来验证 Docker 是否安装成功。 先通过 docker pull 从 Docker Hub 下载它。 [rootdocker ~]# docker pull hello-world Using default tag: latest latest: Pulling from library/hello-wor…

STM32F103C8T6开发板入门学习——寄存器和库函数介绍

学习目标&#xff1a;STM32F103C8T6开发板入门学习——寄存器和库函数介绍学习内容&#xff1a; 1. 寄存器介绍 1.1 存储器映射 存储器本身无固有地址&#xff0c;是具有特定功能的内存单元。它的地址是由芯片厂商或用户分配&#xff0c;给存储器分配地址的过程就叫做存储区映射…