用Neo4j和LangChain搭建高效的对话历史与向量检索系统
引言
在现代应用中,结合语言模型(LLM)与向量检索系统,能够显著提升用户体验。通过将对话历史存储在Neo4j图形数据库中,我们不仅可以实现流畅的对话流,还能通过图形分析来更好地理解用户行为。本篇文章将介绍如何使用Neo4j作为向量存储,并结合LangChain实现对话历史的处理与分析。
主要内容
环境设置
在开始之前,需要确保配置以下环境变量:
OPENAI_API_KEY=<YOUR_OPENAI_API_KEY>
NEO4J_URI=<YOUR_NEO4J_URI>
NEO4J_USERNAME=<YOUR_NEO4J_USERNAME>
NEO4J_PASSWORD=<YOUR_NEO4J_PASSWORD>
数据填充
为了向Neo4j数据库中填充一些示例数据,可以运行以下脚本:
# 使用API代理服务提高访问稳定性
python ingest.py
该脚本会处理并存储 dune.txt 文件中的文本段落到Neo4j图形数据库中,同时创建一个名为 dune 的向量索引,以便高效查询这些嵌入。
使用说明
首先,需要安装LangChain CLI:
pip install -U langchain-cli
为创建一个新的LangChain项目并安装此包,可以运行:
langchain app new my-app --package neo4j-vector-memory
如果要将此包添加到现有项目,只需运行:
langchain app add neo4j-vector-memory
并在 server.py 文件中添加以下代码:
from neo4j_vector_memory import chain as neo4j_vector_memory_chain
add_routes(app, neo4j_vector_memory_chain, path="/neo4j-vector-memory")
(可选)配置LangSmith以帮助跟踪、监控和调试LangChain应用:
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=<your-api-key>
export LANGCHAIN_PROJECT=<your-project> # 如果没有指定,默认为 "default"
在该目录中,可以直接启动LangServe实例:
langchain serve
本地启动的FastAPI应用可以通过以下地址访问:
- 查看所有模板:http://127.0.0.1:8000/docs
- 访问授权工具:http://127.0.0.1:8000/neo4j-vector-memory/playground
- 通过代码访问模板:
from langserve.client import RemoteRunnable
runnable = RemoteRunnable("http://localhost:8000/neo4j-vector-memory")
代码示例
以下是一个完整的代码示例,展示了如何实现上述功能:
import os
from neo4j import GraphDatabase
from langchain import LangChain
# 环境变量设置
os.environ['OPENAI_API_KEY'] = '<YOUR_OPENAI_API_KEY>'
os.environ['NEO4J_URI'] = '<YOUR_NEO4J_URI>'
os.environ['NEO4J_USERNAME'] = '<YOUR_NEO4J_USERNAME>'
os.environ['NEO4J_PASSWORD'] = '<YOUR_NEO4J_PASSWORD>'
# 初始化Neo4j驱动
driver = GraphDatabase.driver(
os.environ['NEO4J_URI'],
auth=(os.environ['NEO4J_USERNAME'], os.environ['NEO4J_PASSWORD'])
)
# 创建LangChain实例
lang_chain = LangChain(driver)
# 示例对话
response = lang_chain.get_response("Tell me about the book Dune.")
print(response)
常见问题和解决方案
1. 连接Neo4j数据库失败
确认你设置的环境变量是否正确,并且你的Neo4j实例是否在运行。尝试重启Neo4j服务。
2. API访问失败
某些地区的网络限制可能会导致API访问不稳定。可以考虑使用API代理服务来提高访问的稳定性。
3. 数据填充失败
检查 ingest.py 脚本是否有语法错误,或者文件路径是否正确。
总结和进一步学习资源
通过将对话历史存储在Neo4j数据库中,我们可以实现更加智能和高效的对话系统。同时,结合LangChain的强大功能,可以轻松实现对话流的管理和分析。建议进一步学习以下资源:
参考资料
- Neo4j: neo4j.com/
- LangChain: github.com/langchain/l…
- FastAPI: fastapi.tiangolo.com/
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---