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

embedded/2025/1/9 1:34:31/

文章目录

    • 一、实验环境说明
    • 二、前期准备工作
      • 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.3root@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-m3OLLAMA_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-v3UI_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-m3OLLAMA_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-v3UI_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-CNpoetry 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.ppmy.cn/embedded/151781.html

相关文章

C++ 设计模式:迭代器模式(Iterator Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 组合模式 链接&#xff1a;C 设计模式 - 职责链模式 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;它提供了一种方法顺序访问一个聚合对象中的各个元素&#xff0c;而又不需…

Verilog语法之文件读写

摘要&#xff1a;本文主要介绍了Verilog语法中关于文件操作的内容&#xff0c;在仿真中我们可以利用文件来存储测试数据或者将测试结果写入相应的文件中&#xff0c;下面介绍了如何操作文件以及给出了相应的例子。 1.文件打开$fopen 系统任务$fopen用于打开指定文件名的文件&a…

风控算法开发过程中常用评估指标

最近整理了一下风控算法开发过程中常用的模型层面指标。模型指标的选择和评估不仅直接关系到算法性能&#xff0c;还影响到模型在实际业务场景中的适配性和稳定性。因此&#xff0c;这里主要聚焦于模型层面的评估指标&#xff0c;如 KS、Lift、PSI 和 KL 散度&#xff0c;以及它…

【微服务】【Sentinel】认识Sentinel

文章目录 1. 雪崩问题2. 解决方案3. 服务保护技术对比4. 安装 Sentinel4.1 启动控制台4.2 客户端接入控制台 参考资料: 1. 雪崩问题 微服务调用链路中的某个服务故障&#xff0c;引起整个链路中的所有微服务都不可用&#xff0c;这就是雪崩。动图演示&#xff1a; 在微服务系统…

使用 `llama_index` 构建智能问答系统:多种文档切片方法的评估

使用 llama_index 构建智能问答系统&#xff1a;多种文档切片方法的评估 代码优化与解析1. **代码结构优化**2. **日志管理**3. **环境变量管理**4. **模型初始化**5. **提示模板更新**6. **问答函数优化**7. **索引构建与查询引擎**8. **节点解析器测试** 总结 在现代自然语言…

EPS32基础篇开发

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 开发 EPS32基础篇 前言一、GPIO输入输出GPIO可设置一下4种状态代码示例&#xff1a;检测按键&#xff0c;按下时&#xff1a;LED亮&#xff0c;松开时&#xff0c;LED灭 二、…

面试场景题系列:设计搜索自动补全系统

当我们在谷歌上搜索或者在亚马逊上购物时,只要在搜索框中打字,网页上就会展示一个或者更多的与搜索词匹配的结果。这个功能叫作自动补全(Autocomplete)、提前输入(Typeahead)、边输边搜(Search-as-you-type)或者增量搜索(Incremental Search)。图-1展示了一个谷歌搜索的示例,…

元宇宙金融新纪元:CZ协议全球启航

2025年&#xff0c;金融领域即将迎来一场具有划时代意义的重大变革——CZ协议&#xff0c;这个被全球金融科技爱好者翘首以盼的项目&#xff0c;将正式启动&#xff0c;为全球用户带来前所未有的机遇与体验&#xff0c;引领我们进入一个全新的数字金融时代&#xff0c;你准备好…