当前位置: 首页 > article >正文

【OceanBase】利用 OceanBase 向量检索能力构建文档智能问答小助手

文章目录

    • 一、实验环境说明
    • 二、前期准备工作
      • 2.1 安装 Python 3.9+ 和 pip
      • 2.2 安装 Poetry
      • 2.3 安装并启动Docker(可选)
      • 2.4 安装 MySQL 客户端
      • 2.5 注册阿里云百炼账号并开通服务获取 API Key
    • 三、构建智能问答小助手
      • 3.1 部署 OceanBase 集群
        • 3.1.1 方式一:使用 OBCloud Database 免费试用版
        • 3.1.2 方式二:使用 Docker 部署 OceanBase 数据库
      • 3.2 克隆代码仓库至本地
      • 3.3 安装依赖项
      • 3.4 设置环境变量
      • 3.5 测试数据库连通性
      • 3.6 准备文档数据
      • 3.7 启动 Chat UI
      • 3.8 报错排查
    • 四、参考链接

一、实验环境说明

实例信息实例参数备注
操作系统Ubuntu 24.04.1 LTS
系统内核Linux 6.8.0-1016-aws
实例大小m5.2xlarge
vCPU/内存 (GiB)8C/32G

image-20241130165710910

二、前期准备工作

2.1 安装 Python 3.9+ 和 pip

root@oceanbase:~# python3 --version
Python 3.12.3

root@oceanbase:~# pip3 --version
pip 24.0 from /usr/lib/python3/dist-packages/pip (python 3.12)

2.2 安装 Poetry

root@oceanbase:~# sudo python3 -m pip install poetry --break-system-packages

image-20241130170850709

2.3 安装并启动Docker(可选)

说明:若不使用下文方式二:使用 Docker 部署 OceanBase 数据库,部署oceanbase集群,该步骤可省略。

root@oceanbase:~# apt-get install docker-ce
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
docker-ce is already the newest version (5:27.3.1-1~ubuntu.24.04~noble).
0 upgraded, 0 newly installed, 0 to remove and 26 not upgraded.

root@oceanbase:~# systemctl start docker && systemctl enable docker
Synchronizing state of docker.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable docker
root@oceanbase:~# systemctl status docker

2.4 安装 MySQL 客户端

root@oceanbase:~# apt-get install -y mysql-client
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
mysql-client is already the newest version (8.0.40-0ubuntu0.24.04.1).
0 upgraded, 0 newly installed, 0 to remove and 26 not upgraded.

2.5 注册阿里云百炼账号并开通服务获取 API Key

注册链接🔗:https://bailian.console.aliyun.com/

注册完阿里云百炼账号后,点击开通服务

image-20241130172018324

点击我已阅读并同意《模型管理服务协议》

image-20241130172051720

提示开通成功。

image-20241128145028862

接下来,我们获取API-KEY。

image-20241128145433948

创建API KEY。

image-20241128145521777

我的API-KEY

sk-xxxxxxxxxxxxxxxxxxxxxxxxx

记录并保存下来。

image-20241130172142316

以上步骤完成后,接下来进入正式的构建只能文档小助手环节。

三、构建智能问答小助手

3.1 部署 OceanBase 集群

3.1.1 方式一:使用 OBCloud Database 免费试用版

直达链接:https://www.oceanbase.com/free-trial#trial

OB Cloud 提供 365 天免费试用,前往 OceanBase 官网开通事务型共享实例(MySQL模式)。点击立即试用

image-20241126122815998

提交申请表单。

image-20241126123152747

创建实例,选择实例类型、云服务提供商等配置,最后点击创建。

image-20241126123625730

实例创建过程大概需要5~10分钟。

image-20241126123909798

实例创建完成,可以查看到实例的相关信息参数。

image-20241126124303702

点击进入实例工作台,可以查看到实例详情信息。如容量资源、基本信息、性能监控等参数信息。

image-20241126170432700

注意:进入实例工作台,设置 ob_vector_memory_limit_percentage 参数以启用向量检索功能,推荐设置值为 30。然后,单击 “连接”,获取连接串:在弹出框中选择使用公共网络,选择 添加当前浏览器 IP 地址,填写数据库相关信息,复制连接串。

image-20241126140056385

image-20241130174322009

image-20241130174505777

实例的连接信息可以通过下面的连接字符串可以获取到

mysql -h xxxxxxxxxxxxxxxxxxx.oceanbase.cloud -P 3306 -u xybroot -D my_database  -p
3.1.2 方式二:使用 Docker 部署 OceanBase 数据库

启动 Docker 服务

root@oceanbase:~# systemctl start docker

执行如下命令启动 OceanBase docker 容器

docker run --name=ob433 -e MODE=mini -e OB_MEMORY_LIMIT=8G -e OB_DATAFILE_SIZE=10G -e OB_CLUSTER_NAME=ailab2024 -e OB_SERVER_IP=127.0.0.1 -p 127.0.0.1:2881:2881 -d quay.io/oceanbase/oceanbase-ce:4.3.3.1-101000012024102216

image-20241130172558495

执行成功,输出容器 ID

7c318ebdea53ab7906d2eb387cbbb42717563d60731a9fea939bfc2bbb62eafc

通过执行以下命令,检查 OceanBase 的引导是否完成

docker logs -f ob433

image-20241130172725841

初始化大约需要 2-3 分钟。当您看到以下消息(底部是必不可少的)时,引导已完成:boot success!

按下Ctrl+C可退出日志视图。

image-20241130172917917

测试部署 (可选)

使用 mysql 客户端连接 OceanBase 集群,查看部署情况。

mysql -h127.0.0.1 -P2881 -uroot@test -A -e "show databases"

如果部署成功,将看到以下输出:

root@oceanbase:~# mysql -h127.0.0.1 -P2881 -uroot@test -A -e "show databases"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| oceanbase          |
| test               |
+--------------------+

3.2 克隆代码仓库至本地

git clone https://github.com/oceanbase-devhub/ai-workshop-2024.git
root@oceanbase:~# git clone https://github.com/oceanbase-devhub/ai-workshop-2024.git
Cloning into 'ai-workshop-2024'...
remote: Enumerating objects: 315, done.
remote: Counting objects: 100% (315/315), done.
remote: Compressing objects: 100% (218/218), done.
remote: Total 315 (delta 198), reused 209 (delta 92), pack-reused 0 (from 0)
Receiving objects: 100% (315/315), 4.62 MiB | 14.48 MiB/s, done.
Resolving deltas: 100% (198/198), done.
root@oceanbase:~#

Tipe:确保项目代码是最新的,建议在项目目录中运行git pull

root@oceanbase:~# cd ai-workshop-2024/
root@oceanbase:~/ai-workshop-2024# git pull
Already up to date.

3.3 安装依赖项

poetry install

image-20241130173135063

3.4 设置环境变量

cp .env.example .env
# Update the .env file with the correct values, especially the API_KEY and database information
vim .env

以下方法二选一即可。

若采用方式二:使用 Docker 部署 OceanBase 数据库,则只需要填写API_KEYOPENAI_EMBEDDING_API_KEY即可,其余参数保持默认。示例如下:

API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
LLM_MODEL="qwen-turbo-2024-11-01"
LLM_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"

HF_ENDPOINT=https://hf-mirror.com
BGE_MODEL_PATH=BAAI/bge-m3

OLLAMA_URL=
OLLAMA_TOKEN=

# OPENAI_EMBEDDING_API_KEY 一项请填写和 API_KEY 一样的值
OPENAI_EMBEDDING_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
OPENAI_EMBEDDING_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1/embeddings"
OPENAI_EMBEDDING_MODEL=text-embedding-v3

UI_LANG="zh"

# 如果你使用的是 OB Cloud 的实例,请根据实例的连接信息更新下面的变量
DB_HOST="127.0.0.1"
DB_PORT="2881"
DB_USER="root@test"
DB_NAME="test"
DB_PASSWORD=""

若采用方式一:使用 OBCloud Database 免费试用版,则需要填写API_KEYOPENAI_EMBEDDING_API_KEY,以及使用到的 OB Cloud 的实例连接信息需要更新。示例如下:

API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
LLM_MODEL="qwen-turbo-2024-11-01"
LLM_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"

HF_ENDPOINT=https://hf-mirror.com
BGE_MODEL_PATH=BAAI/bge-m3

OLLAMA_URL=
OLLAMA_TOKEN=

# OPENAI_EMBEDDING_API_KEY 一项请填写和 API_KEY 一样的值
OPENAI_EMBEDDING_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
OPENAI_EMBEDDING_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1/embeddings"
OPENAI_EMBEDDING_MODEL=text-embedding-v3

UI_LANG="zh"

# 如果你使用的是 OB Cloud 的实例,请根据实例的连接信息更新下面的变量
DB_HOST="xxxxxxxxxxxxxxxxxxx.oceanbase.cloud"
DB_PORT="3306"
DB_USER="xybroot"
DB_NAME="my_database"
DB_PASSWORD="xxxxx"

3.5 测试数据库连通性

bash utils/connect_db.sh

image-20241130173851505

3.6 准备文档数据

克隆文档仓库

git clone --single-branch --branch V4.3.4 https://github.com/oceanbase/oceanbase-doc.git doc_repos/oceanbase-doc
root@oceanbase:~/ai-workshop-2024# git clone --single-branch --branch V4.3.4 https://github.com/oceanbase/oceanbase-doc.git doc_repos/oceanbase-doc
Cloning into 'doc_repos/oceanbase-doc'...
remote: Enumerating objects: 126520, done.
remote: Counting objects: 100% (2173/2173), done.
remote: Compressing objects: 100% (1409/1409), done.
remote: Total 126520 (delta 1719), reused 764 (delta 764), pack-reused 124347 (from 1)
Receiving objects: 100% (126520/126520), 72.28 MiB | 16.44 MiB/s, done.
Resolving deltas: 100% (50134/50134), done.

文档格式标准化

由于 OceanBase 开源文档中的一些文件使用 AND 来表示 1 级和 2 级标题,因此在此步骤中,我们会将它们转换为 standard 和 representation。

# Convert document headings to standard markdown format
poetry run python convert_headings.py doc_repos/oceanbase-doc/zh-CN

将文档转换为矢量并插入到 OceanBase 中

# 由于执行该命令的过程耗时,可以执行第二条命令。
poetry run python embed_docs.py --doc_base doc_repos/oceanbase-doc/zh-CN

poetry run python embed_docs.py --doc_base doc_repos/oceanbase-doc/zh-CN/640.ob-vector-search/

image-20241130175848248

image-20241130181201500

3.7 启动 Chat UI

执行以下命令以启动聊天 UI:

poetry run streamlit run --server.runOnSave false chat_ui.py

image-20241130181233048

通过上述获取到的URL,访问只能问答助手UI页面。

image-20241130181733978

在输入框中,输入我们想要咨询的问题。

image-20241130181902488

至此,利用 OceanBase 向量检索能力构建文档智能问答小助手完成!

3.8 报错排查

【问题描述】

在执行poetry run python embed_docs.py --doc_base doc_repos/oceanbase-doc/zh-CN/640.ob-vector-search该命令发生了如下报错信息。

image-20241202230315216

【问题发现】

在.env配置文件中"API_KEY"和"OPENAI_EMBEDDING_API_KEY"的值需要保持一致,否则会导致上述报错信息的发生。

【解决办法】

更新.env配置文件的参数值,保存后继续执行上述命令。

root@oceanbase:~/ai-workshop-2024# poetry run python embed_docs.py --doc_base doc_repos/oceanbase-doc/zh-CN/640.ob-vector-search/
args Namespace(doc_base=‘doc_repos/oceanbase-doc/zh-CN/640.ob-vector-search/’, table_name=‘corpus’, skip_patterns=[‘oracle’], batch_size=4, component=‘observer’, limit=300, echo=False)
Using RemoteOpenAI
100%|██████████████████████████████████████████████| 9/9 [00:25<00:00, 2.87s/it]

四、参考链接

① ai-workshop-2024/README_zh.md at main · oceanbase-devhub/ai-workshop-2024 · GitHub

② 基于 OceanBase 构建智能问答机器人-V4.3.4-OceanBase 数据库文档-分布式数据库使用文档

③ ai-workshop-2024/README.md at tongyi · oceanbase-devhub/ai-workshop-2024

④ 执行<将文档转换为向量并插入 OceanBase 数据库>的命令产生了报错 - 社区问答- OceanBase社区-分布式数据库


http://www.kler.cn/a/470853.html

相关文章:

  • 【工业场景】用YOLOv8实现工业安全帽识别
  • 深入理解 React 中 setState 的行为及状态更新时机
  • VLMs之Agent之CogAgent:《CogAgent: A Visual Language Model for GUI Agents》翻译与解读
  • java 转义 反斜杠 Unexpected internal error near index 1
  • 源代码编译安装X11及相关库、vim,配置vim(3)
  • Excel 做数据分析的好与不好
  • 6 网络编程
  • 小程序组件 —— 26 组件案例 - 跳转到商品列表
  • Unity-Mirror网络框架-从入门到精通 总目录
  • C# delegate 委托使用教程
  • 【Linux】sed编辑器
  • 周记-Repeater中的children和item区别
  • Go语言的 的抽象类(Abstract Classes)核心知识
  • 图数据库 | 17、高可用分布式设计(上)
  • Elixir语言的学习路线
  • 像素越多越好?像元的面积越小越好?
  • QT ---------------数据库编程概要
  • 自组织映射 (Self-Organizing Map, SOM) 算法详解与PyTorch实现
  • XXL-RPC v1.8.1 | RPC服务框架
  • 去耦电容理解:“耦”了什么?非要“去”了?
  • Bash语言的软件工程
  • 模电面试——设计题及综合分析题0x03(含答案)
  • Android:文件管理:打开文件意图
  • 七次课掌握 Photoshop
  • 【vue指令】
  • Django外键模型未保存引用