开发者中心 » 编程语言 » Python » 教程 » 使用 LangChain 和 Python 构建应用程序

使用 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,它使用:

  1. 连接到 Neo4j
  2. 一个 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)

总结

在本教程中,你学习了如何结合 LangChainOpenAINeo4j,并通过 GraphRAG 构建一个生成式 AI 应用程序。LangChain 通过 text2cypher(文本转 Cypher)方法,让你能够轻松构建链路并从 Neo4j 中检索上下文。

对于需要复杂数据关系遍历,以及需要基于你的数据构建交互式助手的应用场景,这种架构非常强大。

资源

分享文章