真实面经题目 · 原创解析
GraphRAG 底层是如何去构建出实体以及实体之间的关系的?
GraphRAG 构建实体和关系,本质上是把非结构化文档经过切分、抽取、消歧、归一、证据绑定和图谱建模,转成可查询的知识图。它不是简单把文本丢给大模型,而是通过分块、实体识别、关系抽取、共指消解、置信度校验、图存储、社区摘要和检索融合,形成既能做语义召回又能做结构化推理的检索增强系统。
真实面经题目 · 原创解析
GraphRAG 构建实体和关系,本质上是把非结构化文档经过切分、抽取、消歧、归一、证据绑定和图谱建模,转成可查询的知识图。它不是简单把文本丢给大模型,而是通过分块、实体识别、关系抽取、共指消解、置信度校验、图存储、社区摘要和检索融合,形成既能做语义召回又能做结构化推理的检索增强系统。
GraphRAG 底层通常先把原始文档按语义边界切成 chunks,并为每个 chunk 保留来源、位置和向量表示。然后用规则、NER 模型或大模型从文本中抽取实体,比如人物、组织、产品、概念、事件等,再抽取实体之间的关系,比如隶属于、导致、合作、包含、发生于。抽取后还要做共指消解和实体归一,把同一对象的不同表达合并,并把同名不同义的实体区分开。每条边一般会绑定证据片段、置信度、时间和来源,低置信结果会被过滤或进入人工校验。最终实体作为节点、关系作为边存入图数据库或图索引,再基于社区发现生成多层摘要。查询时系统会结合向量检索和图遍历,先召回相关文本与实体,再扩展邻居子图和社区摘要,最后把结构化证据交给大模型生成答案。
GraphRAG 的第一步不是直接抽取图,而是先对文档做清洗、去重、格式解析和分块。分块通常要兼顾长度限制与语义完整性,比如按标题、段落、章节、时间线或话题边界切分,并保留 chunk id、文档 id、段落位置、标题路径等元数据。这样后续抽出的实体和关系才能追溯到具体证据,查询时也能把图结构和原文片段重新关联起来。
实体抽取负责从每个文本块中识别可作为图节点的对象。实现方式可以是传统 NER、领域词典、规则模板,也可以是大模型按 schema 输出结构化 JSON。实际系统通常会定义实体类型,例如人物、机构、地点、技术概念、产品、指标、事件、时间等,并要求模型同时给出实体名称、类型、描述和证据句。高质量抽取的关键是约束输出格式、减少泛化概念误入节点,并保留原文依据。
关系抽取是在已识别实体之间判断是否存在有意义的边。关系可以是开放式短语,也可以限定在预定义关系集合中,例如属于、依赖、导致、对比、包含、影响、发生于、使用等。GraphRAG 更看重关系是否能支持后续检索和推理,因此通常会要求每条关系包含主语实体、宾语实体、关系类型、关系描述、证据片段和置信度。没有证据的边即使语义上看似合理,也不应轻易写入图。
抽取结果通常会存在大量别名、缩写、代词和上下文指代,例如同一对象可能被写成全称、简称、英文名或代词。系统需要做共指消解,把同一文本上下文中的指代合并;还要做实体归一,把跨文档的同义实体聚合到同一个 canonical node。这里会结合字符串相似度、别名表、向量相似度、实体类型、上下文描述和外部知识库,避免把同名不同义的实体错误合并。
GraphRAG 中每个节点和边最好都不是孤立结论,而是带有证据链的数据结构。抽取模型会给出置信度,系统再结合规则校验、重复出现次数、来源可信度、关系一致性和反向验证来评分。遇到冲突信息时,可以保留多条带时间和来源的候选关系,而不是强行覆盖。这样回答问题时能够引用更可靠的子图,也能在知识更新后判断哪些事实已经过期或被新证据替代。
归一后的实体会作为节点,实体关系会作为边写入图数据库或图索引结构,同时保存节点描述、实体类型、别名、embedding、来源 chunk 列表和统计特征。边上会保存关系类型、方向、权重、证据、时间戳和置信度。为了支持检索,系统通常还会建立向量索引、关键词索引和图邻接索引,使查询既能按语义相似度召回,也能按实体连接关系进行扩展。
GraphRAG 的一个重要特点是会在图上做社区发现,把高度相关的实体和关系聚成主题社区。然后系统会为每个社区生成摘要,描述该社区的核心实体、主要关系、关键事件和高层结论。社区摘要解决了图过大时上下文放不进模型的问题,使系统可以先从高层主题定位,再逐步下钻到实体、关系和原文证据。全局性问题尤其依赖这种社区级摘要能力。
用户提问进入系统后,通常会先做 query understanding,识别问题中的实体、意图和关系约束。随后系统结合向量检索召回相关 chunks,并在知识图谱里定位种子实体,再根据关系类型、跳数、边权重和社区归属扩展出候选子图。最终送入大模型的不是整张图,而是与问题最相关的实体、边、社区摘要和证据文本。这样可以减少噪声,提高答案的可解释性和一致性。
GraphRAG 并不是替代向量检索,而是补足单纯向量检索缺少结构化关系的问题。向量检索适合找到语义相似文本,但容易漏掉跨段落、跨文档、多跳关系;图检索适合沿实体关系做扩展,但对模糊问题和同义表达不够敏感。成熟方案会同时使用 chunk embedding、entity embedding、community summary embedding 和图遍历结果,再通过 rerank 或打分融合选择最终上下文。
图谱构建完成后还需要评估,而不是默认抽取结果都正确。常见指标包括实体抽取准确率、关系准确率、归一化错误率、证据覆盖率、重复节点比例、边的噪声率、问答命中率和人工评审通过率。增量更新时,系统要识别新增文档影响了哪些实体、关系和社区摘要,只重算受影响部分,避免全量重建成本过高,同时保留版本信息方便回滚和审计。
普通 RAG 主要围绕文本块做向量召回,回答时依赖相似片段。GraphRAG 会先把文档转成实体和关系图,再利用图结构做多跳扩展、社区摘要和全局检索,因此更适合跨文档关联、复杂关系推理和整体性问题。
因为真实文本中同一对象会以全称、简称、代词、别名等方式反复出现。如果不做共指消解,系统会把同一实体拆成多个节点,导致关系分散、召回不完整,最终让答案缺少关键上下文或出现重复矛盾信息。
常用方法是限定关系类型,要求每条关系绑定原文证据,设置置信度阈值,并用规则或第二个模型做校验。还可以通过多文档重复验证、反向提问验证和人工抽检降低噪声,避免把模型推断当成事实写入图。
图检索依赖实体命中,如果用户问题表达模糊、没有明确实体名,单纯图遍历很难找到入口。向量检索可以先找到语义相关文本或实体描述,再把这些结果作为种子节点扩展子图,所以两者结合通常比单独使用任一种更稳。
社区摘要主要解决大规模图无法全部塞进上下文的问题。系统把相关实体聚成社区,再生成主题级摘要,查询时先定位相关社区,再下钻到实体和证据。这样既能回答全局问题,也能控制上下文长度和噪声。
增量更新通常会先解析新增或变更文档,抽取受影响的实体和关系,再进行归一、冲突检测和局部社区重算。理想情况下不需要全量重建,而是只更新相关节点、边、摘要和索引,并保留版本记录方便追溯。