一键部署 Dify + MCP Server,高效开发 AI 智能体应用

作者:黄刚(泽尘) |孙小涵(子照)|赵庆杰(卢令)|王霄霄(丛霄)

前言

全球 AI 开发者正在见证一场 "AI 智能体革命"。

从 2024 年 Dify.ai 发布开源框架 Dify以来,到全球开发者基于其快速构建的智能客服、企业知识库、AI 营销助手等场景应用,GitHub 上已有超过 2.3 万个 AI 应用项目诞生。

如今,MCP 的协议也异军突起,大量基于 MCP 协议的 MCP Server 应用涌上市场,它解决了各个模块之间交互不统一的问题,让一切现有传统应用就像 USB 接口一样,随意在 AI 智能体上插拔使用。 那如何快速的基于 MCP Server 构建出一个 AI 应用?我们大胆的猜测,Dify + MCP Server 将是一个完美的结合,因为 Dify 有强大的编排能力,再加上 MCP Server 标准的接口协议,在 Dify 平台上,只需要进行简单的拖拽就可以快速的构建一个生产级别的 AI 智能体应用。

本次我们选择了阿里云 Serverless 应用引擎(下面简称 SAE)来部署 Dify、MCP 应用,并且期望通过 Dify 快速编排 MCP Server 应用快速智能体,实现一套"免运维、全托管,生产级"的 AI 智能体解决方案。

在我们的方案里,将致力于解决以下问题:

  1. 低成本:面向算力收费,不额外收费其它费用,并且基于 SAE 自身提供的弹性能力,可以更从容的应对业务流量高峰。

  2. 高可用:通过多可用区部署,快弹等 SAE 自有的优势,帮助 Dify 从社区版应用快速升级为生产级别的应用。

  3. 全链路无侵入监控:基于 SAE 提供的免费无侵入监控方案,让业务低成本的全链路监控你的 AI 应用。

  4. 简单易用:1 分钟完成 Dify,MCP Server 的部署,5分钟基于Dify 编排 MCP 快速构建 AI 应用。

  5. 单租安全:可独立部署 Dify 应用到自己的 VPC 内,用户业务的数据不会流出 VPC,保证数据绝对安全。

本文将着重介绍如何通过 SAE 快速搭建 Dify AI 研发平台,依托 Serverless 架构提供全托管、免运维的解决方案,高效开发 AI 智能体应用。

(PS:SAE 还支持 ++快速搭建 Manus AI、MCP Server 等 AI 场景应用 ++,本文选取部署较为复杂的 Dify 应用来作为演示,有其他 AI 场景应用托管的需求可以联系 钉钉群:32874633)

在 SAE 上快速部署 Dify AI 研发平台

基于 saectl 模板一键部署

下面以实际例子,演示如何使用 saectl 工具,通过一组 YAML 模板在 SAE 上轻松部署 Dify。

前置准备

第一步:saectl 工具安装

参考:如何安装与配置saectl工具_Serverless 应用引擎(SAE)-阿里云帮助中心,完成 saectl 工具安装

第二步:前置资源准备

通过模版创建应用前,请确保您拥有以下资源(Dify 部署依赖):

  • 数据库

    • Redis 数据库

    • Postgre SQL 数据库

    • 向量数据库

  • 存储

    • NAS 文件存储
  • 网络

    • NAT 网关

saectl 模版部署

第一步:准备 SAE Dify 模板

下载 SAE Dify 模板仓库,仓库结构如下,包含所有 Dify 应用组件所需的 K8S 资源定义。

替换 YAML 模板中变量为您自己的资源,以 dify-credential 为例:

bash 复制代码
apiVersion: v1
data:
  DB_USERNAME: ${pg_database_username}  # PGSQL 数据库用户名
  DB_PASSWORD: ${pg_database_password}  # PGSQL 数据库密码
  PGVECTOR_USER: ${vector_database_username}  # PGVector数据库用户名
  PGVECTOR_PASSWORD: ${vector_database_password}  # PGVector 数据库密码
  REDIS_USERNAME: ${redis_database_username}  # Redis 数据库用户名
  REDIS_PASSWORD: ${redis_database_password}  # Redis 数据库密码
kind: Secret
metadata:
  name: dify-credentials
  namespace: dify
type: Opaque
第二步:通过 saectl 工具一键部署 Dify 至 SAE

YAML 文件变量替换完成后,执行 ./install.sh,脚本会自动部署并检查上述 K8S 资源,并打印 Dify 公网访问地址。

登录 SAE 控制台,可以看到已创建的 Dify 应用组件。

使用 Dify 服务

打开浏览器,在地址栏中输入上一步骤打印出的 <math xmlns="http://www.w3.org/1998/Math/MathML"> E X T E R N A L − I P : {EXTERNAL-IP}: </math>EXTERNAL−IP:{PORT},即可访问在 SAE 上一键部署的 Dify 服务。

基于 SAE 应用中心一键部署

SAE 应用中心为用户提供了 Dify 应用模板,您只需要在控制台填写表单,我们会为您自动创建并运行部署流水线,将 Dify 一键部署至 SAE。

前置准备

同上,需要准备 Dify 应用依赖的数据库、存储、网络资源:

  • 数据库

    • Redis 数据库

    • Postgre SQL 数据库

  • 向量数据库

  • 存储

    • NAS 文件存储
  • 网络

    • NAT 网关

SAE 应用中心部署

第一步:在 SAE 应用中心选择 Dify 社区版
第二步:填写 Dify 社区版部署的参数表单
第三步:提交表单,等待部署完成

使用 Dify 服务

同「基于 saectl 模版一键部署」

打开浏览器,在地址栏中输入控制台日志打印出的 <math xmlns="http://www.w3.org/1998/Math/MathML"> E X T E R N A L − I P : {EXTERNAL-IP}: </math>EXTERNAL−IP:{PORT},即可访问在 SAE 应用中心一键部署的 Dify 服务。

使用 Dify 编排 MCP 应用

第一步: 在 SAE 上部署 MCP Server

  • 基于 MCP 官方提供的 Python SDK 中的一个简单 SSE 协议的 MCP Server

github.com/modelcontex...

它实现了 SSE 远端协议的一个具备网页抓取工具的服务,其中 SseServerTransport 是 SDK 中封装了 SSE 的交互,请求路径 /sse完成连接建立,请求路径 /messages路径是客户端服务端消息推送。

python 复制代码
if transport == "sse":
    from mcp.server.sse import SseServerTransport
    from starlette.applications import Starlette
    from starlette.routing import Mount, Route

    sse = SseServerTransport("/messages/")

    async def handle_sse(request):
        async with sse.connect_sse(
            request.scope, request.receive, request._send
        ) as streams:
            await app.run(
                streams[0], streams[1], app.create_initialization_options()
            )

        starlette_app = Starlette(
            debug=True,
            routes=[
                Route("/sse", endpoint=handle_sse),
                Mount("/messages/", app=sse.handle_post_message),
            ],
        )
python 复制代码
# 使用 app.call_tool() 装饰器定义 call_tool 工具调用的方法
@app.call_tool()
async def fetch_tool(
    name: str, arguments: dict
) -> list[types.TextContent | types.ImageContent | types.EmbeddedResource]:
    if name != "fetch":
        raise ValueError(f"Unknown tool: {name}")
        if "url" not in arguments:
            raise ValueError("Missing required argument 'url'")
    return await fetch_website(arguments["url"])

# 使用 app.list_tools() 装饰器定义列出所有工具的方法
@app.list_tools()
async def list_tools() -> list[types.Tool]:
    return [
        types.Tool(
            name="fetch",
            description="Fetches a website and returns its content",
            inputSchema={
                "type": "object",
                "required": ["url"],
                "properties": {
                    "url": {
                        "type": "string",
                        "description": "URL to fetch",
                    }
                },
            },
        )
    ]

将上述 MCP Server 打包为镜像,部署到 SAE 上,可以直接用 saectl 一键部署,支持按照暴露 CLB 类型的 MCP Service 地址,SAE 平台内置了应用的监控、日志等,围绕应用提供了的全套运维体系,在 SAE 界面可以看到应用已经创建出来,并且处于 Running 状态,日志标准输出显示服务器运行中。

第二步: 在 SAE Dify 平台创建 Agent ,并使用 MCP 协议进行工具调用

  • 在 Dify 的插件中,选择 "Agent 策略",选择官方的"Dify Agent 部署" (注:Dify 暂时官方没有支持 MCP 协议,都是按照插件的形式由第三方开发者提供 )
  • 创建一个工作流应用,添加 Agent 节点,并对 Agent 节点进行配置,选择 ReAct 的模式,并配置 MCP 工具方法。这是 Dify 内部封装了一层 MCP 服务的方法调用。

在 Dify 工具市场中安装 MCP 工具,然后回到工作流界面,在 MCP 服务配置这里填写 SAE MCP Server 绑定的 CLB 地址,作为访问地址。

json 复制代码
{
    "mcp_server": {
        "url": "http://8.135.243.229:80/sse",
        "headers": {

        },
        "timeout": 5,
        "sse_read_timeout": 300
    }
}

第三步: 测试 Agent

点击运行, Dify 提供了调试功能,以可视化的形式看到 Agent 的思考运行过程:

第四步: 查看 SAE MCP Server 应用输出日志

可以看到 MCP 客户端和服务端交互了 List Tool 和 Call Tool 等方法。

总结:云上托管 Dify 的核心挑战与 SAE 解决方案

在企业级应用中,Dify 作为一款功能强大的 LLM 应用研发平台,其云上托管需要应对弹性伸缩、高可用性和快速迭代等核心挑战。阿里云 Serverless 应用引擎(SAE)凭借其原生 Serverless 架构和企业级服务能力,为这些问题提供了高效解决方案。

(如果您对于产品有更多建议或者对 Dify 云端托管有更多想法可以加入钉钉群(群号:32874633)与我们取得联系。)

CI/CD 与快速迭代:加速开发与交付效率

挑战:

Dify 用户需频繁迭代模型、优化工作流或修复问题。传统 CI/CD 流程复杂,且部署环境一致性难以保证,导致迭代周期长、风险高。

SAE 解决方案:

  1. 深度集成 CI/CD 工具链
  • 支持与主流 DevOps 工具(如 GitLab、GitHub、Jenkins、阿里云 CodePipeline)无缝对接,实现代码提交 → 构建 → 镜像推送 → 自动部署的全链路自动化。
  1. 一键部署与灰度发布
  • 通过 SAE 控制台或 API 实现一键部署,结合 金丝雀发布(Canary Release) 功能,将新版本逐步推广至 10%、50%、100% 流量,降低上线风险。
  1. 滚动更新与无损升级
  • 支持滚动部署策略,在更新过程中保持服务高可用,避免因版本切换导致的中断。
  1. 环境一致性与镜像管理
  • 通过镜像仓库(如阿里云 ACR)统一管理应用版本,确保开发、测试、生产环境配置一致,减少"环境差异"导致的故障。

弹性能力:适配动态资源需求

挑战:

Dify 平台需支持开发者高频次的应用测试及多场景部署,资源需求波动显著(如突发的模型推理任务或团队协作高峰期)。若资源固定分配,可能导致成本浪费或性能瓶颈。

SAE 解决方案:

  1. 自动弹性扩缩容
  • 基于负载的自动伸缩:通过 HPA(Horizontal Pod Autoscaler)根据 CPU、内存或自定义指标(如 API 调用频率)动态调整 Dify 实例数量,应对突发流量或密集计算任务。
  1. 冷启动优化
  • SAE 的镜像预热与层共享技术,将容器启动时间缩短至秒级,加速开发环境初始化或突发请求响应。
  1. 按需付费模式
  • Serverless 架构按实际资源使用计费,避免为闲置资源付费,降低企业级 Dify 部署的长期成本。

高可用:保障平台稳定运行与数据安全

挑战:

Dify 作为企业级 LLM 应用基础设施,需确保持续可用性。任何节点故障或区域级中断可能导致开发流程中断、模型训练数据丢失或 API 服务不可用。

SAE 解决方案:

  1. 多可用区容灾部署
  • 自动将 Dify 实例分布于多个可用区(AZ),实现跨 AZ 的流量负载均衡与故障无缝切换,规避单点故障风险。
  1. 健康检查与自愈机制
  • 实时监控 Dify 实例健康状态,自动重启异常容器并触发告警,确保服务高可用性。
  1. 数据持久化与备份
  • 结合阿里云存储服务(如 OSS、NAS、RDS、Tair),确保模型数据、配置信息等内容的持久化存储与跨地域容灾,满足企业级数据安全要求
相关推荐
康de哥6 小时前
MCP Unity + Claude Code 配置关键步骤
unity·mcp·claude code
田井中律.8 小时前
MCP协议
mcp
通义灵码18 小时前
Qoder 支持通过 DeepLink 添加 MCP Server
人工智能·github·mcp
酩酊仙人2 天前
fastmcp构建mcp server和client
python·ai·mcp
kwg1262 天前
本地搭建 OPC UA MCP 服务
python·agent·mcp
小小工匠2 天前
LLM - 从通用对话到自治智能体:Agent / Skills / MCP / RAG 三层架构实战
agent·rag·skill·mcp
小小工匠2 天前
LLM - 将业务 SOP 变成 AI 能力:用 Skill + MCP 驱动 Spring AI 应用落地不完全指南
人工智能·skill·spring ai·mcp
Esun_R3 天前
当 LLM 开始连接真实世界:MCP 的原理、通信与工程落地
node.js·openai·mcp
chao_6666663 天前
【MCP】Claude Code for VS Code 配置阿里云 MCP 工具教程
阿里云·云计算·claude·mcp
熊猫钓鱼>_>4 天前
AI 加 CloudBase 帮我从零快速打造儿童英语故事学习乐园
ide·人工智能·ai·mcp·codebuddy·cloudbase·ai toolkit