利用自然语言与NebulaGraph交互:创建一个智能图形查询接口

123 阅读3分钟
# 利用自然语言与NebulaGraph交互:创建一个智能图形查询接口

## 引言

在大数据时代,如何高效地处理复杂关系数据是每个技术从业者必须面对的挑战。NebulaGraph是一款开源的分布式图数据库,专为处理超大规模图形数据而设计,其延迟可达毫秒级别。本文旨在通过使用大型语言模型(LLM)为NebulaGraph数据库提供自然语言接口,从而简化图数据库的查询过程。

## 主要内容

### NebulaGraph简介

NebulaGraph是一个高性能的图数据库,它使用nGQL作为查询语言。nGQL是一种声明性的图查询语言,设计上类似于SQL,方便开发者和运维人员使用。

### 环境设置

要开始使用NebulaGraph,可以通过以下脚本将其作为Docker容器启动:

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

或者,你可以选择其他安装方式,如Docker Desktop扩展或NebulaGraph云服务。

创建空间和模式

在数据库集群运行之后,我们需要创建空间和模式。以下是创建过程的命令:

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

# 连接ngql jupyter扩展到NebulaGraph
%ngql --address 127.0.0.1 --port 9669 --user root --password nebula
# 创建一个新的空间
%ngql CREATE SPACE IF NOT EXISTS langchain(partition_num=1, replica_factor=1, vid_type=fixed_string(128));

# 等待空间创建完成
%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));

插入数据

在模式创建完成后,我们可以开始插入数据:

%%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":();

使用自然语言查询

通过NebulaGraphQAChain进行自然语言查询:

from langchain.chains import NebulaGraphQAChain
from langchain_community.graphs import NebulaGraph
from langchain_openai import ChatOpenAI

# 使用API代理服务提高访问稳定性
graph = NebulaGraph(
    space="langchain",
    username="root",
    password="nebula",
    address="127.0.0.1",
    port=9669,
    session_pool_size=30,
)

# 查询图谱
chain = NebulaGraphQAChain.from_llm(
    ChatOpenAI(temperature=0), graph=graph, verbose=True
)

result = chain.run("Who played in The Godfather II?")
print(result)  # 输出: 'Al Pacino played in The Godfather II.'

常见问题和解决方案

  1. 连接问题:如果无法连接数据库,确保Docker容器正常运行,并检查IP和端口设置。
  2. 数据插入失败:确认使用的nGQL语句正确无误,并且空间和模式已成功创建。

总结和进一步学习资源

通过使用LLM与NebulaGraph结合,我们能够以自然语言与图数据库进行交互,极大地简化了复杂的查询操作。欲了解更多关于NebulaGraph和nGQL的知识,可以访问以下资源:

参考资料

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

---END---