Skip to main content
Open In Colab在 GitHub 上打开

NebulaGraph

NebulaGraph 是一个开源的、分布式的、可扩展的、快如闪电的 为具有毫秒级延迟的超大规模图形构建的图形数据库。它使用nGQLGraph Query language 的 Graph 查询语言。

nGQL 是一种声明性图形查询语言,用于NebulaGraph.它允许富有表现力和高效的图形模式。nGQL专为开发人员和运营专业人员设计。nGQL是一种类似 SQL 的查询语言。

此笔记本演示如何使用 LLM 为NebulaGraph数据库。

建立

您可以启动NebulaGraphcluster 作为 Docker 容器运行:

curl -fsSL nebula-up.siwei.io/install.sh | bash

其他选项包括:

集群运行后,我们可以创建SPACESCHEMA对于数据库。

%pip install --upgrade --quiet  ipython-ngql
%load_ext ngql

# connect ngql jupyter extension to nebulagraph
%ngql --address 127.0.0.1 --port 9669 --user root --password nebula
# create a new space
%ngql CREATE SPACE IF NOT EXISTS langchain(partition_num=1, replica_factor=1, vid_type=fixed_string(128));
# Wait for a few seconds for the space to be created.
%ngql USE langchain;

创建架构,有关完整数据集,请参阅此处

%%ngql
CREATE TAG IF NOT EXISTS movie(name string);
CREATE TAG IF NOT EXISTS person(name string, birthdate string);
CREATE EDGE IF NOT EXISTS acted_in();
CREATE TAG INDEX IF NOT EXISTS person_index ON person(name(128));
CREATE TAG INDEX IF NOT EXISTS movie_index ON movie(name(128));

等待 schema 创建完成,然后我们可以插入一些数据。

%%ngql
INSERT VERTEX person(name, birthdate) VALUES "Al Pacino":("Al Pacino", "1940-04-25");
INSERT VERTEX movie(name) VALUES "The Godfather II":("The Godfather II");
INSERT VERTEX movie(name) VALUES "The Godfather Coda: The Death of Michael Corleone":("The Godfather Coda: The Death of Michael Corleone");
INSERT EDGE acted_in() VALUES "Al Pacino"->"The Godfather II":();
INSERT EDGE acted_in() VALUES "Al Pacino"->"The Godfather Coda: The Death of Michael Corleone":();
from langchain.chains import NebulaGraphQAChain
from langchain_community.graphs import NebulaGraph
from langchain_openai import ChatOpenAI
graph = NebulaGraph(
space="langchain",
username="root",
password="nebula",
address="127.0.0.1",
port=9669,
session_pool_size=30,
)

刷新图形架构信息

如果数据库的 Schema 发生变化,您可以刷新生成 nGQL 语句所需的 Schema 信息。

# graph.refresh_schema()
print(graph.get_schema)
Node properties: [{'tag': 'movie', 'properties': [('name', 'string')]}, {'tag': 'person', 'properties': [('name', 'string'), ('birthdate', 'string')]}]
Edge properties: [{'edge': 'acted_in', 'properties': []}]
Relationships: ['(:person)-[:acted_in]->(:movie)']

查询图表

我们现在可以使用图形密码 QA 链来询问图形问题

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


> Entering new NebulaGraphQAChain chain...
Generated nGQL:
MATCH (p:`person`)-[:acted_in]->(m:`movie`) WHERE m.`movie`.`name` == 'The Godfather II'
RETURN p.`person`.`name`
Full Context:
{'p.person.name': ['Al Pacino']}

> Finished chain.
'Al Pacino played in The Godfather II.'