GraphRAG 简介
关于GraphRAG
GraphRAG 是使用知识图谱的检索增强生成(RAG)。
你是否曾在探索检索增强生成(RAG)系统的世界中偶然遇到GraphRAG这个术语?如果是这样,你并不孤单。这个术语正在引起轰动,但其含义可能难以捉摸。有时,它是一种特定的检索方法;其他时候,它是一个完整的软件套件,比如微软的GraphRAG“数据管道和转换套件”。由于用途如此多样,难怪即使是RAG讨论的最忠实追随者也会感到有些迷茫。
那么,GraphRAG到底是什么?
对我们来说,这是一组利用图结构进行检索的RAG模式。每种模式都需要一个独特的数据结构或图模式才能有效运作。
在本网站上,我们将深入探讨GraphRAG模式的细节,分解每个模式的属性和策略。
如果您正在寻找RAG的介绍,请查看什么是检索增强生成(RAG)?。
我们展示的每个模式都直接链接到其GraphRAG 模式目录条目。 该目录是一个开源项目,旨在及时了解最新的模式演变。
注意:我们刚刚开始收集模式,肯定还缺少很多。请帮助我们建立一个全面的GraphRAG模式目录,并加入GraphRAG Discord频道的讨论。
为了让你更清楚地了解,本文解释的模式包括:
基本GraphRAG模式
高级GraphRAG模式
知识图谱模型
主题分类
根据高等人所述,有三种RAG范式:朴素RAG、高级RAG和模块化RAG:
在高级RAG范式中,预检索和后检索阶段被添加到简单的RAG范式中。 模块化的RAG系统包含更复杂的模式,这些模式需要对用户查询进行编排和路由。
高级RAG系统的阶段:
- 预检索 — 查询重写、查询实体提取、查询扩展等。
- 检索相关上下文
- 检索后处理:重新排序、剪枝等。
- 答案生成
在这里,我们想专注于检索阶段,并编制一个最常引用的GraphRAG检索模式及其所需图模式的目录。 请注意,这里的模式并不是一个详尽的列表。
如何实现GraphRAG
如果你想使用neo4j-graphrag package、LangChain、LlamaIndex来实现这里讨论的检索器,请查看它们的GraphRAG检索器集成。
这里我们关注有趣的部分:使用retrieval_query
来实现我们讨论的GraphRAG模式。每个模式的细节将包括相应的查询。
请记住,在构建查询时,有一个不可见的“第一部分”执行搜索操作以找到进入图的入口点(可以是向量、全文、空间、混合或过滤器)。 搜索部分返回找到的节点及其相似度分数,然后您可以在检索查询中使用这些节点和分数来执行进一步的遍历。
以下是一个可能看起来像这样的示例(示例来自LangChain Neo4j Vector文档):
retrieval_query = """RETURN "Name: " + node.name AS text, score, {source:node.url} AS metadata"""retrieval_example = Neo4jVector.from_existing_index( OpenAIEmbeddings(), url=url, username=username, password=password, index_name="person_index", retrieval_query=retrieval_query,)retrieval_example.similarity_search("Jon Snow", k=1)
在上述示例中,使用用户输入 "Jon Snow"
在现有索引 person_index
上执行向量相似性搜索,并返回最佳匹配节点 (k=1)
的 name
、score
和一些 metadata
。