好的,这道题其实是在问,当传统[[RAG]]碰到复杂关联查询时怎么破。[[GraphRAG]]的本质,说白了就是用结构化语义网络替代扁平向量空间。传统RAG把文档[[切块]][[向量化]],丢掉了实体间的显式关系,比如“张三的上级是谁”,它只能找语义相似的片段,但GraphRAG通过LLM抽实体、关系、属性,构建[[知识图谱]],再发现社区,形成实体到关系到社区的三层索引。
具体架构我以微软的开源方案为例。索引阶段,先分块,然后LLM做[[实体链接]]和[[关系抽取]],生成社区摘要。查询阶段有个路由判断,Local Query从实体出发做多跳邻居遍历,比如问“张三的部门有哪些项目”,Global Query跨社区聚合摘要,比如“公司今年整体趋势”。
相比传统RAG,优势很明显。信息组织上,传统RAG是扁平向量,语义相近不等于逻辑关联;GraphRAG用显式图结构,保留了因果、从属关系。检索效率上,传统RAG靠相似度Top-K,容易漏掉关键桥梁信息,比如“张三和李四的共同上级”,需要多跳推理;GraphRAG的图遍历剪枝能精准定位。知识关联上,它天然支持路径溯源。举个例子,企业组织架构查询,问“张三和李四的部门交集是什么”,传统RAG可能从各自文档里找描述,但GraphRAG直接从图里走两步就出来了。还有医学症状-疾病-药物关联,也是它的强项。
但落地时挑战不小。首先是构建成本高,全量文档要多次LLM调用做抽取。我的做法是领域Schema预定义,比如金融风控场景,先定义实体类型和关系,再用小模型加大模型级联,小模型初筛,大模型精校。其次是实时更新难,新文档可能触发大量关系重计算。我会做事件驱动更新,只更新受影响子图,再混合向量和图索引,简单查询走向量,复杂查询走图。还有就是噪声与[[幻觉]],LLM抽取可能产生错误关系。我会上置信度阈值过滤,低于0.6的丢掉,再配合人工审核闭环。社区粒度也难控,太细碎片化,太粗信息损失。我用层次化社区,Leiden算法多级分辨率,查询时自适应选粒度。
这里有个点值得深挖,就是图谱构建的增量更新策略。我倾向用变更日志加版本控制,只处理新增或修改的文档,避免全量重建。但一致性校验很关键,我会用一组固定query回放,对比Recall和延迟,通过才切换。
所以我会把GraphRAG看成一把手术刀,不是万能锤。高频复杂查询场景,比如金融风控、医疗诊断,值得做专项图谱;简单问答还是走向量检索更轻量。真正落地常常是混合架构,向量和图共存,按需路由。