发现了一个好东西兄弟们,给大家分享一下:是一个支持AI原生多模态混合搜索的数据库,叫OceanBase seekdb(简称 seekdb)。
之前我们有接到过一个制造业客户的需求,因为底层数据的构建难度太大,召回率我没把握,就没做。然后这两天看到了seekdb,发现最难的问题好像完全能解决了。
客户信息脱敏,大概的需求场景是这样的:
这是一家工厂的高层找来的,他们是做塑制品生产的,类似于手机壳那种,工厂每条产线的年产值高达数千万。设备全是进口的先进设备,整个产线工序很庞大,但是厂家能提供的只有一个维修手册和远程的支持,如果有必要还要给人家报销从国外来付费修检。
他们自己确实也培养了一个老师傅,但是现在产线增多,新的技术工培养周期太长,目前真的能干的就一个师傅,七条产线,日常巡检根本就巡检不过来,而且一旦某个产线出现问题,一个产线还能紧急应对,但是多个产线一旦停工,损失非常大。
所以,老板听说AI很厉害,就安排他们看看是否能够做一个智能体。即使不能像老师傅一样,最起码能够让普通员工拿着这个智能体能完成日常的巡检,然后有小问题也能自己查看手册维护都行。腾出时间,让老师傅专注于比较复杂的,并且能多教些徒弟。
这个需求是一个非常典型的需求。 (注意:我说的不是场景典型,而是使用到的技术比较典型。)
相信很多小伙伴看完这个场景,乍一听起来,就是一个经典的多模态RAG的事。
但是,真当我们深入产线去了解之后,就会感受到这是一个多么困难的事情。
项目背景
大家代入一下产线员工的视角,产线跑出来的产品有问题或者是产线某个流水线卡住了。
员工只能对着AI说:在产线注塑的这一块,现在卡住了,怎么解决。因为不太好描述组件,拍张照片给AI。这时候我们会在每一次询问时把“环境参数”,一起传给AI。比如:产线 ID 是 07 号,当前的水温是 85℃,压力是 120MPa。方便AI结合场景数据做判断。
通常AI知识库类的助手的逻辑原理如下:
在这个逻辑下,能不能从知识库里把正确的知识片段拿出来,其实是决定了AI是否能回答正确的决定性因素。
所以,要想给出这个精准方案,系统必须在海量数据里,找到同时满足以下三个条件的那条知识:
-
视觉条件: 照片长得像“高压泵阀体”(图片向量匹配)。
-
语义条件: 故障原理符合“异响震动”(文本向量匹配)。
-
硬性指标: 该故障触发的阈值,必须包含当前传上来的 85℃ 水温(结构化数据过滤)。
在以往的架构里,图片放在图片向量库,手册在文本向量库,指标数据在业务数据库。要想把这三个条件“取交集”,我们需要在代码里写极其复杂的逻辑:
- 先去搜图,拿到一堆疑似相同零件的ID和零件名称;
- 然后拿着这一堆 ID 去查业务数据库,把等于85°C水温的使用中的零件ID筛选出来。
- 然后再拿工人描述的状况+零件名称去查知识库中维修手册。
- 然后根据维修手册里边的知识片段+数据指标+已有信息,让最后的AI给出判断。
这就像是在三个不同的部门之间跑腿盖章,只要中间一个环节对不上,或者查询的内容不对,整个链条就断了。而且大家都清楚,标量查询还好,但是向量是按照近似值进行的查询,都会有一定的偏差,每个环节正确率是90%,但是三个环节的叠加,那么最终的正确率就变成了:72%。
这就是为什么很多多模态项目落地后,总是出现答非所问的情况,因为逻辑是割裂的。
而 seekdb 让我兴奋的点就在这,解决了核心问题!它是一个AI 原生数据库,它并没有搞什么花里胡哨的概念,而是解决了一个最本质的问题:融合。
它支持在一张表里,同时存储和索引:向量、文本、JSON、GIS 等多模数据类型。
-
Image Vector(故障图片的特征向量)
-
Text Vector(维修手册的语义向量)
-
Scalar(实时监测的业务数据库数据)
这意味着,面对上面那个场景的查询,我们可以丢掉拼凑逻辑了。
我们可以通过一条 SQL 指令(混合检索),直接告诉数据库:
“帮我找跟这张照片长得像的故障案例(Vector 相似度),同时,这个案例的描述要跟工人的问题语义相关(Text 相似度),并且,这是一个硬性门槛——这个案例对应的温度范围必须包含当前传进来的 85℃(SQL Filter),最后把符合这三个条件的维修方案直接返给我。”
-- 定义查询参数
SET @search_params = '{
-- 【多路向量召回】:同时匹配视觉和语义
"knn": [
{
-- 1. 视觉相似度(Image Similarity)
"field": "image_vec", -- 对应表里的图片向量字段
"k": 10, -- 取前10个最相似的
"query_vector": [0.12, 0.35, ...] -- 这里填入工人刚才拍的照片生成的向量
},
{
-- 2. 文本语义相似度(Text Similarity)
"field": "text_vec", -- 对应表里的文本描述向量字段
"k": 10, -- 取前10个最相关的
"query_vector": [0.88, 0.12, ...] -- 这里填入"异响震动"等描述生成的向量
}
],
-- 【硬性指标过滤】:SQL Filter
"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);
这就是我最想强调的能力。
我们不再是先查图片再去猜原因,而是 把“图片向量”、“文本向量”和“硬性数据指标”放在同一个层面上进行筛选,拥有强大的混合搜索能力。 数据库自己在底层索引里就把交集做好了,直接吐出那个最可能的、精准的数据。
此内容这样也意味着,我们可以让模型多次的试错,多次查询,从而再次提高准确率。
以上的过程有点像“盲人摸象”,之前的库只能存储和查询单一模态,有点像蒙眼只能摸到大象的耳朵、鼻子、尾巴,按照这些局部条件检索能出现非常多的可能的答案,比如:AI会猜测可能是狮子、长颈鹿。
而Seekdb有了全局的能力,把所有条件都能同时响应,精准的筛选出“大象”的结果。AI会明确的回答出来,这是一只大象。
这就是 AI原生数据库 的能力。
“好用”和“能落地”是两码事。 之前我们没有接这个项目,是因为部署一套集群,无论是开发还是运维成本都太高了,给客户能带来的收益还很难测算。
而有了OceanBase seekdb 后,我感觉已经可以重新把这个事情再研究一下了。
此外,OceanBase seekdb还切中了几个非常好的点,让我觉得这个项目非常值得大家关注和使用:
1、纯正开源,无缝接入 AI 生态 这点必须划重点:seekdb 遵循 Apache 2.0 协议 全面开源,这意味着你可以自由使用、修改,商业非常友好。
-
完全兼容 MySQL 协议,你现在的数据库客户端、驱动都能直接连,没有学习成本。
-
生态完善: 已经和 LangChain、Dify、LlamaIndex 等主流 AI 框架打通了,写 Agent 的时候可以直接把它当做标准的 VectorStore 用,无缝集成。
2、极致轻量,pip install 就能跑 它支持嵌入式模式,对于 Python 开发者,
只需要一行 pip install seekdb 就能安装。
-
资源占用极低: 最低起步配置仅需 1核 CPU、2GB 内存。
-
场景通吃: 这意味着它不仅能跑在服务器上,还能塞进工厂的工控机、树莓派,完美适配离线/边缘计算场景。
3、内置 AI 函数 ,省去大量的“胶水代码” seekdb 把调用 AI 模型的能力直接内置到了数据库函数。
-
之前需要自己写脚本调用API生成向量或问答。现在直接在 SQL 里写
AI\_EMBED或AI\_COMPLETE,数据库自动帮你完成“推理+存储”的闭环。4、“AI 原生”混合检索, 它不是简单的“拼凑”,而是在内核层实现了 Vector(向量)+ Fulltext(全文)+ SQL(标量)+ GIS(地理信息) 的原生融合。 正如上面所说,它支持在一张表里同时处理视觉、语义和硬性指标,通过 RRF(倒数排名融合)算法给出输出。
以下是与一些常见数据库的能力支持对比:
说到这,兄弟们应该手痒了。
光说不练假把式,为了让大家更直观和最简单的方式,体验seekdb,我准备了一个最基础的“图搜图”实操案例教程供大家使用。
这个教程是我们本地跑了几遍的,老规矩,我们还是以小白的角度起手,因此以桌面系统“windows”为例,走一下流程。会使用服务器的开发者,浏览以下步骤,肯定也能上手了。
动手实操
一、docker安装。
一路点击ok安装即可。
最后这一步需要重启电脑,注意关闭和保存你的工作,防止突然重启丢失你的工作文件。
然后正常的使用账号登录即可,登录的时候需要🧙,大家注意。
二、部署安装及使用
重启电脑之后,随便找个文件夹,在上边输入"cmd"来打开命令行:
然后打开命令行:
输入以下命令,(为了大家都能跑通,所以默认的文件位置是C盘,大家可以自己修改路径)
docker volume create seekdb-data
1、部署
确保你已经有docker的情况下,在终端执行。(注意把替换为你的密码这几个字修改成你的密码)
docker run -d --name seekdb -p 2881:2881 -p 2886:2886 -e ROOT\_PASSWORD="123456" -v seekdb-data:/var/lib/oceanbase quay.io/oceanbase/seekdb
执行完后,耐心等待 2-3 分钟,让 seekdb完成内部初始化。
2、连接 seekdb。
# 1. 进入容器的命令行环境
docker exec -it seekdb bash
# 2. 在容器内部连接数据库
# 执行后,会提示你输入密码
mysql -h127.0.0.1 -uroot -P2881 -p
输入完成后会提示enter password,输入上面修改后的密码,注意输入时是不显示的,输入完成后,按回车即可。显示如下内容就证明连接成功了:
3、使用:
接下来就可以在浏览器中输入【http://localhost:2886】来访问seedb。
密码是:123456
三、官方demo,以图搜图
1、安装anaconda环境。
下载地址:https://www.anaconda.com/download。也是一路点击 ok,安装即可。
2、安装python环境:
再打开一个新的cmd的窗口。输入以下命令,通过anaconda安装python 3.10:
conda create -n image-search python=3.10
conda activate image-search
当它的开头的括号中,变成(image-search)即为安装成功。
3、拉取项目代码:
git clone https://gitee.com/oceanbase-devhub/image-search.git
cd image-search
4、添加项目依赖:
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,然后再点击回车
5、安装项目依赖:
pip install -r .\requirements.txt
6、修改环境参数(.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="123456" ## 设置对应的租户用户的密码((之前安装的seekdb的密码))
UI_LANG="zh"
7、启动项目:
最后,在这个文件夹下,以管理员身份运行,再打开一个窗口:
然后输入以下命令:
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体验方式:
GitHub:https://github.com/oceanbase/seekdb
官方文档: https://www.oceanbase.ai/docs/zh-CN/seekdb-overview
往期推荐
