索引方法
GraphRAG是一个用于研究RAG索引方法的平台,这些方法能为语言模型生成最优的上下文窗口内容。我们有一个标准的索引Pipeline,使用语言模型提取我们的记忆模型所基于的图。我们可能会不时引入其他索引方法。本页记录了这些选项。
标准GraphRAG
这是在原始博客文章中描述的方法。标准方法使用语言模型执行所有推理任务:
- 实体提取:提示LLM提取命名实体并提供每个文本单元的描述。
- 关系提取:提示LLM描述每个文本单元中每对实体之间的关系。
- 实体摘要:提示LLM将跨文本单元找到的每个实体的所有描述合并为一个摘要。
- 关系摘要:提示LLM将跨文本单元找到的每个关系的所有描述合并为一个摘要。
- 声明提取(可选):提示LLM从每个文本单元中提取并描述声明。
- 社区报告生成:收集每个社区的实体和关系描述(以及可选的声明),并用于提示LLM生成摘要报告。
graphrag index --method standard
。这是默认方法,因此可以省略method参数。
FastGraphRAG
FastGraphRAG是一种用传统自然语言处理(NLP)方法替代部分语言模型推理的技术。这是我们开发的一种混合技术,作为更快、更便宜的索引替代方案:
- 实体提取:使用NLTK和spaCy等NLP库提取名词短语作为实体。没有描述;使用源文本单元作为描述。
- 关系提取:关系被定义为实体对在文本单元中的共现。没有描述。
- 实体摘要:不需要。
- 关系摘要:不需要。
- 声明提取(可选):未使用。
- 社区报告生成:收集包含每个实体名词短语的直接文本单元内容,并用于提示LLM生成摘要报告。
graphrag index --method fast
FastGraphRAG内置了几种NLP选项。默认情况下,我们使用NLTK+正则表达式进行名词短语提取,这种方法非常快但主要适用于英语。我们还内置了两种使用spaCy的方法:语义解析和CFG。我们默认使用en_core_web_md
模型作为spaCy模型,但请注意您可以引用任何已安装的支持模型。
⚠️ 关于SpaCy模型的注意事项:
本包需要SpaCy模型才能正常运行。如果所需的模型未安装,包将在首次使用时自动下载并安装。
您可以通过运行python -m spacy download <model_name>
手动安装,例如python -m spacy download en_core_web_md
。
选择方法
标准GraphRAG提供了对现实世界实体和关系的丰富描述,但比FastGraphRAG更昂贵。我们估计图提取约占索引成本的75%。因此,FastGraphRAG要便宜得多,但代价是提取的图在GraphRAG之外直接使用的相关性较低,而且图的噪声往往更大。如果高保真实体和图探索对您的用例很重要,我们建议坚持使用传统的GraphRAG。如果您的用例主要针对使用全局搜索的摘要问题,FastGraphRAG是一个合理且更便宜的替代方案。