局部检索、社区摘要与更新成本
实体局部问题需要精确关系与原文,语料整体主题需要跨文档聚合。Microsoft GraphRAG的local search结合实体关系与文本,global search面向社区报告做聚合;这与“图数据库+向量检索”的泛称Graph RAG不是同一固定实现。查询模式文档还说明DRIFT与basic search的不同入口。
社区检测把连接较密的节点分组,摘要将社区关系压成报告;全局查询再从报告汇总。社区不是业务部门的必然映射,摘要也不是原文事实。一个错误关系可能进入社区报告,再影响许多全局答案,因此血缘要从文档一路连到报告。
python
reports = {
'r1': {'sources':{'d1','d2'}, 'text':'供应链主题'},
'r2': {'sources':{'d3'}, 'text':'研发主题'},
'r3': {'sources':{'d2','d4'}, 'text':'风险主题'},
}
def invalidated(changed):
return {rid for rid,report in reports.items() if report['sources'] & changed}
assert invalidated({'d2'}) == {'r1','r3'}
assert invalidated({'missing'}) == set()
print(sorted(invalidated({'d2'})))这只是已有血缘上的失效计算。若文档变化导致图边和社区划分改变,影响可能超出旧报告source集合,要重新计算相关分区甚至全图;不能宣称只重写r1/r3总能正确。
混合查询的路由与评估
问“合同编号X的金额”优先词法/结构化检索,问“A与B怎样关联”沿图路径,问“主要主题是什么”考虑社区报告。路由不确定时同时取证后比较,但限制费用与轮次。向量与图结果都必须绑定原文,最终上下文去重并保留互补证据。
评估分层:实体链接准确、关系类型与方向、路径证据完整、局部事实回答、全局主题覆盖。全局报告覆盖多个来源不表示每个主张受支持;人工抽查主张到原文的链条。比较基线vector RAG与图增强,固定相同语料、问题与模型,再计入抽取和摘要的离线费用。
存量图系统维护先检查ID、关系名、时间语义和删除策略。更换抽取schema会影响查询模板、索引和历史报告;双写新图并对固定路径查询回归,再切活动版本。删文档时同时撤销边、向量和派生摘要的访问,缓存也按图版本隔离。
练习
报告r4依赖r1而不直接依赖d2。构造两层失效传播,证明只扫描直接source会漏掉r4。
完成后查看本章答案。
下一篇:继续本章完整实验。