掘金 人工智能 14小时前
Dify + OceanBase + MCP:三剑合璧,轻松构建 RAG 应用
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文详细介绍了如何使用Dify、OceanBase和MCP从零构建一个功能完备的RAG(Retrieval Augmented Generation)应用。通过实践案例,逐步指导读者部署环境、创建知识库、构建聊天助手并进行调试,最终将Dify应用转化为MCP Server,实现与其他平台的集成和协作,扩展了AI应用的使用场景。

🐳 使用Dify平台构建RAG应用,Dify提供友好的图形化界面,方便开发者编排和部署AI应用和工作流。

🐬 OceanBase作为向量数据库,用于存储RAG应用所需的知识库内容,并使用PostgreSQL作为关系型数据库存储元数据,Dify最新版v1.5.0版本支持。

💡 将Dify应用转换为MCP Server,使其能够被其他MCP客户端调用,扩展了AI应用的集成与协作能力,从而拓展更多使用场景。

🧩 通过部署OceanBase桌面版、Dify和配置模型供应商,可以索引知识库并创建对话应用,实现RAG应用的基本功能。

在 AI 应用开发领域,检索增强生成(Retrieval Augmented Generation,RAG)已成为构建智能问答、文档分析等场景的核心技术。通过 RAG,AI 应用能够结合现有知识库,在生成回答时引入外部信息,从而为用户提供更准确、更智能的响应。本文将通过一个实践案例,展示如何使用 Dify、OceanBase 和 MCP,从零开始构建一个功能完备的 RAG 应用。

Dify 是一个开源的 LLM 应用开发平台,它提供了友好的图形化界面,让开发者可以快速编排和部署 AI 应用和工作流。

OceanBase 是由阿里巴巴和蚂蚁集团自主研发的分布式关系型数据库,专为大规模数据处理、高并发访问及金融级可用性场景而设计。它不仅支持传统的结构化数据管理与事务处理,从 4.3.3 版本开始,还原生支持向量数据类型,满足 AI 及语义检索等新兴应用需求。

MCP(Model Context Protocol,模型上下文协议) 是由 Anthropic 公司于 2024 年 11 月推出并开源的开放协议,旨在实现大语言模型(LLM)与外部工具、数据源的高效交互。MCP 通过标准化的接口,让 AI 系统能够实时访问和调用数据库、API 及其他服务,从而打破“数据孤岛”,提升 AI 应用的实时性、可操作性和协作能力。

部署 OceanBase

OceanBase 提供了多种部署方式,例如通过 Docker、Kubernetes、OBD(OceanBase Deployer)和 OceanBase 桌面版等。为了方便实验,本文将使用 OceanBase 桌面版来部署 OceanBase。

注意:OceanBase 桌面版仅适用于学习或测试场景,请不要应用于生产环境。

安装 OceanBase 桌面版,可以参考该文档:www.oceanbase.com/docs/common…

OceanBase 桌面版安装完成后,将看到如下界面:

默认情况下,OceanBase 会创建两个租户 systest,我们将在 test 租户下创建 Dify 使用的向量数据库。第一次需要为 test 租户设置密码。

数据库管理 页面中,新增一个名为 rag 的数据库。

部署 Dify

在本文中,我们将使用 OceanBase 作为 Dify 的向量数据库,用于存储 RAG 应用所需的知识库内容。与此同时,Dify 还需要一个关系型数据库来存储元数据。目前 Dify 官方仓库(最新版为 v1.5.0)仅支持 PostgreSQL,尚不支持 MySQL。

OceanBase 社区基于 Dify v0.14.2 分支进行了改造,使其支持使用兼容 MySQL 协议的数据库来存储结构化数据,相关代码和文档在 oceanbase-devhub/dify 仓库中。如果你希望同时使用 OceanBase 作为向量数据库和关系型数据库,可以参考该版本进行部署。

此前,OceanBase 社区也曾向 Dify 官方提交支持 MySQL 的 PR(Make Dify compatible with MySQL database:github.com/langgenius/… ),但该 PR 未被 Dify 社区采纳。为了能够使用 Dify 的最新功能(例如 MCP Server 插件),本文将基于官方最新的 v1.5.0 版本,分别使用 OceanBase 和 PostgreSQL 作为向量数据库和关系型数据库。

启动 Dify 服务器最简单的方式是通过 Docker Compose。首先,克隆 Dify 仓库。进入 Dify 的 docker 目录,复制一份环境变量配置文件。

git clone https://github.com/langgenius/dify.gitcd difycd dockercp .env.example .env

然后,编辑 .env 文件,将 VECTOR_STORE 设置为 oceanbase,并填入 OceanBase 的连接信息。

VECTOR_STORE=oceanbaseOCEANBASE_VECTOR_HOST=198.19.249.160OCEANBASE_VECTOR_PORT=2881OCEANBASE_VECTOR_USER=root@testOCEANBASE_VECTOR_PASSWORD=<your_password>OCEANBASE_VECTOR_DATABASE=rag

OceanBase 的 IP 地址可以在 OceanBase 桌面版部署所使用的虚拟机中获取。在 macOS 上,OceanBase 桌面版是通过 OrbStack 启动虚拟机进行部署的。你可以在 OrbStack 的 Machines 界面点击 Terminal 按钮进入对应虚拟机,并通过 ip addr 命令查看其 IP 地址。

在输出信息中找到 eth0 网卡的 inet 地址,例如 198.19.249.160,这就是连接 OceanBase 所需要用到的 IP。

admin@oceanbase-desktop:~$ ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host proto kernel_lo        valid_lft forever preferred_lft forever2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000    link/ipip 0.0.0.0 brd 0.0.0.03: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000    link/sit 0.0.0.0 brd 0.0.0.04: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1000    link/tunnel6 :: brd :: permaddr a2c4:a96f:bb63::5: eth0@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000    link/ether a6:e9:47:13:6a:81 brd ff:ff:ff:ff:ff:ff link-netnsid 0    inet 198.19.249.160/24 metric 100 brd 198.19.249.255 scope global dynamic eth0       valid_lft 168908sec preferred_lft 168908sec    inet6 fd07:b51a:cc66:0:a4e9:47ff:fe13:6a81/64 scope global mngtmpaddr noprefixroute        valid_lft forever preferred_lft forever    inet6 fe80::a4e9:47ff:fe13:6a81/64 scope link proto kernel_ll        valid_lft forever preferred_lft forever

修改完环境变量配置后,执行以下命令启动 Dify 服务。

docker compose up -d

可选:Dify 的 docker-compose.yaml 文件中其实也包含了 OceanBase 的容器配置。但由于我们已经通过 OceanBase 桌面版完成了部署,因此可以选择将其中的 OceanBase 容器配置注释掉,避免启动一个多余的容器。

服务启动后,浏览器输入 http://localhost 即可访问 Dify 的 Web 界面。第一次登录需要设置用户名和密码。

设置模型供应商

点击右上角的头像,选择设置进入设置页面。

点击模型供应商,这里我选择将通义千问作为模型供应商。读者也可以自行选择其他模型供应商。

API Key 中填入通义千问的 API Key,然后点击 保存

选择默认的系统模型,这里主要需要设置系统推理模型Embedding 模型,大家可以根据自己的喜好自行选择。

索引知识库

完成模型设置后,接下来可以开始索引知识库了。回到首页,点击顶端的 知识库 标签页,进入知识库管理界面,点击创建知识库

选择导入已有文本,可以直接拖入文件进行索引。这里我上传了两篇关于大模型推理优化技术 Chunked Prefill 的论文。

然后设置文本的分段规则,这里可以保留默认设置。点击预览块可以在右侧预览分段后的结果。确认没问题后,点击 保存并处理

创建对话应用

点击工作室标签页,进入应用管理界面,点击创建空白应用

选择聊天助手,并填写应用名称。输入完成后点击创建按钮。

添加上一步索引的知识库作为聊天助手的上下文。然后可以在右侧聊天框里进行应用调试,例如询问什么是 Chunked Prefill?。从输出可以看到,AI 会根据文档内容生成回答,并附上引用的来源片段。

点击文件图标,可以看到具体引用的内容。

确认无误后,点击右上角的发布按钮。

然后就可以在聊天助手中进行提问了。

将 Dify 应用转换为 MCP Server

Dify 也可以作为一个 MCP Server,使你构建的 AI 应用能够被其他 MCP 客户端(如 Cursor、Windsurf、Cherry Studio 等)调用,从而拓展更多使用场景。mcp-server 插件由 Dify 社区贡献,是一种扩展类型插件。安装后,可将任意 Dify 应用转化为符合 MCP 标准的服务端点,供外部 MCP 客户端直接访问。

在 Dify 的 Marketplace 中选择 MCP server 插件进行安装。

接下来,设置 MCP Server,App 选择上一步发布的聊天助手应用。

按照 MCP 规范,我们需要为工具提供一个清晰的输入模式。对于聊天 Dify 应用,确保在输入模式中包含一个 query 字段,格式如下:

{    "name": "search_paper",    "description": "Search information from Paper.",    "inputSchema": {        "type": "object",        "properties": {            "query": {                "type": "string",                "description": "The keywords for search."            }        },        "required": [            "query"        ]    }}

配置完 MCP Server 后,就可以得到一个 MCP Server 的端点,Dify 提供了 SSE 和 Streamable HTTP 两种端点,这里我们选择 /mcp 后缀的 Streamable HTTP 端点。

将端点 URL 复制到 MCP Client,这里我使用 Cherry Studio。

配置完成后,在聊天界面选择配置的 Dify MCP Server。

接着我们尝试询问一个与知识库内容相关的问题。但调用 Dify MCP Server 后并没有得到预期的回答,展开返回结果可以看到仅返回了 <think>。这是因为我此前选择的推理模型 qwen3-32b 采用了混合思维模式,该模式允许 Qwen3 根据用户需求在“深度思考”和“快速响应”之间灵活切换。看起来是因为模型进入了深度思考模式,导致未能正常返回 Dify MCP Server 的调用结果。

解决方法就是将推理模型切换为没有深度思考模式的模型,例如 qwen-turbo

现在再次询问一个与知识库内容相关的问题,就能从 Dify MCP Server 得到预期的回答了。

总结

本文详细介绍如何结合 Dify、OceanBase 和 MCP 从零开始构建一个功能完备的 RAG 应用。教程涵盖了从部署环境、创建知识库、到构建聊天助手并进行调试的全过程。最后,文章还演示了如何将 Dify 应用转化为一个标准的 MCP Server,使其能被外部客户端调用,从而极大地扩展了 AI 应用的集成与协作能力。

参考资料

欢迎关注

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

RAG Dify OceanBase MCP
相关文章