使用 LangChain 和 Python 构建应用程序
本教程介绍了如何使用 LangChain 和 Neo4j 在 Python 中构建生成式 AI (GenAI) 应用程序,以实现基于图的检索增强生成 (GraphRAG)。

什么是 GenAI 和 RAG?
生成式 AI (GenAI) 指利用大语言模型 (LLM) 根据预先拥有的知识和提示词 (Prompt) 来生成内容——例如文本、代码、图像或对话。这些模型擅长推理、改写、总结和回答问题,但往往缺乏最新或特定领域的专业知识。
图检索增强生成 (GraphRAG) 通过将 LLM 与图数据库相结合来解决这一局限性。它从外部知识库(如数据库)中检索相关的文档或事实,并将其作为提示词中的额外上下文——从而使响应基于事实或特定领域的数据。
虽然许多教程侧重于使用本地文件或专用向量数据库构建简单的 RAG 流程,但本教程将使用原生图数据库 Neo4j,并搭配目前最流行的 Python 生成式 AI 应用构建框架之一:LangChain。
为什么要使用 LangChain?
LangChain 为构建 LLM 应用程序提供了强大的抽象层。它支持各种模型和工具,可以轻松接入图数据库、提示词模板以及执行 RAG、问答、总结等功能的链 (Chain)。
Neo4j 通过多种集成方式提供支持,包括 LangChain 的 Community GraphQAChain。
先决条件
- Python 3.9+
- OpenAI API 密钥(或兼容的 LLM 提供商)
- Neo4j 实例(本地或 AuraDB 免费版)
设置虚拟环境 (Unix/Mac)
python3 -m venv .venv
source .venv/bin/activateCode language: Bash (bash)
安装依赖项
pip install python-dotenv langchain langchain-openai langchain-neo4j tiktokenCode language: Bash (bash)
创建 .env 文件
OPENAI_API_KEY=sk-...
NEO4J_URI=neo4j+s://<your-uri>.databases.neo4j.io
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=your-password
NEO4J_DATABASE=neo4jCode language: JavaScript (javascript)
第 1 步:数据模型和 Neo4j 设置
假设你有一个来自 Goodreads 数据集的书籍评论数据集,并且已经加载到 Neo4j 图中
- (:Book)
- (:Review)
- (:Author)
- (:Review)-[:WRITTEN_FOR]->(:Book)
- (:Author)-[:AUTHORED]->(:Book)

以下是托管的只读 Aura(云管理)Neo4j 实例的凭据
NEO4J_URI=neo4j+s://demo.neo4jlabs.com
NEO4J_USERNAME=goodreads
NEO4J_PASSWORD=goodreads
NEO4J_DATABASE=goodreadsCode language: JavaScript (javascript)
第 2 步:将 LangChain 连接到 Neo4j
LangChain 允许你连接任何图数据库。我们将使用 langchain-neo4j 包来与 Neo4j 进行交互。
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain_neo4j import Neo4jGraph, GraphCypherQAChain
from dotenv import load_dotenv
import os
# Load .env file
load_dotenv()
# Create a connection to Neo4j
graph = Neo4jGraph(
url=os.environ["NEO4J_URI"],
username=os.environ["NEO4J_USERNAME"],
password=os.environ["NEO4J_PASSWORD"],
database=os.environ["NEO4J_DATABASE"],
)Code language: Python (python)
第 3 步:使用 LangChain 定义 GraphRAG 链
我们将定义一个 GraphCypherQAChain,它使用:
- 连接到 Neo4j
- 一个 LLM,用于根据用户查询和数据库模式生成 Cypher 语句。
另一个 LLM,用于根据原始查询和 Cypher 响应生成答案
# Use separate LLMs for Cypher and answer generation
cypher_llm = ChatOpenAI(openai_api_key=os.environ["OPENAI_API_KEY"], temperature=0)
qa_llm = ChatOpenAI(openai_api_key=os.environ["OPENAI_API_KEY"], temperature=0)
graph_chain = GraphCypherQAChain.from_llm(
graph=graph,
cypher_llm=cypher_llm,
qa_llm=qa_llm,
verbose=True,
validate_cypher=True,
allow_dangerous_requests=True,
)
question = “Books by Ronald J. Fields?”
result = graph_chain.invoke({"query": question})
# If wanting just the final answer
return result["result"] if isinstance(result, dict) and "result" in result else resultCode language: Python (python)
在终端中运行
python main.pyCode language: CSS (css)
控制台输出示例
Generated Cypher:
MATCH (a:Author {name: "Ronald J. Fields"})-[:AUTHORED]->(b:Book)
RETURN b.title
Full Context:
[{'b.title': 'W.C. Fields: A Life on Film'}]
> Finished chain.
Answer: W.C. Fields: A Life on FilmCode language: CSS (css)
总结
在本教程中,你学习了如何结合 LangChain、OpenAI 和 Neo4j,并通过 GraphRAG 构建一个生成式 AI 应用程序。LangChain 通过 text2cypher(文本转 Cypher)方法,让你能够轻松构建链路并从 Neo4j 中检索上下文。
对于需要复杂数据关系遍历,以及需要基于你的数据构建交互式助手的应用场景,这种架构非常强大。
资源
- 代码仓库:https://github.com/neo4j-examples/langchain-starter-kit
- Neo4j 向量文档:/docs/cypher-manual/current/indexes/semantic-indexes/vector-indexes/
- LangChain 文档:https://docs.langchain.org.cn
- LangChain Neo4j 集成:https://python.langchain.ac.cn/docs/integrations/vectorstores/neo4jvector
- Neo4j Aura:/cloud/aura/


