LLM 已从根本上改变了我们与数据交互、自动化推理以及构建智能系统的方式。然而,尽管其生成式能力令人印象深刻,LLM 天生并不理解关系、结构或长期的事实一致性。这一缺陷在我们尝试将 LLM 用于企业级知识系统、多跳推理或决策关键型应用时尤为明显。
这正是图数据库与 RAG 结合之处,二者共同为 AI 系统形成一种新的架构范式——将符号推理与神经生成相融合。
为什么传统数据存储无法支撑 AI 推理?
大多数现代应用仍依赖关系型数据库或文档型存储。这些系统在处理表格化或松散结构的数据时表现良好,但当“关系本身就是数据”时就会力不从心。想想反欺诈、推荐系统、企业知识库或科学研究等领域,理解实体如何相互连接比存储孤立事实更为重要。
关系型数据库通过外键与 JOIN 间接建模关系。随着数据增长,JOIN 变得复杂、缓慢且难以推理。NoSQL 解决了部分可扩展性问题,但仍难以刻画语义与关系。构建在这些存储之上的 AI 系统自然也会继承同样的局限。
图数据库:按世界本来面目建模!
图数据库旨在以人类直觉的方式建模世界——一个由相互连接的实体组成的网络。在图数据库中,数据采用属性图模型存储,由节点、关系和属性构成。
节点表示实体,如人、公司、文档、概念或事件。关系描述节点之间的连接,且总是具有方向性与语义。属性为节点与关系存储元数据,从而支持丰富的上下文建模。
图数据库的最大优势在于将“关系”作为一等公民。与在查询时计算 JOIN 不同,图数据库直接存储关系,使得遍历既快速又直观。这带来高效的多跳查询、深度上下文探索与灵活的模式演化——这些能力对 AI 推理系统至关重要。

核心理念
用图而非表来存储数据。
一个图由以下要素组成:
- 节点 -> 实体
- 关系 -> 实体之间的关系
- 属性 -> 作用于节点与关系的属性
这被称为 属性图模型。
Neo4j:事实上的图数据库标准
Neo4j 是使用最广泛的图数据库,专为图工作负载而生。不同于把图当作事后补充的多模型数据库,Neo4j 的存储引擎针对图遍历优化,采用一种称为 免索引邻接 的理念,即用直接指针连接相邻节点。
Neo4j 支持 ACID 事务、集群、水平扩展与企业级安全,适用于生产系统。其查询语言 Cypher 让开发者能够以声明式、可读的方式表达复杂的图模式。开发者不再以表与 JOIN 思维,而是以“模式与关系”思考。凭借这些能力,Neo4j 已成为跨金融、医疗、供应链、网络安全与 AI 驱动分析等行业的知识图谱基础。
Cypher 查询语言与图查询
Neo4j 使用 Cypher,这是一种专为图模式表达而设计的声明式查询语言,语法接近 ASCII-art 模式匹配。它关注“想要检索什么”,而非“如何检索”。这使得图查询直观而有表现力,尤其适用于涉及多跳、条件与聚合的复杂遍历。相较于 SQL,在推断连接、挖掘关系与获取深层嵌套上下文方面,Cypher 更加高效易用。这种表达力是依赖结构化知识进行推理的 AI 系统的关键使能器。
Retrieval Augmented Generation 及其局限
Retrieval Augmented Generation(RAG)通过将检索到的文档注入提示上下文来增强 LLM,使其更具事实依据。但这种方式本质上仍是非结构化的:检索片段往往彼此割裂、冗余,或缺乏关系上下文。
传统 RAG 在以下场景中表现乏力:
- 问题需要多跳推理
- 答案依赖实体间关系
- 需要可解释性
- 必须尽量降低幻觉风险
这正是 GraphRAG 脱颖而出的地方。
为什么选择 GraphRAG?

什么是 GraphRAG?
GraphRAG(Graph Based Retrieval Augmented Generation)是一种架构范式,使用 知识图谱作为 LLM 的主检索与推理层。它不是检索原始文本片段,而是检索 子图——由实体、关系及其邻域构成的结构化知识。
在 GraphRAG 中,LLM 不再仅依赖非结构化文本进行推理,而是基于显式事实与关系进行推理,从而显著提升准确性、可解释性与可信度。
GraphRAG 并不会完全取代向量搜索,而是与之互补。许多生产系统采用 混合图 + 向量 RAG,将语义相似度与结构化推理结合。

User Query
↓
Query Understanding (LLM)
↓
Graph Retrieval (Neo4j)
↓
Subgraph Construction
↓
Optional Vector Similarity
↓
Context Assembly
↓
LLM Generation
组件
- 数据摄取管道
- 文档 → 实体 + 关系
- 基于 LLM 的抽取
- 存入 Neo4j
- 图存储
- Neo4j 知识图谱
- 检索器
- 基于 Cypher
- 多跳遍历
- 推理层
- LLM 读取图上下文进行推理
GraphRAG 的内部工作机制
步骤 1: 知识抽取
从文本中提取结构化信息。
例如,从句子 “Neo4j is used by OpenAI for knowledge graphs” 中可抽取:(OpenAI)-[:USES]->(Neo4j)
(Neo4j)-[:TYPE]->(GraphDatabase)
步骤 2: 图存储
将抽取出的实体和关系以结构化形式存入图数据库。
步骤 3: 查询映射
将用户自然语言问题映射为实体和意图。
步骤 4: 子图检索
基于查询意图,在图数据库中检索相关的邻域子图(k 跳遍历)。
步骤 5: 基于事实的生成
LLM 基于检索出的显式事实子图进行推理和回答,而非凭空猜测。
为什么 LangChain 对 GraphRAG 至关重要
LangChain 充当编排层,将 LLM 与外部工具、记忆与数据库连接起来。它提供提示模板、链、智能体与图连接器等抽象,便于构建复杂的 AI 工作流。
与 Neo4j 集成后,LangChain 能让 LLM 动态生成 Cypher 查询、在知识图谱上执行,并对结果进行推理。这样,自然语言问题可以被转换为结构化的图遍历,无需用户手写 Cypher。
LangChain 实质上让 LLM 从“文本生成器”进化为图推理引擎。
GraphRAG 对企业级 AI 的意义
GraphRAG 并非学术噱头。它直面现实世界 AI 系统的三大难题:幻觉、缺乏可解释性,以及对复杂数据推理能力不足。企业愈发需要能自证其断言、可追踪推理路径、并在高风险环境中可靠运行的 AI 系统。
通过将 Neo4j 的结构智能、LangChain 的编排能力与 LLM 的生成能力相结合,GraphRAG 使 AI 不仅“能说会道”,更能“正确、透明、可信”。
使用 Neo4j 和 LangChain 的端到端 GraphRAG 实现
1. 架构概览(本示例实现内容)
此实现遵循 真正的 GraphRAG 流水线 ,而非仅向量检索 RAG:
- 文档摄取
- 使用 LLM 抽取实体与关系
- 在 Neo4j 中创建知识图谱
- 通过 Cypher 进行基于图的检索
- 使用 LLM 进行基于知识的答案生成
- LLM → Graph → LLM 的推理闭环
先决条件
安装依赖
bash
pip install neo4j langchain langchain-community langchain-openai tiktoken python-dotenv
Neo4j 设置
本地运行 Neo4j(推荐使用 Docker):
bash
docker run -p 7474:7474 -p 7687:7687
-e NEO4J_AUTH=neo4j/password
neo4j:5
Neo4j Browser: http://localhost:7474
环境变量
创建 .env 文件:
env
OPENAI_API_KEY=your_openai_key
NEO4J_URI=bolt://localhost:7687
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=password
步骤 1:初始化 Neo4j 图连接
“`python
import os
from dotenv import load_dotenv
from langchain_community.graphs import Neo4jGraph
load_dotenv()
graph = Neo4jGraph(
url=os.environ[“NEO4J_URI”],
username=os.environ[“NEO4J_USERNAME”],
password=os.environ[“NEO4J_PASSWORD”],
)
“`
步骤 2:定义 LLM
“`python
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model=”gpt-4o-mini”,
temperature=0
)
“`
步骤 3:知识抽取(Documents → Graph)
示例:
python
documents = [
"""
Neo4j is a graph database used by enterprises.
LangChain integrates Neo4j for GraphRAG applications.
GraphRAG improves multi-hop reasoning in LLMs.
"""
]
实体与关系抽取提示词:
“`python
from langchain.prompts import PromptTemplate
kg_prompt = PromptTemplate.from_template(“””
Extract entities and relationships from the text.
Text:
{text}
Return output strictly in this JSON format:
{{
“entities”: [
{{“name”: “…”, “type”: “…”}}
],
“relationships”: [
{{“source”: “…”, “relation”: “…”, “target”: “…”}}
]
}}
“””)
“`
运行抽取:
“`python
import json
def extract_knowledge(text):
response = llm.invoke(
kg_prompt.format(text=text)
)
return json.loads(response.content)
kg_data = extract_knowledge(documents[0])
“`
步骤 4:将知识写入 Neo4j
“`python
def store_kg(graph, kg):
for entity in kg[“entities”]:
graph.query(
“””
MERGE (e:Entity {name: $name})
SET e.type = $type
“””,
{“name”: entity[“name”], “type”: entity[“type”]}
)
for rel in kg["relationships"]:
graph.query(
"""
MATCH (a:Entity {name: $source})
MATCH (b:Entity {name: $target})
MERGE (a)-[r:RELATION {type: $relation}]->(b)
""",
{
"source": rel["source"],
"target": rel["target"],
"relation": rel["relation"]
}
)
store_kg(graph, kg_data)
现在你已经拥有一个持久化的知识图谱。
“`
步骤 5:基于图的检索(GraphRAG 核心)
基于 Cypher 的检索函数
python
def retrieve_subgraph(question):
cypher_query = f"""
MATCH (e:Entity)-[r]->(n)
WHERE e.name CONTAINS '{question}'
OR n.name CONTAINS '{question}'
RETURN e.name AS source, r.type AS relation, n.name AS target
LIMIT 20
"""
return graph.query(cypher_query)
步骤 6:从图构建上下文
python
def graph_context_to_text(results):
context = []
for row in results:
context.append(
f"{row['source']} --{row['relation']}--> {row['target']}"
)
return "n".join(context)
步骤 7:基于知识的答案生成
GraphRAG 回答提示词
“`python
answer_prompt = PromptTemplate.from_template(“””
You are a knowledge-grounded assistant.
Graph context:
{context}
Question:
{question}
Answer strictly using the graph context.
“””)
“`
完整 GraphRAG 流水线
“`python
def graphrag_answer(question):
graph_results = retrieve_subgraph(question)
context = graph_context_to_text(graph_results)
response = llm.invoke(
answer_prompt.format(
context=context,
question=question
)
)
return response.content
“`
步骤 8:运行系统
“`python
question = “How does LangChain relate to Neo4j?”
answer = graphrag_answer(question)
print(“Answer:”)
print(answer)
“`
为什么说这是真正的 GraphRAG?
这不是单纯的向量搜索。
该系统:
* 使用了显式实体
* 使用了关系遍历
* 检索子图
* 让 LLM 在结构化知识上作答
* 支持多跳推理
* 降低幻觉
如何演进到生产级
可扩展增强:
* 在节点上添加向量嵌入
* 采用混合图 + 向量检索
* 基于模式的 Cypher 生成
* 基于智能体的图遍历
* 支持时间与置信度感知的边
* 支持 Azure OpenAI 或本地 LLM
Documents
↓
Entity & Relation Extraction
↓
Neo4j Knowledge Graph
↓
Cypher Traversal
↓
Structured Context
↓
LLM Answer (Grounded)
AI 的未来既不属于单一的 LLM,也不属于孤立的符号系统,而是属于将神经语言理解与符号推理、结构化知识相融合的混合架构。
图数据库提供记忆。知识图谱提供语义。GraphRAG 提供推理。LLM 提供语言。
它们共同构成下一代企业级 AI 系统的基石。
关注“鲸栖”小程序,掌握最新AI资讯
本文来自网络搜集,不代表鲸林向海立场,如有侵权,联系删除。转载请注明出处:http://www.itsolotime.com/archives/15390
