查询
GraphRAG 有两种不同的查询工作流程,针对不同类型的查询进行了优化:
-
全局搜索:通过利用 Community 摘要,对涉及整个数据语料库的整体性问题进行推理。
-
本地搜索:通过扩展到特定 Entity 的邻居和相关概念,对特定 Entity 进行推理。
这个全局搜索工作流程包括以下几个阶段:
(图片来源:https://microsoft.github.io/graphrag/)
-
用户查询和对话历史:系统将用户查询和对话历史作为初始输入。
-
Community 报告分批:系统使用由 LLM 从 Community 层次结构的指定级别生成的节点 Community 报告作为上下文数据。这些 Community 报告被打乱并分成多个批次(打乱的 Community 报告批次 1、批次 2... 批次 N)。
-
RIR(评级中间响应):每批 Community 报告进一步被划分为预定义大小的文本块。每个文本块用于生成一个中间响应。响应包含一个信息片段列表,称为点。每个点都有一个数值分数,表示其重要性。这些生成的中间响应是评级中间响应(评级中间响应 1、响应 2... 响应 N)。
-
排名和过滤:系统对这些中间响应进行排名和过滤,选择最重要的点。选定的重要点形成聚合的中间响应。
-
最终响应:聚合的中间响应被用作上下文以生成最终回复。
当用户提出关于特定 Entity(如人名、地点、组织等)的问题时,我们建议使用本地搜索工作流程。这个过程包括以下步骤:
(图片来源:https://microsoft.github.io/graphrag/)
-
用户查询:首先,系统接收用户查询,这可能是一个简单的问题或更复杂的查询。
-
搜索相似 Entity:系统从知识图中识别出与用户输入语义相关的一组 Entity。这些 Entity 作为进入知识图谱的入口点。这一步骤中使用像 Milvus 这样的向量数据库进行文本相似性搜索。
-
Entity-文本单元映射:提取的文本单元被映射到相应的 Entity,移除原始的文本信息。
-
Entity-关系提取:这一步提取关于 Entity 及其相应关系的特定信息。
-
Entity-协变量(Covariate)映射:这一步将 Entity 映射到它们的协变量,这可能包括统计数据或其他相关属性。
-
Entity- Community 报告映射:Community 报告被整合到搜索结果中,纳入一些全局信息。
-
利用对话历史:如果有对话历史,系统使用对话历史来更好地理解用户的意图和上下文。
-
生成响应:最后,系统根据前几步生成的经过过滤和排序的数据生成并响应用户查询。