找回密码
 立即注册
首页 业界区 科技 Dify + OceanBase + MCP:三剑合璧,轻松构建 RAG 应用 ...

Dify + OceanBase + MCP:三剑合璧,轻松构建 RAG 应用

时思美 昨天 16:00
「作者简介:程治玮,OceanBase 布道师,《Elasticsearch 实战》(第 2 版)译者」
首先为大家推荐这个 OceanBase 开源负责人老纪的公众号“老纪的技术唠嗑局”,会持续更新和 #数据库、#AI、#技术架构相关的各种技术内容。欢迎感兴趣的朋友们关注!
在 AI 应用开发领域,检索增强生成(Retrieval Augmented Generation,RAG)已成为构建智能问答、文档分析等场景的核心技术。通过 RAG,AI 应用能够结合现有知识库,在生成回答时引入外部信息,从而为用户提供更准确、更智能的响应。
本文将通过一个实践案例,展示如何使用OceanBase, Dify, 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 桌面版,可以参考该文档:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002866370
OceanBase 桌面版安装完成后,将看到如下界面:
1.png

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

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

部署 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:https://github.com/langgenius/dify/pull/8364 ),但该 PR 未被 Dify 社区采纳。为了能够使用 Dify 的最新功能(例如 MCP Server 插件),本文将基于官方最新的 v1.5.0 版本,分别使用 OceanBase 和 PostgreSQL 作为向量数据库和关系型数据库。
启动 Dify 服务器最简单的方式是通过 Docker Compose。首先,克隆 Dify 仓库。进入 Dify 的 docker目录,复制一份环境变量配置文件。
  1. git clone https://github.com/langgenius/dify.git
  2. cd dify
  3. cd docker
  4. cp .env.example .env
复制代码
然后,编辑 .env文件,将 VECTOR_STORE设置为 oceanbase,并填入 OceanBase 的连接信息。
  1. VECTOR_STORE=oceanbase
  2. OCEANBASE_VECTOR_HOST=198.19.249.160
  3. OCEANBASE_VECTOR_PORT=2881
  4. OCEANBASE_VECTOR_USER=root@test
  5. OCEANBASE_VECTOR_PASSWORD=<your_password>
  6. OCEANBASE_VECTOR_DATABASE=rag
复制代码
OceanBase 的 IP 地址可以在 OceanBase 桌面版部署所使用的虚拟机中获取。在 macOS 上,OceanBase 桌面版是通过OrbStack启动虚拟机进行部署的。你可以在 OrbStack 的 Machines界面点击 Terminal按钮进入对应虚拟机,并通过 ip addr命令查看其 IP 地址。
4.png

在输出信息中找到 eth0网卡的 inet地址,例如 198.19.249.160,这就是连接 OceanBase 所需要用到的 IP。
  1. admin@oceanbase-desktop:~$ ip addr
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  3.     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  4.     inet 127.0.0.1/8 scope host lo
  5.        valid_lft forever preferred_lft forever
  6.     inet6 ::1/128 scope host proto kernel_lo
  7.        valid_lft forever preferred_lft forever
  8. 2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
  9.     link/ipip 0.0.0.0 brd 0.0.0.0
  10. 3: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
  11.     link/sit 0.0.0.0 brd 0.0.0.0
  12. 4: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1000
  13.     link/tunnel6 :: brd :: permaddr a2c4:a96f:bb63::
  14. 5: eth0@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
  15.     link/ether a6:e9:47:13:6a:81 brd ff:ff:ff:ff:ff:ff link-netnsid 0
  16.     inet 198.19.249.160/24 metric 100 brd 198.19.249.255 scope global dynamic eth0
  17.        valid_lft 168908sec preferred_lft 168908sec
  18.     inet6 fd07:b51a:cc66:0:a4e9:47ff:fe13:6a81/64 scope global mngtmpaddr noprefixroute
  19.        valid_lft forever preferred_lft forever
  20.     inet6 fe80::a4e9:47ff:fe13:6a81/64 scope link proto kernel_ll
  21.        valid_lft forever preferred_lft forever
复制代码
修改完环境变量配置后,执行以下命令启动 Dify 服务。
  1. docker compose up -d
复制代码
可选:Dify 的 docker-compose.yaml文件中其实也包含了 OceanBase 的容器配置。但由于我们已经通过 OceanBase 桌面版完成了部署,因此可以选择将其中的 OceanBase 容器配置注释掉,避免启动一个多余的容器。
服务启动后,浏览器输入 http://localhost即可访问 Dify 的 Web 界面。第一次登录需要设置用户名和密码。
5.png

设置模型供应商

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

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

在 API Key中填入通义千问的 API Key,然后点击 保存。
8.png

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

索引知识库

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

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

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

创建对话应用

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

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

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

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

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

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

将 Dify 应用转换为 MCP Server

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

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

按照 MCP 规范,我们需要为工具提供一个清晰的输入模式。对于聊天 Dify 应用,确保在输入模式中包含一个 query字段,格式如下:
  1. {
  2.     "name": "search_paper",
  3.     "description": "Search information from Paper.",
  4.     "inputSchema": {
  5.         "type": "object",
  6.         "properties": {
  7.             "query": {
  8.                 "type": "string",
  9.                 "description": "The keywords for search."
  10.             }
  11.         },
  12.         "required": [
  13.             "query"
  14.         ]
  15.     }
  16. }
复制代码
配置完 MCP Server 后,就可以得到一个 MCP Server 的端点,Dify 提供了 SSE 和 Streamable HTTP 两种端点,这里我们选择 /mcp后缀的 Streamable HTTP 端点。
21.png

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

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

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

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

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

总结

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


  • 安装 OceanBase 桌面版
  • MySQL Authentication Plugin Issues on macOS
  • Dify MCP Plugin Hands-On Guide: Integrating Zapier for Effortless Agent Tool Calls
  • Turn Your Dify App into an MCP Server
  • Dify MCP server
老纪的技术唠嗑局 不仅希望能持续给大家带来有价值的技术分享,也希望能和大家一起为开源社区贡献力量。如果你对 OceanBase 开源社区认可,点亮一颗小星星 ✨ 吧!你的每一个Star,都是我们努力的动力~
https://github.com/oceanbase/oceanbase

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册