RAG 接入知识图谱:全局数据关系表示与实战指南
在构建检索增强生成(RAG)系统时,传统方法往往面临上下文碎片化的问题。将知识图谱(Knowledge Graph, KG)引入 RAG 架构,能够利用图结构的全局数据关系表示能力,显著提升复杂查询的准确性。
1. 核心优势:全局数据关系表示
传统 RAG 通常基于向量相似度检索 Top-K 个文本块。当文本块过多超出大模型上下文限制,或关键信息分散在不相邻的文本块中时,回答质量会大幅下降。
知识图谱的优势在于其结构化特性:
- 全局视野:LLM 可以看到整个图谱的背景关系,而非孤立的片段。
- 精确关联:通过图遍历和 Cypher 查询,能精准定位实体间的关系。
- 减少幻觉:基于事实图谱的数据比纯文本检索更具可信度。
示例场景
用户提问:'有多少位于 Germany 的供应商?'
- 传统 RAG:可能检索到包含 "Germany" 和 "Supplier" 的文档片段,但难以统计总数。
- RAG + KG:LLM 理解图谱背景,执行 Cypher 查询,直接返回准确计数结果。
2. 基础概念:向量与相似度检索
要理解 RAG 与 KG 的结合,首先需要明确向量的基本概念。
2.1 什么是向量?
在机器学习中,现实世界的对象和概念通常被表示为一组连续数字,称为向量嵌入(Vector Embeddings)。这种方法将物体之间的相似性转换为向量空间中的距离。
- 语义相似性:由向量在空间中的接近程度表示。
- 常用模型:Word2Vec、GloVe、USE 用于文本;VGG 等 CNN 模型用于图像。
2.2 向量距离与相似度
通过计算对象向量之间的距离来判断相似性。常用的距离度量包括:
- 欧几里得距离 (Euclidean)
- 曼哈顿距离 (Manhattan)
- 余弦相似度 (Cosine)
- 切比雪夫距离 (Chebyshev)
选择合适的距离指标取决于具体任务需求。在 LangChain 与 Neo4j 集成中,通常使用余弦相似度来衡量文本嵌入的接近程度。
3. 环境准备与索引创建
本部分演示如何将 Neo4j 图数据库中的数据索引到 RAG 应用中,并实现指定范围的节点检索。
3.1 为什么指定索引节点?
图数据库可能包含大量数据,全量索引不仅消耗资源,还可能涉及数据安全问题。例如,财务部的数据不应被销售部随意查询。因此,支持按节点标签(Node Label)筛选索引至关重要。
3.2 实操步骤
激活环境
确保已安装必要的依赖库(如 langchain, neo4j, openai 等),并激活 Conda 环境:
conda activate medkg
启动 Jupyter Notebook
jupyter notebook
配置环境变量
打开 .env 文件,确保填写了正确的 API Key 和数据库连接信息:
NEO4J_URI: 数据库地址NEO4J_USERNAME: 用户名


