该笔记为对 NebulaGraph 技术社区的《基于 Gemini 和 NebulaGraph 构建知识图谱问答系统》以及同门笔记的学习与复现

LLM 在属性图中的应用

属性图与 LLM 的协作具体方式:

  • 数据增强
    • LLM 可用于生成属性图中点和边的文本描述,不仅可以丰富数据内容,还能帮助其他工具或用户更加容易地理解各项关系
    • LLM 可以基于图中已有的数据生成新的点和边,这对于进行异常检测或预测欺诈行为等任务非常有用
  • 查询与探索
    • LLM 可以用来创建查询属性图的自然语言接口,允许用户以比传统的图查询语言更为直观的方式(例如自然语言)对数据进行提问
    • LLM 也能够汇总图查询结果,并为这些发现生成解释
  • 推理和推断
    • LLM 可以用于执行属性图上的推理任务,这可能包括基于现有数据推断节点间新的关系,或识别图中存在的不一致

NebulaGraph

一个可靠的分布式、线性扩容、性能高效的图数据库,擅长处理千亿节点万亿条边的超大数据集

服务架构

NebulaGraph 由三种服务构成,是一种存储与计算分离的架构

  • Meta Service : 由 nebula-metad 进程提供,负责数据管理,包括:
    • 管理用户账号
    • 管理分片
    • 管理图空间
    • 管理 Schema 信息
    • 管理 TTL 信息
    • 管理作业
  • Graph Service : 由 nebula-graphd 进程提供,负责处理查询请求,包括:
    • 解析查询语句
    • 校验语句
    • 生成执行计划
    • 按照执行计划执行
  • Storage Service : 由 nebula-storaged 进程提供,负责存储数据

使用 Docker 构建 NebulaGraph 时,可以通过 nebula-console 连接到 NebulaGraph 服务

1
2
3
docker exec -it nebula-docker-compose-console-1 /bin/sh

/ # ./usr/local/bin/nebula-console -u root -p nebula --address=graphd --port=9669

数据模型

NebulaGraph 数据模型使用 6 种基本的数据模型:

  • 图空间(Space) : 隔离不同项目数据
  • 点(Vertex) : 保存实体对象
    • 点标识符(VID) : VID在同一图空间中唯一
    • 标签(TAG) : 由一组预定义的属性构成
      • 点必须有0到多个 Tag
  • 边(Edge) : 表示两点之间的关系或行为。两点之间可以有多条边,且边有方向。四元组 <起点 VID、Edge type、边排序值 (rank)、终点 VID> 用于唯一标识一条边
    • 边类型(Edge type) : 由一组预定义的属性构成
      • 一条边有且仅有一个 Edge type
    • 边排序值(Rank) : 可以用来区分 Edge type、起始点、目的点都相同的边,该值完全由用户自己指定
      • 一条边有且仅有一个 Rank,类型为 int64,默认值为 0
  • 属性(Property) : 属性是指以键值对(Key-value pair)形式表示的信息

nGQL 查询语言

创建和选择图空间

  • 创建图空间
    1
    2
    3
    4
    5
    CREATE SPACE <space_name> (
    [partition_num = <partition_number>,] # 选择分区数量
    [replica_factor = <replica_number>,]
    vid_type = {FIXED_STRING(<N>) | INT64}
    );
  • 列出创建的图空间
    1
    SHOW SPACES
  • 选择图空间
    1
    USE <space_name>

创建 Tag 和 Edge type

1
2
3
CREATE TAG player(name string, age int);

CREATE EDGE serve(start_year int, end_year int);

插入数据

  • 插入点
    1
    INSERT VERTEX player(name, age) VALUES "player100":("Tim Duncan", 42);
  • 插入边
    1
    INSERT EDGE follow(degree) VALUES "player102" -> "player100":(75);

查询数据

  • GO 语句
  • FETCH 语句
  • LOOKUP 语句
  • MATCH 语句

问答系统实现

待续。。。

参考

[1]. 基于 Gemini 和 NebulaGraph 构建知识图谱问答系统

[2]. NebulaGraph Database手册

[3]. nGQL 指南

[4]. 这是一份简单到没朋友的 NebulaGraph 上手图文教程