用途
Microsoft GraphRAG 是一个数据流水线与转换系统,用于从非结构化文本中提取有意义的结构化数据,构建知识图谱记忆结构,并通过基于图的检索增强 LLM 输出,支持在不对外暴露的情况下处理私有数据。其核心创新在于解决基线 RAG 的根本局限:跨分散信息片段“串联线索”,以及对大规模集合中概括性概念的整体理解。
主要能力
- 知识图谱抽取:从文本中抽取三类主要元素——实体(对象、人物、地点、概念)、关系(实体之间的连接)和声明(带证据来源的事实陈述)。
- 分层社区检测:使用 Leiden 算法将相关实体聚类为社区,创建分层组织结构,并在每一层生成摘要,支持自底向上的推理。
- TextUnits:将文档切分为可管理的块,基于 token 限制设定大小,并保留重叠以维持上下文,作为实体抽取的基础。
- 多种查询模式:
- 全局搜索:面向整体语料推理,适合“总结主要主题”,使用各层级社区摘要,采用自底向上聚合。
- 局部搜索:面向特定实体推理,适合“介绍实体 X”,使用图中实体邻域,从种子实体开始遍历。
- DRIFT 搜索:结合实体推理与社区上下文,适合“X 与更广泛主题的关系”,采用混合方法。
- 基础搜索:传统向量相似度匹配,作为基线 RAG 回退方案。
使用方式
安装:需要 Python 3.10 或更高版本。可通过 pip install graphrag 安装,或从源码安装:git clone https://github.com/microsoft/graphrag.git,进入目录后执行 pip install -e .。
环境配置:创建 .env 文件,配置 LLM(如 OpenAI 的 GRAPHRAG_LLM_API_KEY、GRAPHRAG_LLM_TYPE=openai_chat、GRAPHRAG_LLM_MODEL=gpt-4o)和嵌入模型(如 GRAPHRAG_EMBEDDING_TYPE=openai_embedding、GRAPHRAG_EMBEDDING_MODEL=text-embedding-3-small)。也支持 Azure OpenAI 和本地模型(如 Ollama)。
快速开始:
- 初始化项目:
graphrag init --root .,生成settings.yaml、.env和prompts/目录。 - 准备数据:创建
input目录并放入文档,支持.txt、.pdf、.docx、.md格式。 - 运行索引流水线:
graphrag index --root .,流程包括加载与切分文档、抽取实体/关系/声明、构建知识图谱、检测社区、生成社区摘要、创建嵌入并存储结果。 - 查询数据:例如全局搜索
graphrag query --root . --method global --query "What are the main themes in this dataset?";局部搜索使用--method local;DRIFT 搜索使用--method drift。
配置:settings.yaml 可配置 LLM、嵌入、分块(大小与重叠)、实体抽取(提示词、最大提取轮次、实体类型)、社区报告、声明抽取、图嵌入(node2vec 或 deepwalk)、存储类型(file、blob、cosmosdb)等。还支持并行化、缓存和输入配置。
提示词调优:可直接使用可能无法获得最佳结果,建议针对领域数据集自定义提示词。可运行 graphrag prompt-tune --root . --config settings.yaml --output prompts/ 自动生成领域适配提示词,也可手动编辑 prompts/entity_extraction.txt 等文件。
Python API:可加载配置、创建 LLM、以编程方式运行索引流水线,并使用 LocalSearch、GlobalSearch 等类进行查询,支持传入对话历史、top_k、temperature、max_tokens 等参数,并可访问响应、上下文数据和来源。
适用场景
- 构建需要跨分散信息“串联线索”的 RAG 系统
- 整体查询大型文档集合
- 从非结构化文本中抽取结构化知识图谱
- 为 LLM 应用实现基于图的检索
- 处理私有数据集并增强推理能力
- 处理叙事性、非结构化文档
- 构建面向文档语料的问答系统
- 从文本中抽取实体、关系和声明
- 创建分层知识摘要
- 实现文档上的多跳推理
- 比较 GraphRAG 与传统向量 RAG
- 为领域特定数据集调优提示词
- 配置知识抽取的索引流水线
限制
资料中未提供关于收费、价格、平台兼容性、效果指标或性能基准的具体信息。索引过程可能耗时并产生费用(资料中提示“this can take time and cost money!”),但未给出具体成本数据。