🤖️ DB-GPT是一个开源的AI原生数据应用开发框架(AI Native Data App Development framework with AWEL(Agentic Workflow Expression Language) and Agents)。
目的是构建大模型领域的基础设施,通过开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及优化、Multi-Agents框架协作、AWEL(智能体工作流编排)等多种技术能力,让围绕数据库构建大模型应用更简单,更方便。
OceanBase 从 4.3.3 版本开始支持了向量数据类型的存储和检索,并且经过适配可以作为 DB-GPT 的可选向量数据库,支持 DB-GPT 对结构化数据和向量数据的存取需求,有力地支撑其上 LLM 应用的开发和落地,同时 DB-GPT 也通过 chat data
、chat db
等应用为 OceanBase 提升易用性。
鉴于传统 RAG 在概括性问题上存在的问题,DB-GPT 实现了一种基于知识图谱进行相关文档召回的 RAG 技术 —— GraphRAG。实现依赖图数据库和向量数据库作为文档数据存储和检索的基础组件。TuGraph是作为一个高效的图形数据库,支持高数据量、低延迟查找和快速图形分析的图数据库,可以与 OceanBase 的向量存储功能相结合,共同支持 DB-GPT GraphRAG 功能。
DB-GPT 的 chat data
功能本质是自然语言转SQL技术(或称为NL2SQL
/Text2SQL
),原理如下图所示:
数据导入阶段
自然语言查询阶段
数据导入阶段
查询阶段
现场体验的用户,无需进行环境配置
进行实验之前,我们需要先获取 OceanBase 数据库,目前可行的方式有两种:使用 OBCloud 实例或者使用 Docker 本地部署单机版 OceanBase 数据库。我们在此推荐 OBCloud 实例,因为它部署和管理都更加简单,且不需要本地环境支持。
进入OB Cloud 云数据库 365 天免费试用页面,点击“立即试用”按钮,注册并登录账号,填写相关信息,开通实例,等待创建完成。
进入实例详情页的“实例工作台”,点击“连接”-“获取连接串”按钮来获取数据库连接串,将其中的连接信息填入后续步骤中创建的 .env 文件内。
创建数据库以存放示例数据以及向量数据。需要注意的是,在设置数据库名称的时候,为了便于用户在 DB-GPT 前端界面进行后续的操作,强烈不建议用户使用以下四种名称:(因为以下四种数据库名被 DB-GPT 保留,用户虽然能成功在 DB-GPT 侧建立连接,但是无法在 Web UI 中进行后续的应用管理操作)
现场体验的用户,无需拉取,请跳过本步骤
使用以下命令获取:
docker pull quay.io/oceanbase-devhub/tugraph-runtime-centos7:4.5.0
在该后续步骤当中我们将使用阿里云百炼的模型服务,所以需要事先申请 API KEY。
首先,我们需要注册阿里云百炼账号,开通模型调用服务并获取 API Key
现场体验的用户,请在登录上云服务器后,跳转到5. 启动 Docker 容器
为了简化部署流程,我们基于 DB-GPT 的 0.6.2 版本进行了修改,并且上传到了我们 fork 的代码仓库中。使用以下指令下载项目代码:
git clone https://github.com/oceanbase-devhub/DB-GPT
如果上述命令执行遇到问题,可能是访问 github 存在困难,可以使用以下指令从 gitee 获取项目代码:
git clone https://gitee.com/oceanbase-devhub/DB-GPT.git
docker pull quay.io/oceanbase-devhub/dbgpt:latest
进入项目代码所在的目录(以克隆 DB-GPT 项目所在的目录为根目录):
cd ./DB-GPT/docker/compose_examples
执行 create_container_with_config_check.sh
脚本:
./create_container_with_config_check.sh
下面请按照脚本要求逐项填写参数配置:
如果最后一步提示预先在DB-GPT中创建 OceanBase 连接失败,请稍后根据教程在 Web UI 中设置,可以照常进行后续步骤,在使用阶段手动配置数据库 连接即可
该脚本会做如下几件事:
如果 API KEY 验证通过,测试与 OceanBase 是否连通,连通则会进一步初始化测试数据,以便后续的实验步骤,测试数据包括四个表:
chat data
应用需要的数据库连接,脚本中直接使用 OceanBase 作为目标数据库;默认情况下,DB-GPT 的前端页面会启动在本机的5670
端口上,也就是说可以通过访问当前机器的 IP 来访问 DB-GPT 的界面。也就是说如果我在笔记本上运行的话,我在浏览器上访问localhost
即可(或者是内网 IP);如果在服务器上部署 DB-GPT,则需要访问服务器的公网 IP。
初始界面下是不包含应用的,点击应用管理
进入创建流程:
接下来将演示如何创建两种应用类型:
RAG
应用;text2SQL
的 chat data
应用;首先选择知识库
,再点击创建知识库
:
然后按照配置引导进行设置:
知识库名称、描述可自定义。本教程默认演示 GraphRAG 功能,所以存储类型选择为Knowldege Graph
,如需使用完全基于向量搜索的传统 RAG 请选择存储类型为Vector Store
。
这里我选择普通文档作为示例,用户可自行尝试其他类型。
点击选择或拖拽文件
区域,选择符合格式要求的文件
默认选择自动切片
,点击切片处理
即可。耐心等待处理完成,处理会自动退出配置界面,并弹出成功消息。需要注意的是 GraphRAG 相对于传统的 RAG 来说在导入文档、构建索引部分相对耗时,请耐心等待,感兴趣的用户可以在服务部署机器上使用docker logs -f dbgpt
命令查看处理过程的日志
然后点击创建好的知识库,点击查看图谱
,可以看到文档经过处理后的实体-关系图:
在启动 Docker 容器步骤,运行
create_container_with_config_check.sh
脚本得到预先在DB-GPT中创建 OceanBase 连接成功
提示的用户可以跳过此步骤。
点击数据库
,选择OceanBase
数据库,Create Now
:
根据 OceanBase
连接串提供的信息设置数据库名、用户名、主机地址、端口等信息(可以与5. 启动 Docker 容器一致)
创建成功即可在侧边栏看到连接信息:
选择应用程序
,点击创建应用
:
选择原生应用模式
,应用名称和描述可自行定义:
应用类型选择 Chat Knowledge
,参数选择我们刚刚创建好的知识库名称,模型在我们的配置下仅有 tongyi_proxyllm
可供选择,温度控制模型输出的随机性,值越大,模型输出越随机。设置完毕后保存,就可以看到在应用程序一栏中出现了我们定义的应用。
然后我们继续类似地创建 chat data
应用:
应用类型选择 Chat Data
,参数选择我们刚刚创建好的数据库连接,模型和温度含义与 Chat Knowledge
一致。
回到应用程序
页面,点击开始对话可以进入使用流程:
知识库应用——直接键入文本进行交互即可:
chat data 应用可以使用自然语言的方式告知大模型生成 SQL,并使用得到的数据进行可视化(需要注意的是 text2SQL 对大模型的能力要求较高,如果执行结果出现错误提示,可以尝试重试和修改提示词)。这一部分可以进行交互查询的表,请回顾5. 启动 Docker 容器,或者直接询问数据库有哪些表
、xxx表的结构定义
获取表的模式信息。
额外提供一些询问供用户尝试:
您可以使用以下命令启动一个 OceanBase docker 容器:
docker run --name=ob433 -e MODE=mini -e OB_MEMORY_LIMIT=8G -e OB_DATAFILE_SIZE=10G -e OB_CLUSTER_NAME=ailab2024_dbgpt -e OB_SERVER_IP=127.0.0.1 -p 2881:2881 -d quay.io/oceanbase/oceanbase-ce:4.3.3.1-101000012024102216
如果上述命令执行成功,将会打印容器 ID,如下所示:
af5b32e79dc2a862b5574d05a18c1b240dc5923f04435a0e0ec41d70d91a20ee
容器启动后,您可以使用以下命令检查 OceanBase 数据库初始化状态:
docker logs -f ob433
初始化过程大约需要 2 ~ 3 分钟。当您看到以下消息(底部的 boot success!
是必须的)时,说明 OceanBase 数据库初始化完成:
cluster scenario: express_oltp
Start observer ok
observer program health check ok
Connect to observer ok
Initialize oceanbase-ce ok
Wait for observer init ok
+----------------------------------------------+
| oceanbase-ce |
+------------+---------+------+-------+--------+
| ip | version | port | zone | status |
+------------+---------+------+-------+--------+
| 172.17.0.2 | 4.3.3.1 | 2881 | zone1 | ACTIVE |
+------------+---------+------+-------+--------+
obclient -h172.17.0.2 -P2881 -uroot -Doceanbase -A
cluster unique id: c17ea619-5a3e-5656-be07-00022aa5b154-19298807cfb-00030304
obcluster running
...
check tenant connectable
tenant is connectable
boot success!
使用 Ctrl + C
退出日志查看界面。
可以使用 mysql 客户端连接到 OceanBase 集群,检查数据库部署情况。
mysql -h127.0.0.1 -P2881 -uroot@test -A -e "show databases"
如果部署成功,您将看到以下输出:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| oceanbase |
| test |
+--------------------+
可通过下面的命令将test
租户下的ob_vector_memory_limit_percentage
参数设置为非零值,以开启 OceanBase 的向量功能模块。
mysql -h127.0.0.1 -P2881 -uroot@test -A -e "alter system set ob_vector_memory_limit_percentage = 30"