高級 RAG 實戰:Neo4j 與 LangChain 構建知識圖譜驅動的 AI 系統
學習如何結合 Neo4j 知識圖譜和 LangChain,打造精準、可解釋、適合生產環境的 Retrieval-Augmented Generation (RAG) 系統。

Retrieval-Augmented Generation (RAG) 已經迅速成為讓 Large Language Models (LLMs) 在生產環境中真正發揮作用的首選架構。RAG 不再僅僅依賴 LLM 的內部記憶,而是將其與外部知識源連接起來。
雖然大多數教程展示的是使用 Pinecone、Weaviate 或 FAISS 等向量數據庫的 RAG,但在現實世界的問題中,單靠語義相似度往往不夠。你需要關系、推理和可解釋性。這正是 Neo4j 驅動的知識圖譜大放異彩的地方。
在這篇文章中,我們將使用 LangChain 構建一個 Neo4j 驅動的 RAG 管道,內容包括:
? 為什么將知識圖譜與 RAG 結合
? 安裝和配置 Neo4j + LangChain
? 將數據導入 Neo4j(節點、關系、嵌入)
? 編寫 Cypher 查詢 + 混合檢索器
? 使用 LangChain 的 graph chain 連接 Neo4j 和 LLM
? 一個完整的實際示例
為什么在 RAG 中使用知識圖譜?
傳統的向量檢索會找到與查詢相似的文本片段。但在以下情況下它會失?。?/p>
? 答案需要多跳推理(例如:“哪些供應商間接影響產品 X?”)
? 關系是關鍵(藥物 → 靶點 → 蛋白質 → 疾?。?/p>
? 需要可解釋性(用戶想知道模型為什么這樣回答)
Neo4j 允許你以圖譜形式顯式存儲實體和關系,并使用 Cypher 進行查詢。通過 LangChain,你可以結合:
? 圖譜遍歷進行結構化查詢
? 嵌入進行語義相似性匹配
? LLM 進行推理和自然語言回答
這就形成了混合檢索管道:精準、可解釋、適合生產環境。
設置
首先安裝依賴:
pip install langchain langchain-community neo4j openai你還需要一個運行中的 Neo4j 數據庫(本地或 AuraDB Free)。
步驟 1:連接到 Neo4j
LangChain 提供內置的 Neo4j 圖譜集成:
from langchain_community.graphs import Neo4jGraph
graph = Neo4jGraph(
url="bolt://localhost:7687",
username="neo4j",
password="password"
)
# 檢查 schema
print(graph.schema)這讓 LangChain 能夠理解你的知識圖譜的實體和關系。
步驟 2:將數據導入 Neo4j
讓我們插入一個小型醫療知識圖譜:
CREATE (d1:Disease {name: "Diabetes"})
CREATE (d2:Disease {name: "Hypertension"})
CREATE (drug1:Drug {name: "Metformin"})
CREATE (drug2:Drug {name: "Insulin"})
CREATE (drug3:Drug {name: "Lisinopril"})
CREATE (drug1)-[:TREATS]->(d1)
CREATE (drug2)-[:TREATS]->(d1)
CREATE (drug3)-[:TREATS]->(d2)現在我們可以直接查詢類似 (:Drug)-[:TREATS]->(:Disease) 的關系。
步驟 3:使用 LangChain 的 Cypher Chain
LangChain 有一個 CypherChain,可以將自然語言問題轉化為 Cypher 查詢:
from langchain_openai import ChatOpenAI
from langchain.chains import GraphCypherQAChain
llm = ChatOpenAI(model="gpt-4.1")
cypher_chain = GraphCypherQAChain.from_llm(
llm=llm,
graph=graph,
verbose=True
)
response = cypher_chain.run("Which drugs treat Diabetes?")
print(response)LLM 會將自然語言問題翻譯成 Cypher 查詢,在 Neo4j 上執行,然后返回人類可讀的答案。
步驟 4:添加向量檢索(混合 RAG)
如果用戶問一些模糊的問題,比如“用來控制血糖的是什么?”單靠圖譜可能不夠。
這時候混合 RAG 就派上用場了:
? 使用嵌入 + 向量數據庫進行語義召回
? 使用 Neo4j 進行關系推理
在 LangChain 中,你可以組合檢索器:
from langchain.retrievers import EnsembleRetriever
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
# 示例 FAISS 檢索器
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_texts(
["Metformin is first-line treatment for type 2 diabetes.",
"Insulin regulates blood glucose levels.",
"Lisinopril is used for hypertension."],
embeddings
)
faiss_retriever = vectorstore.as_retriever()
# 組合 Neo4j + FAISS 檢索器
hybrid_retriever = EnsembleRetriever(
retrievers=[faiss_retriever, graph],
weights=[0.5, 0.5]
)現在你的管道同時利用了語義和結構。
步驟 5:完整的 Neo4j RAG 鏈
以下是如何將它組裝成完整的 LangChain RAG 流程:
from langchain.chains import RetrievalQA
rag_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=hybrid_retriever,
chain_type="stuff"
)
query = "What drugs are commonly prescribed for high blood sugar?"
answer = rag_chain.run(query)
print(answer)檢索器會從 Neo4j 和向量嵌入中拉取上下文,LLM 則生成自然語言答案。
高級擴展
? 圖譜 + LLM 代理:使用 LangChain Agents 結合工具(Neo4j 查詢工具 + 向量檢索工具)。
? Schema 感知提示:將 Neo4j 的 schema 提供給 LLM,讓它寫出更好的 Cypher 查詢。
? 路徑解釋:返回答案旁邊的實際圖譜路徑,以提高可解釋性。
? 圖譜嵌入:使用 Neo4j Graph Data Science 計算實體/路徑的嵌入。
使用場景
? 醫療 RAG:檢索有效的藥物-疾病關系,防止幻覺。
? 金融風險:建模機構之間的風險暴露,使用混合檢索查詢“間接風險”。
? 法律搜索:將案例法引用表示為圖譜,進行多跳先例推理。
? 企業知識:基于本體論的聊天機器人,用于內部文檔發現。
結論
僅依賴向量檢索會限制系統處理復雜推理和多跳查詢的能力。通過引入知識圖譜,你不僅能獲得更豐富的關聯,還能提升可解釋性和結構化推理能力。
使用 LangChain 的 Neo4jGraph 和 CypherQAChain,將 Neo4j 集成到 RAG 管道中變得無縫。此外,采用混合檢索策略——結合嵌入和基于圖譜的遍歷——能提供語義靈活性和關系準確性之間的最佳平衡。
在實踐中,LangChain 和 Neo4j 的結合使開發出既強大又可解釋、值得信賴的生產級 RAG 系統成為可能。
關注 GenAI Lab,獲取更多關于 AI 系統設計的實用教程——歡迎在下方評論你的想法或問題!
本文轉載自??????PyTorch研習社??????,作者:AI研究生

















