Dify 向量库替换实战:对接 OceanBase 的操作指南
文章目录
在构建智能问答系统或 RAG(Retrieval-Augmented Generation)应用的过程中,Dify 作为一款开源、可视化的 LLM 应用开发框架,提供了便捷的数据管理、模型调用与向量搜索能力。默认情况下,Dify 使用的是 Weaviate 向量数据库,来实现文档嵌入(embedding)后的相似度搜索。
然而,在实际业务中,默认方案可能无法满足一些定制化需求。例如:
- 企业已有数据库基础设施,希望充分利用现有资源
- 对数据安全、私有化部署有较高要求
- 对查询性能、可扩展性有更严格的 SLA
- 希望统一结构化与向量数据的存储引擎
基于这些考虑,我们选择将 Dify 默认的向量存储替换为 OceanBase —— 一款高性能、分布式的企业级关系型数据库,并通过构建向量索引和适配器模块,将其嵌入 Dify 的向量搜索流程中。
一、Dify 向量存储机制简述
在 Dify 中,文档数据(如知识库文档、FAQ、手册等)需要经过向量化处理,才能用于语义检索和问答增强。其核心处理流程如下图所示:
文档(原始文本)
↓
Embedding(由 OpenAI, Hugging Face, etc. 提供)
↓
向量(高维 float 数组)
↓
Vector Store(默认为 Weaviate)
↓
Dify 查询时执行语义检索,返回匹配片段
向量存储的作用
Dify 本身不负责存储嵌入向量,而是通过调用第三方向量数据库来管理这些向量。向量数据库的主要职责包括:
- 存储文本对应的向量数据(float 数组)
- 为每条向量建立索引,支持高效近似/精确搜索
- 提供语义检索 API(如 top-k 相似度查找)
- 支持元数据管理(如 document_id, source, tags 等)
二、为什么选择 OceanBase
在选择向量数据库替换 Dify 默认的 Weaviate 时,OceanBase 作为分布式关系数据库,展现了独特的优势。以下从关键维度进行对比分析:
对比维度 | OceanBase | Weaviate |
---|---|---|
数据库类型 | 分布式关系数据库,支持关系型数据与向量数据混合存储 | 原生向量数据库,专注于向量数据管理和检索 |
扩展性 | 强大的水平扩展能力,支持多副本高可用,弹性伸缩 | 支持集群模式,扩展相对复杂,需要额外运维 |
一致性保障 | 提供强一致性和分布式事务支持 | 采用最终一致性模型,弱事务支持 |
查询能力 | 支持 SQL 及复杂混合查询,向量和关系型数据可联合查询 | 主要支持基于向量的近似最近邻搜索(ANN)查询 |
性能表现 | 具备良好分布式性能,适合大规模混合负载 | 针对向量检索优化,ANN 性能表现优秀 |
部署模式 | 支持云原生及本地多种部署方案,适合企业级环境 | 云原生优先,部分功能依赖 GPU,部署硬件要求较高 |
安全性 | 完善的权限控制、多租户支持和数据隔离 | 提供基础安全机制,但企业级安全功能较弱 |
生态兼容 | 兼容标准数据库中间件和企业运维工具 | 有专用客户端和 API,生态较新 |
因此,如果你的应用场景注重数据一致性、强事务支持及混合型数据查询,且已有 OceanBase 基础设施,选择 OceanBase 替换 Weaviate 是合理且高效的方案。
三、替换 OceanBase 实战
1. 部署dify(1.5.0版本)
这里直接按照dify官方文档,拉取git仓库源码,docker-compose启动即可
# 拉取源码
git clone https://github.com/langgenius/dify.git
cd dify/docker
docker-compose up -d
2. 修改.env文件
cd dify/docker
cp .env.example .env
vim .env
# 修改 VECTOR_STORE=oceanbase
# 修改 OCEANBASE_VECTOR_DATABASE=oceanbase,这里我是直接使用已有的 oceanbase 库
3. 修改docker-compose文件并重启dify
cd dify/docker
vim docker-compose.yml
# 修改 VECTOR_STORE 变量为 oceanbase
# 重启 dify 容器
docker-compose down
docker-compose up -d
这里重启容器后,会发现状态仍为可用,之前上传的文档也能正常索引,这是因为默认向量库 weaviate 的容器还没停止,如果停止后,会发现无法正常索引,所以就需要做向量库的数据迁移,将 weaviate
的数据迁移到 oceanbase
4. 停掉默认向量库并迁移数据
# 停掉默认向量库容器
docker stop docker-weaviate-1
# 执行迁移命令
docker exec -it docker-api-1 flask vdb-migrate
5. 验证数据迁移
# 下载oceanbase客户端
https://github.com/oceanbase/obclient/releases/download/2.2.8/obclient-2.2.8-1.el7.x86_64.rpm
# 上传服务器并安装
rpm -ivh obclient-2.2.8-1.el7.x86_64.rpm
# 验证向量库数据迁移
obclient -uroot@sys -h192.168.132.61 -P2881 -p #密码 dify123456
# 查看索引表
show databases;
use oceanbase;
show tables;
总结
🚀 本篇文章基于实际业务场景,完成了 Dify 默认向量库向 OceanBase 的替换落地,实现了向量数据的平滑迁移与稳定运行。同时也验证了 OceanBase 在混合查询、一致性和企业级部署方面的优势,为后续扩展与定制化开发奠定了基础。