【OceanBase实践】基于 Dify + OceanBase 打造你的AI专属伴侣

前言

在人工智能快速发展的今天,智能体已经不再是科幻小说中的产物,而是逐步渗透到我们生活和工作的各个方面。从智能助手到自动化决策系统,AI的应用正在改变着我们与技术互动的方式。为了打造高效、个性化的智能体平台,选择合适的技术栈至关重要。

本篇文章将带您走进 Dify 和 OceanBase 的世界,探索如何结合这两者的优势,构建一个专属于您的智能体平台。Dify 作为一款高效的机器学习平台,能够帮助您在复杂数据中提取出有价值的信息,而 OceanBase 则作为一款高可扩展、高性能的分布式数据库,能够为大规模数据存储和实时计算提供强有力的支持。通过 Dify 和 OceanBase 的结合,我们可以为不同业务场景量身定制智能体解决方案,满足多样化的需求。

接下来,我们将深入探讨如何将 Dify 和 OceanBase 融合,打造一个智能体平台,从而赋能您的业务创新,推动行业进步。

一、什么是向量检索文本嵌入(Text Embedding)?

文本嵌入是一种将文本转换为数值向量的技术。这些向量能够捕捉文本的语义信息,使计算机可以"理解"和处理文本的含义。具体来说:

  • 文本嵌入将词语或句子映射到高维向量空间中的点。
  • 在这个向量空间中,语义相似的文本会被映射到相近的位置。
  • 向量通常由数百个数字组成(如 512 维、1024 维等)。
  • 可以用数学方法(如余弦相似度)计算向量之间的相似度。
  • 常见的文本嵌入模型包括 Word2Vec、BERT、BGE 等。

在开发 RAG 应用时,我们通常需要将文本数据进行嵌入处理转换为向量之后存储在向量数据库中,而其他结构化数据存储在关系型数据库中。OceanBase 4.3.3 版本开始支持将向量作为一种字段类型在关系表中进行存储,使得向量和传统标量数据能够有序、高效地存储在 OceanBase 这一款数据库中。

OceanBase 提供了存储、索引、检索 Embedding 向量数据的能力。具体包括:

核心功能描述
向量数据类型支持最大 16,000 维的 float 向量数据存储。
向量索引支持精确搜索和近似最近邻搜索。支持 L2 距离、内积和余弦相似度计算。支持 HNSW 索引,索引列最大维度为 2000。
向量搜索 SQL 运算符支持向量加、减、乘、比较、聚合等基础运算操作符。

二、实验架构说明

image-20241208100904101

架构说明:将文档以向量的形式批量存储在 OceanBase 数据库内。用户通过 UI 界面提问,程序使用模型将提问内容嵌入成为向量并在数据库中检索相似向量,得到相似向量对应的文档内容后,应用将它们会同用户提问一起发送给 LLM,LLM 会根据提供的文档生成更加准确的回答。

三、动手实验操作演示

3.1 获取 OceanBase 数据库

  • 注册并开通 OBCloud 实例

注册链接:https://www.oceanbase.com/free-trial

image-20241207224405183

  • 获取数据库实例连接串

image-20241207224447711

Copy如下连接字符串的代码。

image-20241207224526511

  • 创建多个数据库

image-20241207224741794

3.2 克隆Github项目

针对 Dify 的 0.12.1 版本进行了 MySQL 协议兼容的修改,并且上传到了我们 fork 的代码仓库中。大家网络条件好的话推荐克隆 Github 上的版本,否则克隆 Gitee 上的版本。

$ yum install -y git(若没有git,则直接执行该命令安装即可)

$ git clone https://github.com/oceanbase-devhub/dify.git
或
$ git clone https://gitee.com/oceanbase-devhub/dify.git

PS:为保证 dify 目录的代码是最新的状态,需要执行 git pull 命令,拉取最新的代码。

$ cd dify

$ git pull

image-20241207221118427

3.3 安装并启动Docker服务

$ yum install -y docker

$ systemctl start docker && systemctl enable docker && systemctl status docker

3.4 安装Docker Compose 服务

# To download and install the Docker Compose standalone, run:
$ curl -SL https://github.com/docker/compose/releases/download/v2.30.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

# Apply executable permissions to the standalone binary in the target path for the installation.
$ chmod +x /usr/local/bin/docker-compose

# docker-compose version
Docker Compose version v2.30.3

3.5 拉取 Docker 镜像

进入到 dify 的工作目录中的docker目录下,执行docker-compose --profile workshop pull

$ cd docker

$ docker-compose --profile workshop pull

image-20241207221941389

3.6 修改环境变量

docker目录下存放着一个.env.example文件,其中包含了若干 Dify 运行所需的环境变量,我们需要把其中几个重要的配置项填写上。

[root@docker docker]# pwd
/root/dify/docker
[root@docker docker]# cat .env.example

docker/scripts 目录下提供了一个脚本 setup-env.sh 用来交互式地获取数据库连接信息,填入 .env 文件中并且完成数据库连接校验。

bash ./scripts/setup-env.sh

按照提示输入数据库连接信息即可,大致形式如下:

image-20241207225017536

如果在检测数据库连接步骤中,两个数据库都连接成功,则说明数据库连接信息填写正确,可以继续进行下一步。

image-20241207222317828

3.7 启动 Dify 容器组

使用下列命令启动 Dify 的容器组

docker-compose --profile workshop up -d

image-20241207222650193

3.8 查看 Dify 后端服务日志

$ docker logs -f docker-api-1

$ docker logs -f docker-worker-1

3.9 访问 Dify 应用

默认情况下,Dify 的前端页面会启动在本机的80端口上,也就是说可以通过访问当前机器的 IP 来访问 Dify 的界面。

① 如果在笔记本上运行的话,则直接在浏览器上访问localhost即可(或者是内网 IP);

② 如果在云服务器上部署 Dify,则需要访问服务器的公网 IP。

初次访问 Dify 应用会进入“设置管理员账户”的页面,设置完成后即可使用该账号登录。

image-20241207225839517

设置完管理员账号后,点击登录

image-20241207223752568

登录至Dify控制台, 完成搭建部署。

image-20241207223836029

3.10 开通阿里云百炼模型调用服务并获取 API KEY

注册链接🔗:https://bailian.console.aliyun.com/

注册完阿里云百炼账号后,点击开通服务

image-20241130172018324

点击我已阅读并同意《模型管理服务协议》

image-20241130172051720

提示开通成功。

image-20241128145028862

接下来,我们获取API-KEY。

image-20241128145433948

创建API KEY。

image-20241128145521777

记录并保存下来。

image-20241130172142316

3.11 设置模型供应商和系统模型

image-20241207230052066

image-20241207230129054

设置完成模型供应商之后刷新网页,再向通义千问模型供应商中添加模型qwen-turbo-2024-11-01,如下图所示。

image-20241207230218740

设置完成模型供应商之后刷新网页,再向通义千问模型供应商中添加模型qwen-turbo-2024-11-01

image-20241207230412234

完成系统模型设置,将系统推理模型设置为qwen-turbo-2024-11-01,Embedding 模型设置为text-embedding-v3,最后点击保存

image-20241207230512353

3.12 创建知识库并上传文档

  • 克隆文档仓库

将 OceanBase 数据库的开源文档仓库克隆下来,作为数据来源。

git clone --single-branch --branch V4.3.4 https://github.com/oceanbase/oceanbase-doc.git ~/oceanbase-doc
# 如果您访问 Github 仓库速度较慢,可以使用以下命令克隆 Gitee 的镜像版本
git clone --single-branch --branch V4.3.4 https://gitee.com/oceanbase-devhub/oceanbase-doc.git ~/oceanbase-doc
  • 将指定文档上传到知识库中

回到首页,顶端中部的“知识库”标签页,进入知识库管理界面,点击创建知识库。

image-20241207230707217

为了节省时间和模型服务调用量,仅处理 OceanBase 向量检索有关的几篇文档,这些文档相对于oceanbase-doc目录的相对路径是zh-CN/640.ob-vector-search,需要将这个目录下面所有的文档都上传。

image-20241207230759185

索引方式选择“高质量”,点击“保存并处理”。

image-20241207231020694

Dify 会提示知识库“已创建”,后续可能会看到某些文档已经在此处理完成。点击“前往文档”。

image-20241207231402680

等待数据处理完成。

image-20241208093304874

点击“前往文档”后会看到该知识库中的文档列表。

image-20241208093427229

完成。

image-20241208093716087

3.13 创建对话应用并选中知识库

点击“工作室”标签页,进入应用管理界面,点击“创建空白应用”。按照下图指引一步一步操作,创建出应用出来。

image-20241208093814532

image-20241208093928940

点击“上下文”卡片中的“添加”按钮,选中刚才我们创建的知识库并点击“添加”按钮。

image-20241208094025595

image-20241208094045634

在提示词的输入框中填写如下的提示词:

你是一个专注于回答 OceanBase 社区版问题的机器人。
你的目标是利用可能存在的历史对话和检索到的文档片段,回答用户的问题。
任务描述:根据可能存在的历史对话、用户问题和检索到的文档片段,尝试回答用户问题。如果用户的问题与 OceanBase 无关,则抱歉说明无法回答。如果所有文档都无法解决用户问题,首先考虑用户问题的合理性。如果用户问题不合理,需要进行纠正。如果用户问题合理但找不到相关信息,则表示抱歉并给出基于内在知识的可能解答。如果文档中的信息可以解答用户问题,则根据文档信息严格回答问题。

回答要求:
- 如果所有文档都无法解决用户问题,首先考虑用户问题的合理性。如果用户问题不合理,请回答:“您的问题可能存在误解,实际上据我所知……(提供正确的信息)”。如果用户问题合理但找不到相关信息,请回答:“抱歉,无法从检索到的文档中找到解决此问题的信息。请联系OceanBase的人工答疑以获取更多帮助。基于我的内在知识,可能的解答是……(根据内在知识给出可能解答)”。
- 如果文档中的信息可以解答用户问题,请回答:“根据文档库中的信息,……(严格依据文档信息回答用户问题)”。如果答案可以在某一篇文档中找到,请在回答时直接指出依据的文档名称及段落的标题(不要指出片段标号)。
- 如果某个文档片段中包含代码,请务必引起重视,给用户的回答中尽可能包含代码。请完全参考文档信息回答用户问题,不要编造事实,尤其是数据表名、SQL 语句等关键信息。
- 如果需要综合多个文档中的片段信息,请全面地总结理解后尝试给出全面专业的回答。
- 尽可能分点并且详细地解答用户的问题,回答不宜过短。

可以在右侧聊天框里进行应用调试,例如询问“请介绍一下 OceanBase 的向量功能”。

image-20241208101340868

点击应用详情右上角的“发布”下面的“运行”按钮,打开该应用的专属页面。

image-20241208102316324

至此,通过 Dify + OceanBase 搭建属于自己的AI专属伴侣。

四、参考链接

[1] https://docs.docker.com/compose/install/standalone/

[2] https://gitee.com/oceanbase-devhub/dify/blob/master/docs/dify@oceanbase-workshop.md

[3] https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001790535

### 比较 Dify、DeepSeek 和 Gemini 的特性和用途 #### 特性对比 对于 **Dify** 而言,该平台不仅支持构建简单的聊天应用程序的知识库和工作流,还提供了许多更复杂的功能等待探索[^1]。这表明它适合那些希望快速搭建基础对话系统的开发者,同时也为有更高需求的技术团队预留了扩展空间。 关于 **DeepSeek R1**, 这是一个可以被本地部署并与Dify集成起来以增强效率的产品[^2]。这意味着DeepSeek专注于提供高性能的搜索能力,并能够通过与其他工具(如Dify)相结合来实现更加丰富的应用场景。 至于 **Gemini**, 尽管这里没有具体提及此项目的细节,但从广泛认知来看,Gemini通常指的是谷歌推出的多模态大模型系列之一,其主要特点是强大的自然语言处理能力和图像理解能力,在AI驱动的内容创作和支持方面表现出色。 #### 使用场景分析 - 对于需要创建交互式客户服务解决方案的企业来说,**Dify** 提供了一个易于上手的选择,允许用户自定义知识库并设置自动化的工作流程。 - 如果目标是在企业内部署高效能搜索引擎,则可以选择 **DeepSeek R1** 并考虑将其与现有系统比如Dify相连接,从而获得更好的性能表现以及灵活性。 - 当涉及到复杂的多媒体数据分析任务时,像文本生成图片或是视频描述这样的操作,那么基于最新研究成果开发出来的 **Gemini** 可能会成为首选方案,因为它具备先进的多模态理解和生成能力。 ```python # 示例代码用于展示如何启动Docker容器中的Dify服务 import os def start_dify_service(): command = "docker compose up -d" working_directory = "./dify/docker/" try: os.chdir(working_directory) result = os.system(command) if result == 0: print("Successfully started Dify service.") else: print("Failed to start Dify service.") except Exception as e: print(f"An error occurred while starting the Dify service: {e}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云矩阵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值