找回密码
 立即注册
首页 业界区 科技 喂饭级教程 II —— Dify x OceanBase seekdb ...

喂饭级教程 II —— Dify x OceanBase seekdb 使用指南

韶又彤 3 天前
<p>君子性非异也,善假于物也。</p>
<p>—— 《荀子》</p>
<p>这篇文章,是继上一篇公博大佬的大作《喂饭级教程 —— 基于 OceanBase seekdb 构建 RAG 应用》之后,第二篇 seekdb 使用教程类的内容。</p>
<p>欢迎各位老师也能根据文章中的步骤尝试快速使用 Dify x seekdb 搭建属于您自己的 AI 应用,也欢迎大家踊跃在评论区批评、指正、吐槽、谩骂~</p>
<p>在这篇狗尾续貂的教程中,会为大家介绍:在 AI 应用开发者最熟悉的 Dify 平台上,如何借助 OceanBase seekdb 的力量,大幅简化应用开发过程中的多组件部署复杂度,同时提高向量混合搜索的能力。</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418568-999542428.png" >
</p>
<p>本文共分为三个部分,大家可以选择性地进行阅读:</p>
<ul>
<li>第一部分是简单介绍 Agentic RAG 多组件依赖的痛点,以及 Dify v1.10.1 版本对应的解决方案。</li>
<li>第二部分是如何配置 Dify 的元数据库 / 向量数据库为 OceanBase seekdb,以达到快速简化 Dify 多组件部署复杂度,和提高 AI 应用依赖的向量数据库混合检索效果的目的。</li>
<li>第三部分是如何通过 Dify x OceanBase seekdb 快速构建 AI 应用。</li>
</ul>
<h1 id="背景"><strong>背景</strong></h1>
<h2 id="传统的-agentic-rag-的痛点"><strong>传统的 Agentic RAG 的痛点</strong></h2>
<p>传统的 Agentic RAG 依赖关系型数据库 + 向量数据库 + 全文检索多个异构组件,导致运维复杂、数据同步困难、一致性风险高。在典型实践中,为了支撑测试环境和生产环境的稳定运行,用户往往需要同时管理和协调以下几大组件:</p>
<ul>
<li>关系型数据库,主要用于存储用户、应用配置、Agent 任务状态、知识库文档的元数据,这些是强事务性、结构化的业务数据。</li>
<li>向量数据库,负责存储 Context Chunks 经过 Embedding Model 向量化后的高维向量。这是实现语义搜索的基础,让 Agent 能理解文本的深层含义。</li>
<li>全文检索,负责构建知识库内容的倒排索引,以支持基于关键词的稀疏检索。这保证了用户或 Agent 能进行精确的文本匹配或模糊搜索。</li>
</ul>
<p>这些组件各自在其领域内都是成熟、专业的产品方案。但一旦被组合成一个应用的数据层,随之而来的就是巨大的运维压力和成本。你需要为每套系统独立管理备份、升级、监控。任何一个环节出问题,都可能导致整个 Agentic RAG 链路的全局性故障。系统越复杂,人力投入就越大,风险越高。</p>
<h2 id="dify-v1101-版本1"><strong>Dify v1.10.1 版本</strong><sup><strong>[1]</strong></sup></h2>
<p>作为业界领先的开源智能体平台,Dify 在国内企业应用中已获得广泛部署。然而,由于官方此前缺乏 MySQL 兼容支持,大多数企业被迫在源码层面进行定制改造,导致维护困难且难以及时反馈社区。为解决 Dify 部署维护复杂度高及 MySQL 兼容性问题,OceanBase 开源团队与顺丰 AI 技术平台组基于 OceanBase 强大的 SQL 兼容能力,联合完成了 Dify MySQL 兼容开发,为社区及企业用户提供开箱即用的解决方案,显著降低部署运维成本。</p>
<p>在解决了 MySQL 兼容性问题后,Dify 也开始思考更深层次的架构优化。OceanBase 在提供 MySQL 兼容性的同时,也具备将元数据、向量和全文索引能力集于一身的能力,这为解决多组件架构带来的 Scale 复杂性、实现架构简化提供了新的思路。因此,在日前发布的 v1.10.1 这一版本中,Dify 开始尝试 一体化数据库,并选择了 OceanBase 作为首个实践对象。</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418616-200301733.png" >
</p>
<p>从 Dify v1.10.1 版本开始,Dify 正式兼容和支持 MySQL / OceanBase / seekdb 作为 Dify 的元数据库,极大地便利了广大的 MySQL 技术栈用户。在元数据库和向量数据库的配置选项中,新增了基于 OceanBase 一体化数据库及 OceanBase AI 原生数据库 seekdb,用以简化 Agentic RAG 部署复杂度。</p>
<p>同时,还支持将 OceanBase / seekdb 用于对业务元数据、语义向量和全文索引进行统一的存储和检索,实现了数据层的彻底精简,确保事务一致性,极大简化运维负担。</p>
<ul>
<li>MetaDB 层:<br>
Dify 已适配 MySQL 型 MetaDB,引入 <code>DB_TYPE</code>,一套迁移脚本兼容 PostgreSQL / MySQL / OceanBase,OceanBase / seekdb 可以直接当 Dify 元数据库用。</li>
<li>向量 & 检索层:<br>
OceanBase 已经是 Dify 官方 VectorStore:支持向量检索、Hybrid Search(向量+全文)、metadata 过滤、score 阈值控制,并有多语言 fulltext parser 选项。</li>
<li>运行环境 & 质量:<br>
Docker Compose 里有专门的 OB profile,起容器即可用;CI 里有真机 OB 实例跑向量相关测试保障。</li>
</ul>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418579-1007600858.png" >
</p>
<p>接下来将为您介绍:如何配置 Dify 的元数据库 / 向量数据库为 OceanBase seekdb,以及如何通过 Dify 快速构建 AI 应用。</p>
<h1 id="替换-dify-依赖的元数据库--向量数据库"><strong>替换 Dify 依赖的元数据库 / 向量数据库</strong></h1>
<h2 id="前置要求-prerequisites"><strong>前置要求 (Prerequisites)</strong></h2>
<p>在开始之前,请确保您的环境满足以下要求:</p>
<ul>
<li>Container Runtime: Docker & Docker Compose</li>
<li>Git: Version control tool</li>
</ul>
<h2 id="部署-dify"><strong>部署 Dify</strong></h2>
<h3 id="克隆-dify-代码"><strong>克隆 Dify 代码</strong></h3>
  1. <code >git clone https://github.com/langgenius/dify.git
  2. cd dify/docker
  3. cp .env.example .env
  4. </code>
复制代码
<h3 id="配置-seekdb-为-dify-依赖的数据库-apply-configuration"><strong>配置 seekdb 为 Dify 依赖的数据库 (Apply Configuration)</strong></h3>
<h4 id="情况-1--将-seekdb-仅作为元数据库"><strong>情况 1 : 将 seekdb 仅作为元数据库</strong></h4>
<p>修改 <code>.env</code> 文件:</p>
  1. <code >DB_TYPE=mysql
  2. DB_USERNAME=root
  3. DB_HOST=seekdb
  4. DB_PORT=2881
  5. DB_DATABASE=test
  6. COMPOSE_PROFILES=${VECTOR_STORE:-weaviate},seekdb
  7. </code>
复制代码
<h4 id="情况-2--将-seekdb-仅作为向量数据库"><strong>情况 2 : 将 seekdb 仅作为向量数据库</strong></h4>
<p>修改 <code>.env</code> 文件:</p>
  1. <code >VECTOR_STORE=oceanbase
  2. OCEANBASE_VECTOR_HOST=seekdb
  3. OCEANBASE_VECTOR_USER=root
  4. COMPOSE_PROFILES=seekdb,${DB_TYPE:-postgresql}
  5. </code>
复制代码
<h4 id="情况-3--将-seekdb-作为元数据库和向量数据库推荐"><strong>情况 3 : 将 seekdb 作为元数据库和向量数据库(推荐)</strong></h4>
<p>修改 <code>.env</code> 文件:</p>
  1. <code >DB_TYPE=mysql
  2. DB_USERNAME=root
  3. DB_HOST=seekdb
  4. DB_PORT=2881
  5. DB_DATABASE=test
  6. VECTOR_STORE=oceanbase
  7. OCEANBASE_VECTOR_HOST=seekdb
  8. OCEANBASE_VECTOR_USER=root
  9. COMPOSE_PROFILES=seekdb
  10. </code>
复制代码
<h2 id="启动服务-start-dify"><strong>启动服务 (Start Dify)</strong></h2>
<p>使用 Docker Compose 构建并启动 Dify 服务:</p>
  1. <code >cd dify/docker
  2. docker compose up -d
  3. </code>
复制代码
<p>预期看到类似的输出。</p>
  1. <code >liboyang@Desktop-of-Zlatan docker % docker compose up -d
  2. [+] Running 72/72
  3. ✔ web Pulled
  4. ✔ sandbox Pulled
  5. ✔ worker_beat Pulled
  6. ✔ ssrf_proxy Pulled
  7. ✔ worker Pulled
  8. ✔ nginx Pulled
  9. ✔ redis Pulled
  10. ✔ api Pulled
  11. ✔ plugin_daemon Pulled
  12. ✔ seekdb Pulled
  13. [+] Running 12/12
  14. ✔ Network docker_default             Created
  15. ✔ Network docker_ssrf_proxy_network  Created
  16. ✔ Container docker-sandbox-1         Started
  17. ✔ Container docker-redis-1           Started
  18. ✔ Container docker-ssrf_proxy-1      Started
  19. ✔ Container docker-web-1             Started
  20. ✔ Container seekdb                   Healthy
  21. ✔ Container docker-plugin_daemon-1   Started
  22. ✔ Container docker-worker_beat-1     Started
  23. ✔ Container docker-worker-1          Started
  24. ✔ Container docker-api-1             Started
  25. ✔ Container docker-nginx-1           Started
  26. </code>
复制代码
<p>如果在执行 <code>docker compose up -d</code> 时遇到类似于 <code>Get "[https://registry-1.docker.io/v2/"](https://registry-1.docker.io/v2/" "https://registry-1.docker.io/v2/"") </code>的网络超时错误,可以尝试在 docker 的配置文件中增加 registry-mirrors 配置 Docker 镜像加速,然后重新执行 <code>docker compose up -d</code> 命令。</p>
  1. <code >{
  2.   "max-concurrent-downloads": 10,
  3.   "max-concurrent-uploads": 5,
  4.   "registry-mirrors": [
  5.     "https://mirror.ccs.tencentyun.com",
  6.     "https://registry.docker-cn.com",
  7.     "https://docker.mirrors.ustc.edu.cn",
  8.     "https://hub-mirror.c.163.com",
  9.     "https://docker.1panel.live",
  10.     "https://docker.1ms.run",
  11.     "https://dytt.online",
  12.     "https://lispy.org",
  13.     "https://docker.xiaogenban1993.com",
  14.     "https://docker.yomansunter.com",
  15.     "https://666860.xyz",
  16.     "https://a.ussh.net",
  17.     "https://hub.rat.dev",
  18.     "https://docker.m.daocloud.io"
  19.   ]
  20. }
  21. </code>
复制代码
<p>使用<code>docker ps</code>可以看一下各个容器的状态,启动后应该能看到各个容器都正常启动。</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418862-1764658294.png" >
</p>
<p>容器启动后会自动执行 Dify 元数据库的初始化和迁移,此步骤大约耗时 1 ~ 2 分钟。</p>
<p>通过以下三个命令查看 <code>api</code> 服务的日志,三个容器会有一个获得锁去执行迁移任务。在任一容器中看到 <code>Database migration successful!</code> 关键字,即可以确认迁移成功。</p>
  1. <code >docker logs -f docker-api-1
  2. docker logs -f docker-worker-1
  3. docker logs -f docker-worker_beat-1
  4. </code>
复制代码
<p>另外两个容器中可能会有<code>Database migration skipped</code>,表示在该容器中跳过了数据库结构迁移,如果没有其他<code>ERROR</code>信息,则说明可以正常打开 Dify 界面了。</p>
<h2 id="验证和安装-verification"><strong>验证和安装 (Verification)</strong></h2>
<ol>
<li>访问 Dify 控制台: 打开浏览器访问 <code>http://localhost</code>(或您的服务器 IP)。</li>
</ol>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418574-1512630518.png" >
</p>
<ol>
<li>创建账号: 通过 <code>http://localhost/install</code> 注册管理员账号并登录。</li>
<li>测试向量能力:创建一个知识库 (Knowledge Base),上传文档并观察切片与索引过程。如果能够成功嵌入 (Embedding) 并检索,说明 SeekDB 向量存储配置成功。第一次创建知识库之前还需要配置 API KEY,详细步骤会在下面的 “通过 Dify 构建 AI 应用” 部分为大家介绍。</li>
<li>感兴趣的老师,还可以通过 <code>mysql -h127.0.0.1 -P2881 -uroot -Dtest -pxxxxx</code>连接 seekdb(-p 后的密码为在 <code>.env</code> 文件里配置的密码),进而通过 <code>show databases;</code> 以及 <code>show tables;</code> 观察知识库中文档对应的表结构。</li>
</ol>
<h1 id="通过-dify-构建-ai-应用"><strong>通过 Dify 构建 AI 应用</strong></h1>
<p>以下内容会为大家介绍如何使用阿里云百炼的模型服务,快速通过 Dify x OceanBase seekdb 构建一个基础应用。已经熟悉 Dify 的老师可以直接忽略。</p>
<h2 id="开通阿里云百炼模型调用服务并获取-api-key"><strong>开通阿里云百炼模型调用服务并获取 API KEY</strong></h2>
<p>首先,我们需要注册<strong>阿里云百炼</strong><sup><strong>[2]</strong></sup>账号,开通模型调用服务并获取 API Key。</p>
<p>说明:</p>
<p>这里仅仅是以百炼模型为例(主要是因为第一次注册和使用时,可以白嫖很多免费额度),并不对任何模型服务进行推荐。</p>
<p>Dify 平台支持的模型种类非常丰富,大家可以按需选择适合自己的大模型服务。</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418581-1413249744.png" >
</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418868-1370441561.png" >
</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143419031-2005317316.png" >
</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418594-18250261.png" >
</p>
<h2 id="在-dify-中设置模型供应商和系统模型"><strong>在 Dify 中设置模型供应商和系统模型</strong></h2>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418598-1521727828.png" >
</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418896-21192257.png" >
</p>
<p>输入你刚才获得的 API Key 即可。</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418968-37759018.png" >
</p>
<h2 id="创建-knowledge知识库"><strong>创建 Knowledge(知识库)</strong></h2>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418547-1973252812.png" >
</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143419041-780740245.png" >
</p>
<p>索引方式选择“高质量”。</p>
<p>可以选择版本最高的 embedding 模型,例如 text-embedding-v4。</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418902-703738045.png" >
</p>
<p>文档会在此完成嵌入处理。</p>
<p>知识库创建完成后,点击 “前往文档”,可以看到该知识库中的文档列表。</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418925-636241874.png" >
</p>
<p>然后就可以测试召回效果了。</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418945-1644656210.png" >
</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418573-1814294848.png" >
</p>
<h2 id="创建-chatbot对话应用"><strong>创建 ChatBot(对话应用)</strong></h2>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418672-735519926.png" >
</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418983-1047068462.png" >
</p>
<p>在应用中可以选择添加刚刚创建的知识库。</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143419009-1763909530.png" >
</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418604-1119501728.png" >
</p>
<p>之后就可以进行调试和预览了。</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143419205-2054664175.png" >
</p>
<h2 id="发布应用"><strong>发布应用</strong></h2>
<p>点击应用详情右上角的 “发布” 下面的 “运行” 按钮,会打开该应用的专属页面。</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418596-1638298029.png" >
</p>
<p>自此,你已经通过 Dify + OceanBase seekdb 搭建了你自己的 LLM 应用平台和智能体应用。</p>
<p>
<img alt="" loading="lazy" data-src="https://img2024.cnblogs.com/blog/3648227/202512/3648227-20251211143418598-1258356566.png" >
</p>
<p>如果你是在服务器上部署的 Dify,也可以将该应用的链接分享给身边的朋友,让他们也一起来试用一下。</p>
<h1 id="whats-more-"><strong>What's more ?</strong></h1>
<p>如果搭建的 AI 应用需要依赖 OceanBase 的分布式、高可用等特性,则可以将 Dify 中依赖的数据库从 seekdb 替换为 OceanBase。</p>
<p>配置方式如下:</p>
<h2 id="克隆-dify-代码-1"><strong>克隆 Dify 代码</strong></h2>
  1. <code >git clone https://github.com/langgenius/dify.git
  2. cd dify/docker
  3. cp .env.example .env
  4. </code>
复制代码
<h2 id="配置-oceanbase-为-dify-依赖的数据库-apply-configuration"><strong>配置 OceanBase 为 Dify 依赖的数据库 (Apply Configuration)</strong></h2>
<h3 id="情况-1--将-oceanbase-仅作为元数据库"><strong>情况 1 : 将 oceanbase 仅作为元数据库</strong></h3>
<p>修改 <code>.env</code> 文件:</p>
  1. <code >DB_TYPE=mysql
  2. DB_USERNAME=root@test
  3. DB_HOST=oceanbase
  4. DB_PORT=2881
  5. DB_DATABASE=test
  6. COMPOSE_PROFILES=${VECTOR_STORE:-weaviate},oceanbase
  7. </code>
复制代码
<h3 id="情况-2--将-oceanbase-仅作为向量数据库"><strong>情况 2 : 将 oceanbase 仅作为向量数据库</strong></h3>
<p>修改 <code>.env</code> 文件:</p>
  1. <code >VECTOR_STORE=oceanbase
  2. </code>
复制代码
<h3 id="情况-3--将-oceanbase-作为元数据库和向量数据库"><strong>情况 3 : 将 oceanbase 作为元数据库和向量数据库</strong></h3>
<p>修改 <code>.env</code> 文件:</p>
  1. <code >DB_TYPE=mysql
  2. DB_USERNAME=root@test
  3. DB_HOST=oceanbase
  4. DB_PORT=2881
  5. DB_DATABASE=test
  6. VECTOR_STORE=oceanbase
  7. COMPOSE_PROFILES=oceanbase
  8. </code>
复制代码
<p><strong>参考资料</strong></p>
<p>[1] Dify v1.10.1 版本: <em>https://github.com/langgenius/dify/releases/tag/1.10.1</em></p>
<p>[2] 阿里云百炼: <em>https://bailian.console.aliyun.com/#/home</em></p><br>来源:程序园用户自行投稿发布,如果侵权,请联系站长删除<br>免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册