温馨提示
本分享为系列知识分享,预期分为四节:
- GraphRAG是什么GraphRAG图谱构建详细步骤GraphRAG检索查询详细步骤微软GraphRAG 代码实战
本分享为第三小节 GraphRAG检索查询详细步骤, 大家读完感兴趣可订阅专栏,掌握GraphRAG的技术核心与实战指南~。
前言
上篇文章我们花费了大量篇幅分享GraphRAG是如何将文本构建为知识图谱的。GraphRAG构建好知识图谱后,下一步就是要依托构建好的知识图谱来检索相关信息并生成回答。接下来我们就一起来看看GraphRAG检索回答的详细步骤~
一、详细步骤
GraphRAG查询阶段的核心任务是基于构建好的知识图谱检索信息并生成回答。具体来说查询阶段会利用之前知识图谱构建阶段的所有实体、关系和社区报告等信息,结合用户的查询请求,自动选择相关上下文,通过大语言模型(如DeepSeek、Qwen等)生成智能化的回答,详细流程如下:
用户输入查询(User Query): 用户通过输入一个自然语言查询,表达他们需要的信息。
创建查询上下文(BuildQueryContext): GraphRAG会根据查询的内容,从知识图谱中提取相关的信息并构建查询上下文。这个上下文包括了与查询相关的:
- 文本单元(TextUnits): 即与查询相关的文档片段或文本段。实体(Entities): 与查询相关的实体,如“维克托·迈尔-舍恩伯格”、“数据分析”等。关系(Relationships): 涉及到查询中的实体之间的关系,如“维克托·迈尔-舍恩伯格”与“《大数据时代》”之间的作者关系。
上下文构建的过程中,GraphRAG会根据预设的参数(如文本单元占比、实体数量等)来选择最相关的文本片段、实体、关系等,以便提供一个完整的上下文。
文本嵌入(Text Embedding):
- 对于文本,GraphRAG会按照预设的规则进行切分形成文本单元使用预训练的文本嵌入模型(Embedding模型)(对Embedding模型不了解的可看我的文章一文带你了解RAG核心原理),将每个文本单元转化为一个向量表示,便于计算相似度。对于实体和关系,也会计算其嵌入(Embedding),通常基于实体的描述、关系的文本等。
构建查询上下文(LocalContext): GraphRAG将结合以下因素构建查询上下文:
- 查询相关的文本单元(即与查询最相关的文本片段);查询相关的实体(从实体表中选取相关的实体);查询相关的关系(从关系表中选取与查询相关的关系);社区报告(有时也会包含相关的社区报告信息,帮助理解文本和实体的聚合关系)这些信息会被组合在一起,形成一个“上下文窗口”,为后续的查询提供支持。在不同的查询中,GraphRAG会根据用户提示词具体的需求调整上下文的构建方式,例如调整文本单元和社区报告的比例,或者增加对历史对话的考虑。
检索并选择相关信息(RetrieveRelevantInformation): 通过构建好的查询上下文,GraphRAG会检索并从中选择最相关的文本单元、实体和关系。这个过程的目的是通过“局部搜索”算法找到与用户查询最相关的信息,并确定哪些是能够提供解答的关键内容。
大语言模型生成答案(AnswerGenerationbyLLM): 结合检索到的上下文信息,GraphRAG使用一个大型语言模型(如GPT、DeepSeek、Qwen3)来生成最终的回答。模型会根据检索到的上下文生成自然语言的回应,并根据查询的需要决定回答的格式和内容,例如:
- 简单回答:如“维克托·迈尔-舍恩伯格是《大数据时代》的作者之一。详细报告:如“一、本书讨论了数据科学的应用,二、维克托·迈尔-舍恩伯格作为作者之一提出了….
生成的答案可以根据查询的复杂度有所不同,通常会包含多段文字、按优先级排序的答案等。
返回查询结果(ReturnResults): GraphRAG将生成的答案返回给用户。如果设置了“返回候选上下文”(return_candidate context=True )还会返回所有相关候选的实体、关系和文本单元,供用户参考。
以上是GraphRAG 查询检索的详细步骤。只讲概念大家难以在脑海中建立直观的认识,大家可以先阅读了解这部分的基本流程,然后再结合下一节的案例展示加深对流程的理解。
二、案例展示
下面我们同样通过GraphRAG图谱构建详细步骤中的案例向大家详细描述GraphRAG查询阶段的基本流程,输入GraphRAG的文本如下:
《大数据时代》是一本由维克托·迈尔-舍恩伯格与肯尼斯·库克耶合著的书籍,讨论了如何在海量数据中挖掘出有价值的信息。这本书深入探讨了数据科学的应用,并阐述了数据分析和预测在各行各业中的影响力。在书中,作者举了许多实际例子,说明大数据如何改变我们的生活,甚至如何预测未来的趋势。
该文本首先经过GraphRAG的文本切分步骤得到文本块表如下:
id | human_readable_id | text | n_tokens | document_ids |
---|---|---|---|---|
t1 | text_unit_1 | 《大数据时代》是一本由维克托·迈尔-舍恩伯格与肯尼斯·库克耶合著的书籍,讨论了如何在海量数据中挖掘出有价值的信息。 | 50 | doc_1 |
t2 | text_unit_2 | 这本书深入探讨了数据科学的应用,并阐述了数据分析和预测在各行各业中的影响力。 | 50 | doc_1 |
t3 | text_unit_3 | 在书中,作者举了许多实际例子,说明大数据如何改变我们的生活,甚至如何预测未来的趋势。 | 50 | doc_1 |
同时还会经过实体识别、关系挖掘、社区报告构建步骤生成实体表、关系表、实体关系表、社区报告表等,这些表都将作用于接下来用户的查询检索。
假设用户输入查询:告诉我《大数据时代》的核心是什么?,GraphRAG会依据用户设置的查询模式(这是传统RAG中不涉及的概念)构建上下文,不同查询模式构建上下文并产生回答的过程如下:
3.1 本地模式:
- 查找用户实体: 本地模式会先查找问题中的实体,用户问题中的实体是:《大数据时代》,GraphRAG会去实体关系表中查找和大数据时代这个实体相关联的其它实体,例如“维克托·迈尔-舍恩伯格”和“数据科学”等。同时GraphRAG也会去实体关系表查找实体间的关系,比如“维克托”和“《大数据时代》”之间的作者关系也会被考虑。构建查询上下文: 选定相应的实体和关系后,还要通过实体表和实体关系表找到对应的文本块, 可见切分后的三个文本块都与实体之间有关联,所以都会被纳入查询上下文中。嵌入和相似度计算: 对选出的文本块、实体和关系进行嵌入转换,计算与查询的相似度,找到最相关的信息。生成答案: 大语言模型基于这些信息生成一个回答:“《大模型时代》的核心思想是数据的价值和它如何影响各个领域,特别是在未来趋势中的应用。”返回结果: 返回用户查询的结果。
3.2 全局模式:
查找社区报告: 全局模式先从社区报告出发。回看上一篇文章GraphRAG图谱构建详细步骤中我们针对以上文本生成两个社区报告:
核心社区报告(community 1):
- 社区lD: community_1level: 1(核心社区)title: 大数据时代的影响summary: 社区围绕《大数据时代》一书展开,书中探讨了数据科学、数据分析的应用,以及它们如何在各行各业产生深远影响。社区中的核心实体包括《大数据时代》,它在知识图谱中扮演着中心角色。full_content: 本书通过多个实际案例,分析了大数据的应用场景,重点讲解了如何通过数据预测未来趋势。书中的内容涉及各个领域的应用,尤其是数据科学和数据分析如何推动各行各业的变革。rank: 1(该社区在整个知识图谱中的中心位置)rank_explanation: 该社区的核心实体是《大数据时代》,它与所有其他实体都有紧密关系,且覆盖了多个领域,重要性极高。findings: 该社区显示了大数据与数据科学、数据分析之间的深刻联系,尤其是在未来趋势预测方面的广泛应用。full content json: 以JSON格式存储书中的详细分析内容period: 2025-06-21(报告生成时间)size: 4(涉及的实体数量)
外围社区报告(community 2):
- 社区ID: community_2level: 2(外围社区)title: 《大数据时代》背后的专家与理论summary: 本社区围绕《大数据时代》书籍的作者和相关学科展开,涉及人物维克托·迈尔-舍恩伯格、肯尼斯·库克耶,以及学科领域“数据科学”和“数据分析”这些实体与核心社区《大数据时代》有着紧密的关系,但它们本身在知识图谱中的地位较为外围。full content: 社区中包括了书籍的两位作者维克托·迈尔-舍恩伯格和肯尼斯·库克耶,他们在数据科学和数据分析领域有着深远影响。此外,数据科学和数据分析作为学科,也在本社区中占据重要位置。rank: 2(该社区在整个知识图谱中的外围位置)rank_explanation: 该社区的实体相对来说是《大数据时代》的支持性内容,它们不直接构成图谱的核心,但在提供背景和理论支持方面仍具有重要价值。findings:该社区揭示了《大数据时代》书籍的学术背景,讲解了作者和学科如何影响现代数据科学的发展。full content json: 以JSON格式存储该社区中的详细内容和分析。period: 2024-11-27(报告生成时间)size: 4(涉及的实体数量)
很显然问题和核心社区报告community_1特别相似(核心社区报告已经符合用户提问的主题,可见全局模式查找更精确一些),GraphRAG从核心社区报告community_1出发找到大数据时代和数据科学这两个实体,再从实体表、实体关系表去查找与这两个实体关联的实体和关系。
构建查询上下文: 选定大数据时代和数据科学两个实体后,通过实体表找到关联实体,通过实体关系表找到关联关系,同时还要找到相关实体的文本块。因为我们举例的文本比较简单,可见切分后的三个文本块都与问题有直接或间接关联,所以都会被纳入查询上下文中。
嵌入和相似度计算: 对选出的文本块、实体和关系进行嵌入转换,计算与查询的相似度,找到最相关的信息。
生成答案: 大语言模型基于这些信息生成一个回答:“《大模型时代》的核心思想是数据的价值,它将影响未来的各个领域。”
返回结果: 返回用户查询的结果。
3.3 传统RAG
如果是传统RAG,它的检索查询过程是怎样的呢?
我们都知道传统RAG查询不会构建知识图谱,只会进行文本块切分步骤。传统RAG会直接对切分后的文本块进行搜索,结果发现只有 文本块1 包含《大数据时代》这个名词,和用户的问题类似,所以大模型在构建上下文的过程中只会考虑到文本块1的信息,自然就不能全面的考虑文本内容了。
四、总结
GraphRAG的查询阶段依赖于索引阶段构建的知识图谱,利用大语言模型和嵌入技术,从大量的文本单元、实体和关系中构建出一个查询上下文,然后生成相关的答案。在查询过程中,GraphRAG不仅可以使用传统的信息检索方法(如相似度计算),还通过知识图谱加强了上下文关联性,搭配大语言模型提供智能化的回答,是目前性能强大的RAG系统。
我们GraphRAG的理论篇到本篇分享就结束啦,从下一篇开始我们将针对微软开源的GraphRAG项目上手实战,在项目中感受GraphRAG的独特魅力。大家读完感兴趣可关注笔者掘金账号和专栏,更可关注笔者的同名微信公众号:大模型真好玩, 免费获得笔者工作实践中的各种资料~