Kuzu
Kùzu 是一个可嵌入的属性图数据库管理系统,旨在实现查询速度和可扩展性。
Kùzu 具有宽松的 (MIT) 开源许可证,并实现了 Cypher,这是一种声明式图查询语言,允许在属性图中进行富有表现力和高效的数据查询。 它使用列式存储,其查询处理器包含新颖的连接算法,使其能够在不牺牲查询性能的情况下扩展到非常大的图。
本笔记本展示了如何使用大型语言模型 (LLMs) 为 Kùzu 数据库提供基于 Cypher 的自然语言接口。
设置
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)")
<kuzu.query_result.QueryResult at 0x103a72290>
然后我们可以插入一些数据。
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(
"CREATE (:Movie {name: 'The Godfather Coda: The Death of Michael Corleone'})"
)
conn.execute(
"MATCH (p:Person), (m:Movie) WHERE p.name = 'Al Pacino' AND m.name = 'The Godfather' CREATE (p)-[:ActedIn]->(m)"
)
conn.execute(
"MATCH (p:Person), (m:Movie) WHERE p.name = 'Al Pacino' AND m.name = 'The Godfather: Part II' CREATE (p)-[:ActedIn]->(m)"
)
conn.execute(
"MATCH (p:Person), (m:Movie) WHERE p.name = 'Al Pacino' AND m.name = 'The Godfather Coda: The Death of Michael Corleone' CREATE (p)-[:ActedIn]->(m)"
)
conn.execute(
"MATCH (p:Person), (m:Movie) WHERE p.name = 'Robert De Niro' AND m.name = 'The Godfather: Part II' CREATE (p)-[:ActedIn]->(m)"
)
<kuzu.query_result.QueryResult at 0x103a9e750>
创建 KuzuQAChain
我们现在可以创建 KuzuGraph
和 KuzuQAChain
。要创建 KuzuGraph
,我们只需将数据库对象传递给 KuzuGraph
构造函数。
<!--IMPORTS:[{"imported": "KuzuQAChain", "source": "langchain.chains", "docs": "https://python.langchain.com/api_reference/community/chains/langchain_community.chains.graph_qa.kuzu.KuzuQAChain.html", "title": "Kuzu"}, {"imported": "KuzuGraph", "source": "langchain_community.graphs", "docs": "https://python.langchain.com/api_reference/community/graphs/langchain_community.graphs.kuzu_graph.KuzuGraph.html", "title": "Kuzu"}, {"imported": "ChatOpenAI", "source": "langchain_openai", "docs": "https://python.langchain.com/api_reference/openai/chat_models/langchain_openai.chat_models.base.ChatOpenAI.html", "title": "Kuzu"}]-->
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,
)