用Neo4j和LangChain搭建高效的对话历史与向量检索系统

160 阅读3分钟

用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应用可以通过以下地址访问:

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的强大功能,可以轻松实现对话流的管理和分析。建议进一步学习以下资源:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---