为什么需要知识图谱+RAG

传统的向量RAG虽然能检索语义相似的文本段落,但难以理解实体之间的复杂关系。例如,"张三任职于A公司,A公司被B公司收购"这类多跳关系查询,纯向量检索的效果往往不理想。

知识图谱(Knowledge Graph)通过结构化存储实体及其关系,恰好弥补了这一短板。将知识图谱与RAG结合,可以实现更精准、更具推理能力的问答系统。

图数据库选型

主流的图数据库选择包括:

  • Neo4j:市场占有率最高,Cypher查询语言成熟,社区和生态最完善
  • ArangoDB:多模型数据库,同时支持图、文档和KV存储
  • JanusGraph:适合超大规模图数据,支持分布式部署
  • NebulaGraph:国产分布式图数据库,性能优异

对于大多数企业级应用,Neo4j是最稳妥的选择,Cypher语言的表达能力非常适合复杂关系查询。

实体关系抽取

构建知识图谱的第一步是从非结构化文本中抽取实体和关系。

基于LLM的抽取

利用LLM的指令跟随能力进行信息抽取:

请从以下文本中抽取所有实体及其关系。
实体类型包括:人物、公司、产品、技术。
关系类型包括:任职于、收购、开发、合作。

输出格式为JSON数组:[{head, relation, tail}]

抽取优化技巧

  • 使用Few-shot示例引导输出格式
  • 对同一文档进行多次抽取后去重合并
  • 使用命名实体识别模型进行预标注

Graph RAG架构

Graph RAG的实现流程通常包含以下步骤:

  1. 文档解析:将非结构化文档解析为结构化文本块
  2. 实体抽取:提取文档中的实体和关系
  3. 图存储:将三元组存入图数据库
  4. 查询理解:将自然语言问题转化为图查询语句
  5. 子图检索:执行图查询获取相关子图
  6. 结果融合:将子图信息作为上下文提供给LLM

查询转化策略

将用户问题转化为Cypher查询是实现Graph RAG的核心难点。常见方法包括:

  • 模板匹配:基于预定义的问题模板进行匹配
  • LLM生成:让LLM将自然语言转换为Cypher
  • 混合策略:先使用NLP解析意图,再动态生成查询

GraphRAG与Vector RAG的对比

维度 Graph RAG Vector RAG
关系理解
多跳推理
语义相似度
构建复杂度
维护成本

最佳实践是将两者结合,使用向量检索召回相关文档段落,同时从知识图谱中获取结构化关系信息,共同作为LLM的上下文输入。这种混合架构在复杂企业知识管理场景中效果显著。