为什么需要知识图谱+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的实现流程通常包含以下步骤:
- 文档解析:将非结构化文档解析为结构化文本块
- 实体抽取:提取文档中的实体和关系
- 图存储:将三元组存入图数据库
- 查询理解:将自然语言问题转化为图查询语句
- 子图检索:执行图查询获取相关子图
- 结果融合:将子图信息作为上下文提供给LLM
查询转化策略
将用户问题转化为Cypher查询是实现Graph RAG的核心难点。常见方法包括:
- 模板匹配:基于预定义的问题模板进行匹配
- LLM生成:让LLM将自然语言转换为Cypher
- 混合策略:先使用NLP解析意图,再动态生成查询
GraphRAG与Vector RAG的对比
| 维度 | Graph RAG | Vector RAG |
|---|---|---|
| 关系理解 | 强 | 弱 |
| 多跳推理 | 强 | 弱 |
| 语义相似度 | 弱 | 强 |
| 构建复杂度 | 高 | 低 |
| 维护成本 | 高 | 低 |
最佳实践是将两者结合,使用向量检索召回相关文档段落,同时从知识图谱中获取结构化关系信息,共同作为LLM的上下文输入。这种混合架构在复杂企业知识管理场景中效果显著。
