html
OceanBase SeekDB:AI原生多模态混合搜索数据库
最近发现了一个好东西,必须分享给各位兄弟:一个支持AI原生多模态混合搜索的数据库,名叫OceanBase SeekDB(简称SeekDB)。
一、项目背景:制造业客户的痛点
1.1 客户需求:智能巡检与维修
之前我们接到一个制造业客户的需求,他们是做塑制品生产的,类似于手机壳那种。工厂的产线年产值高达数千万,设备先进但维修依赖国外支持,成本高昂。他们虽然培养了一个老师傅,但面对越来越多的产线,日常巡检力不从心,停工损失巨大。因此,他们希望利用AI做一个智能体,辅助普通员工进行日常巡检和简单维护,解放老师傅的时间,让他专注于复杂问题和培养徒弟。
1.2 难点分析:多模态数据融合
从产线员工的角度来看,他们希望遇到问题时,可以通过拍摄照片、描述故障现象、提供环境参数(如产线ID、水温、压力等)来向AI寻求解决方案。这看似是一个经典的多模态RAG问题,但深入了解后会发现其困难之处。
要给出精准方案,系统需要在海量数据中找到同时满足以下三个条件的知识:
- 视觉条件:照片与“高压泵阀体”相似(图片向量匹配)。
- 语义条件:故障原理符合“异响震动”(文本向量匹配)。
- 硬性指标:故障触发的阈值包含当前上传的85℃水温(结构化数据过滤)。
1.3 传统架构的局限性
在传统架构中,图片、手册和指标数据分别存储在图片向量库、文本向量库和业务数据库中。要将这三个条件“取交集”,需要在代码中编写极其复杂的逻辑,就像在三个部门之间跑腿盖章,任何一个环节出错都会导致整个链条中断。而且,向量查询是基于近似值的,每个环节的正确率都有偏差,最终结果的准确率会大打折扣。这就是很多多模态项目落地后出现答非所问的原因。
二、SeekDB的解决方案:融合式AI原生数据库
2.1 SeekDB的核心优势
SeekDB是一个AI原生数据库,它并没有搞什么花里胡哨的概念,而是解决了一个最本质的问题:融合。它支持在一张表里,同时存储和索引向量、文本、JSON、GIS等多种数据类型。这意味着,面对上述场景的查询,我们可以丢掉拼凑逻辑,通过一条SQL指令(混合检索)直接告诉数据库:
“帮我找跟这张照片长得像的故障案例(Vector相似度),同时,这个案例的描述要跟工人的问题语义相关(Text相似度),并且,这是一个硬性门槛——这个案例对应的温度范围必须包含当前传进来的85℃(SQL Filter),最后把符合这三个条件的维修方案直接返给我。”
--定义查询参数
SET @search_params = '{
-- 【多路向量召回】:同时匹配视觉和语义
"knn": [
{
-- 1. 视觉相似度(ImageSimilarity)
"field": "image_vec", -- 对应表里的图片向量字段
"k": 10, -- 取前10个最相似的
"query_vector": [0.12, 0.35, ...] -- 这里填入工人刚才拍的照片生成的向量
},
{
-- 2. 文本语义相似度(TextSimilarity)
"field": "text_vec", -- 对应表里的文本描述向量字段
"k": 10, -- 取前10个最相关的
"query_vector": [0.88, 0.12, ...] -- 这里填入 "异响震动" 等描述生成的向量
}
],
-- 【硬性指标过滤】:SQLFilter
"query": {
"bool": {
"filter": [
-- 3. 温度范围必须包含85℃ (即:min_temp <= 85 且 max_temp >= 85)
{
"range": {
"min_temp": {
"lte": 85 -- 案例的最低适用温度 <= 85
}
}
},
{
"range": {
"max_temp": {
"gte": 85 -- 案例的最高适用温度 >= 85
}
}
}
]
}
},
-- 【返回结果】:只展示维修方案
"_source": ["solution_content", "part_name"]
}';
-- 执行混合搜索
SELECT DBMS_HYBRID_SEARCH.SEARCH('maintenance_knowledge', @search_params);
2.2 SeekDB的底层逻辑
SeekDB不是简单的“拼凑”,而是在内核层实现了Vector(向量)+ Fulltext(全文)+ SQL(标量)+ GIS(地理信息)的原生融合。它把“图片向量”、“文本向量”和“硬性数据指标”放在同一个层面上进行筛选,拥有强大的混合搜索能力。数据库自己在底层索引里就把交集做好了,直接吐出那个最可能的、精准的数据。
这意味着,我们可以让模型多次试错、多次查询,从而再次提高准确率。
2.3 SeekDB与传统数据库的对比
SeekDB有了全局的能力,把所有条件都能同时响应,精准地筛选出结果,就像盲人摸象,之前的库只能存储和查询单一模态,有点像蒙眼只能摸到大象的耳朵、鼻子、尾巴,按照这些局部条件检索能出现非常多的可能的答案,比如:AI会猜测可能是狮子、长颈鹿。而Seekdb有了全局的能力,把所有条件都能同时响应,精准的筛选出“大象”的结果。AI会明确的回答出来,这是一只大象。 这就是AI原生数据库的能力。
三、SeekDB的其他优势
3.1 纯正开源,无缝接入AI生态
SeekDB遵循Apache 2.0协议全面开源,商业友好。完全兼容MySQL协议,现有数据库客户端、驱动都能直接连接,学习成本低。生态完善,已和LangChain、Dify、LlamaIndex等主流AI框架打通,可以作为标准的VectorStore使用,无缝集成。
3.2 极致轻量,pip install即可运行
SeekDB支持嵌入式模式,Python开发者只需一行pip install seekdb就能安装。资源占用极低,最低起步配置仅需1核CPU、2GB内存。场景通吃,不仅能跑在服务器上,还能塞进工厂的工控机、树莓派,完美适配离线/边缘计算场景。
3.3 内置AI函数,省去大量“胶水代码”
SeekDB把调用AI模型的能力直接内置到了数据库函数。之前需要自己写脚本调用API生成向量或问答,现在直接在SQL里写AI_EMBED或AI_COMPLETE,数据库自动完成“推理+存储”的闭环。
3.4 “AI原生”混合检索
SeekDB不是简单的“拼凑”,而是在内核层实现了Vector(向量)+ Fulltext(全文)+ SQL(标量)+ GIS(地理信息)的原生融合。它支持在一张表里同时处理视觉、语义和硬性指标,通过RRF(倒数排名融合)算法给出输出。
四、动手实操:以图搜图教程
为了让大家更直观地体验SeekDB,这里提供一个最基础的“图搜图”实操案例教程。以桌面系统“windows”为例:
4.1 安装Docker
访问Docker官网下载并安装Docker Desktop,一路点击“ok”安装即可。安装完成后需要重启电脑。
4.2 部署安装及使用SeekDB
- 创建数据卷:随便找个文件夹,在上边输入”cmd”来打开命令行,然后输入以下命令:
docker volume create seekdb-data - 部署SeekDB:确保你已经有docker的情况下,在终端执行(将
<your_password>替换为你的密码)docker run -d --name seekdb -p 2881:2881 -p 2886:2886 -e ROOT_PASSWORD="<your_password>" -v seekdb-data:/var/lib/oceanbase quay.io/oceanbase/seekdb执行完后,耐心等待 2-3 分钟,让SeekDB完成内部初始化。
- 连接SeekDB:
- 进入容器的命令行环境:
docker exec -it seekdb bash - 在容器内部连接数据库:
mysql -h 127.0.0.1 -u root -P 2881 -p
输入完成后会提示enter password,输入上面修改后的密码,注意输入时是不显示的,输入完成后,按回车即可。显示如下内容就证明连接成功了。
- 进入容器的命令行环境:
- 使用SeekDB:在浏览器中输入
http://localhost:2886来访问Seedb。密码是:<your_password>
4.3 官方Demo:以图搜图
- 安装Anaconda环境:访问Anaconda官网下载并安装Anaconda,一路点击“ok”安装即可。
- 安装Python环境:再打开一个新的cmd的窗口。输入以下命令,通过anaconda安装python 3.10:
conda create -n image-search python=3.10 conda activate image-search当它的开头的括号中,变成(image-search)即为安装成功。
- 拉取项目代码:
git clone https://gitee.com/oceanbase-devhub/image-search.git cd image-search - 添加项目依赖:
在命令行输入:
copy con requirements.txt towhee>=1.1.3,<2.0.0 streamlit>=1.39.0,<2.0.0 python-dotenv>=1.0.1,<2.0.0 opencv-python>=4.10.0.84,<5.0.0 torchvision>=0.20.0 transformers>=4.45.2,<5.0.0 pyobvector>=0.1.6,<0.2.0 torch>=2.6.0输入后,按ctrl+Z,然后再点击回车
- 安装项目依赖:
pip install -r .\requirements.txt - 修改环境参数(.env文件):打开项目文件夹中的.env文件中(.env文件无法直接打开,可以右键、打开方式、用记事本打开)。
具体参数及说明:
HF_ENDPOINT=https://hf-mirror.com DB_HOST="127.0.0.1" ## 设置对应的服务器 IP(之前安装的seekdb的地址) DB_PORT="2881" ## 设置对应的端口(之前安装的seekdb的端口号) DB_USER="root" ## 设置对应的租户及用户名 DB_NAME="test" ## 设置对应的数据库名 DB_PASSWORD="<your_password>" ## 设置对应的租户用户的密码(之前安装的seekdb的密码) UI_LANG="zh" - 启动项目:在这个文件夹下,以管理员身份运行,再打开一个窗口:
streamlit run --server.runOnSave false image_search_ui.py接着你会看到他正在下载小模型,用于将图片向量化,所以这里需要等待一会。
安装完成后,会自动打开浏览器。你也可以复制这个地址粘贴到浏览器 ,进行访问:http://192.168.1.241:8502
配置一个要检索的图片集合的目录,然后点击加载图片。等待图片加载完成后,可以在右侧上传一张用于搜索的图片,稍等一会就会检索出相似的图片,并且会告诉你距离(相近程度)以及该文件的路径。
五、总结与感悟
折腾完这个 Demo,我不由得感慨:技术迭代的速度简直快得惊人。之前我们在应用层做的那些繁琐的跨库查询、ID 拼接,本质上都是在给基础设施的缺陷“打补丁”。而像 OceanBase SeekDB 这样的工具出现,就是把这些补丁工作消灭在底层,让我们可以更纯粹地利用模型的能力去解决业务问题。
回想一年前,我们还在为各种复杂的业务逻辑编写大量的固定工作流、写死板的胶水代码。而现在,“纯 Agent + MCP(Model Context Protocol)” 的模式正在迅速崛起,以前几百行代码才能搞定的逻辑对齐,现在可能只需要让数据库和模型“通个气”就解决了。
我也是为什么我一直坚持一个观点:要做“模型越强我越强”的事,而不是做那些“模型一迭代就被碾压”的事。
在这个AI日新月异的时代,真心建议大家时刻关注像SeekDB这样的前沿工具。有时候,“做不成”和“做得好”之间,差的可能不是技术实力,而只是你不知道手里有把新锤子。事半功倍,往往就藏在这些新工具里。
我认为: SeekDB 的出现,犹如黑暗中的一丝曙光,照亮了AI原生数据库的发展方向。它不仅解决了多模态数据融合的难题,更将AI能力融入数据库内核,为开发者提供了更加便捷、高效的开发体验。然而,SeekDB 的发展之路还很长,我们需要不断探索其在各行各业的应用,并持续优化其性能与功能,方能使其真正成为推动人工智能发展的强大引擎。希望它能为各行各业带来效率的提升,解决实际问题,这才是技术发展的最终意义!
SeekDB体验方式:
- GitHub:https://github.com/oceanbase/seekdb
- 官方文档:https://www.oceanbase.ai/docs/zh-CN/seekdb-overview
#LlamaIndex
© 版权声明
文章版权归作者所有,未经允许请勿转载。
