基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
基于 OceanBase 构建智能问答机器人
更新时间:2026-06-20 20:59:17
通过 OceanBase 的向量检索技术构建您的 OceanBase 文档智能助手。
说明
本篇教程也同步在 OB Cloud 控制台上线了交互式教程,可以跟随教程在真实的 OB Cloud 环境中进行互动体验,登录 OB Cloud 控制台 后,单击左侧导航栏的 实践教程 即可查看全部已上线的交互式教程。
概念介绍
RAG(Retrieval Augmented Generation):检索增强生成。RAG 是一个人工智能框架,用于从外部知识库中检索事实,以便为大型语言模型 (LLM) 提供最准确、最新的信息,并让用户深入了解 LLM 的生成过程,常应用于智能问答、知识库等。
LLM(Large Language Model):大语言模型。指使用大量文本数据训练的深度学习模型,可以生成自然语言文本或理解语言文本的含义。大语言模型可以处理多种自然语言任务,如文本分类、问答、对话等,是通向人工智能的重要途径。
架构
文档智能助手将文档以向量的形式批量存储在 OceanBase 数据库内。用户通过 UI 界面提问,程序使用 BGE-M3 模型将提问内容嵌入成为向量并在数据库中检索相似向量,得到相似向量对应的文档内容后,应用将它们会同用户提问一起发送给 LLM,LLM 会根据提供的文档生成更加准确的回答。

前提条件
- 您的环境中有可用的事务型(MySQL)集群实例。
请参考 创建租户完成租户创建后,再参考下述步骤操作。
您的环境中已存在可以使用的 MySQL 兼容模式租户和 MySQL 数据库和账号,并已对对数据库账号授读写权限。如需创建,详情参见 创建账号和 创建数据库(仅 MySQL)。
您拥有项目管理员或实例管理员可对项目中的实例进行读写操作的权限,以及
ALTER SYSTEM权限,如无权限,可联系组织管理员添加权限。安装 Python 3.11 及以上版本 和相应 pip。如果您的机器上 Python 版本较低,可以使用 Miniconda 来创建新的 Python 3.9 及以上的环境,具体可参考 Miniconda 安装指南。
安装 Poetry,可参考命令:
python3 -m pip install poetry确保您机器上的代码是最新的状态,建议进入
ai-workshop-2024仓库目录执行git pull。确保您已经在实例工作台中设置了
ob_vector_memory_limit_percentage参数,以启用向量检索功能。推荐设置值为30,如需更精确设置此参数,请参考 ob_vector_memory_limit_percentage 计算此值。
步骤一:获取数据库连接信息
在下拉框中,根据 ID 选择您的集群实例。
进入 实例工作台 页面。
单击连接,选择 获取连接串。
在弹出框中选择 使用公共网络。
获取访问地址,选择 添加当前浏览器IP地址。
填写数据库相关信息,复制连接串。
步骤二:注册 LLM 平台账号
注册阿里云百炼账号,开通模型服务并获取 API 密钥。
注意
开通阿里云百炼大模型服务需要您跳转至第三方平台完成。此操作将遵循第三方平台的收费规则,并可能产生相应费用。请在继续前,访问其官网或查阅相关文档,确认并接受其收费标准。如不同意,请勿继续操作。
注意
本教程以通义千问 LLM 为例来介绍问答机器人的搭建,您也可以选择使用其他 LLM 进行搭建,选用其他 LLM 需要更新 .env 文件中的 API_KEY、LLM_BASE_URL 和 LLM_MODEL。




步骤三:构建您的 AI 助手
克隆代码仓库
git clone https://gitee.com/oceanbase-devhub/ai-workshop-2024
cd ai-workshop-2024
安装依赖
poetry install
设置环境变量
cp .env.example .env
# 如果您使用通义千问提供的 LLM 能力,则需要把 API_KEY 和 OPENAI_EMBEDDING_API_KEY 更新为您从阿里云百炼控制台获取的 API KEY 值,并将 DB_ 开头的变量更新为您的数据库连接信息,然后保存文件。
vi .env
连接数据库
您可使用我们准备好的脚本来尝试连接数据库,以确保数据库相关的环境变量设置成功:
bash utils/connect_db.sh
# 如果顺利进入 MySQL 连接当中,则验证了环境变量设置成功
准备文档语料
在该步骤中,我们将克隆 OceanBase 相关组件的开源文档仓库并处理它们,生成文档的向量数据和其他结构化数据后将数据插入到 OceanBase 数据库。
克隆并处理文档仓库
注意
此步骤需下载和处理大量 OceanBase 文档,会花费较长时间。
git clone --single-branch --branch V4.3.3 https://github.com/oceanbase/oceanbase-doc.git doc_repos/oceanbase-doc # 如果您访问 Github 仓库速度较慢,可以使用以下命令克隆 Gitee 的镜像版本 git clone --single-branch --branch V4.3.4 https://gitee.com/oceanbase-devhub/oceanbase-doc.git doc_repos/oceanbase-doc文档格式标准化
因为 OceanBase 的开源文档中有些文件使用
====和----来表示一级标题和二级标题,我们在这一步将其转化为标准的#和##表示。# 将标题转换为标准 Markdown 格式 poetry run python convert_headings.py \ doc_repos/oceanbase-doc/zh-CN \将文档转换为向量并插入 OceanBase 数据库
我们提供了
embed_docs.py脚本,通过指定文档目录和对应的组件后,该脚本就会遍历目录中的所有 markdown 格式的文档,将长文档进行切片后使用嵌入模型转换为向量,并最终将文档切片的内容、嵌入的向量和切片的元信息(JSON 格式,包含文档标题、相对路径、组件名称、切片标题、级联标题)一同插入到 OceanBase 的同一张表中,作为预备数据待查。为了节省时间,我们只处理 OceanBase 众多文档中与向量检索有关的几篇文档,在第 6 步打开聊天界面之后,您针对 OceanBase 的向量检索功能进行的提问将得到较为准确的回答。
# 生成文档向量和元数据 poetry run python embed_docs.py --doc_base doc_repos/oceanbase-doc/zh-CN/640.ob-vector-search
启动 UI 聊天界面
执行以下命令启动聊天界面:
poetry run streamlit run --server.runOnSave false chat_ui.py
访问终端中显示的 URL 来打开聊天机器人应用界面。
You can now view your Streamlit app in your browser.
Local URL: http://localhost:8501
Network URL: http://172.xxx.xxx.xxx:8501
External URL: http://xxx.xxx.xxx.xxx:8501 # 这是您可以从浏览器访问的 URL
应用展示
注意
由于本应用基于 OceanBase 文档语料构建,请就 OceanBase 相关问题向您的助手提问。

在线 Demo 体验
除自己构建智能问答机器人应用外,您还可以访问文档小助手登录体验在线 Demo 应用,Demo 界面的官网入口为资源与服务-学习-在线体验-在线 Demo。以下为界面展示:
