📌 新手提示:本文结尾提供了一键部署脚本(Windows / macOS / Linux 通用),帮你把 Dify 完整装起来,配好模型就能动手搭应用。

前言

前两篇文章我们聊的是"用代码调 API"(Claude API / DeepSeek API)和"用框架写程序"(LangChain RAG)——适合喜欢写代码的同学。但如果你不想写代码,或者你想在一个可视化界面里快速把应用搭出来、直接复用成熟组件,那 Dify 是你的菜。

Dify 是一个用于构建 AI 应用的开源平台(GitHub 46k+ 星):网页界面 + 拖拽编排,不写一行代码就能做出聊天机器人、知识库问答、自动化工作流、Agent(能调用工具的 AI 助手)……做完还能一键发布成网页应用,或用 API 接入你自己的系统。

一句话定位:

写代码搭 AI 应用 = 自己买菜做饭;用 Dify 搭 AI 应用 = 用厨房智能炒菜锅——功能覆盖面 90%,上手只要十分钟。

本教程面向零基础读者,走完四步:

  1. 用 Docker 一键部署 Dify(自托管,数据完全归你)
  2. 接入大模型(一个 Key 搞定)
  3. 拖拽做出第一个聊天机器人
  4. 挂上你自己的知识库(RAG 能力内置)

官方文档:https://docs.dify.ai/zh-hans(中文);GitHub:https://github.com/langgenius/dify(社区版开源)。

一、Dify 能做什么(先看能力地图)

官方首页点名的核心能力:

  • 聊天机器人:对话式应用,配上系统提示词(给 AI 立人设)就是客服/助理
  • Agent 编排:AI 可以调用工具(查数据库、发邮件、传 API),不止"聊天",还能"办事"
  • Agentic 工作流:可视化流程编排,条件分支、循环、多步调度都拖出来
  • 知识库(基于自有数据的应用):上传 PDF/Word/网页,自动切分向量化,聊天时"现查现答"——这正是 RAG(Retrieval-Augmented Generation,检索增强生成,“给 AI 塞专属资料、让它只依据资料作答"的技术),Dify 把它做成了上传即用,不用写任何代码
  • 插件扩展:官方插件市场,扩展工具和模型
  • 发布方式:一键发布为 Web 应用(独立链接),或通过 API 集成到你的系统

二、部署 Dify(社区版,Docker 一键装)

Dify 社区版完全开源、数据自持。部署需要 Docker(容器技术,可以理解成"一键打包运行软件的盒子”)与 Docker Compose(管理多个容器组合的工具)。

门槛(官方要求):CPU ≥ 2 核,内存 ≥ 4 GB(Dify 全家桶包含数据库、向量库、缓存等 10+ 个容器)。云服务器或个人电脑满足即可。

打开终端执行四步:

# 1. 拉取并进入官方部署目录(会自动 git clone 最新发行版)
git clone --branch "$(curl -s https://api.github.com/repos/langgenius/dify/releases/latest | jq -r .tag_name)" https://github.com/langgenius/dify.git
cd dify/docker

# 2. 复制环境变量模板(.env 是 Dify 的配置文件)
cp .env.example .env

# 3. 启动全部服务(首次会拉取镜像,需要几分钟到十几分钟)
docker compose up -d

# 4. 查看状态,容器全部 UP 即成功
docker compose ps

没装 Docker?Windows 装 Docker Desktop(WSL2 后端)、Linux/macOS 装 Docker Engine 即可。文末脚本会替你检查并引导。

国内 clone GitHub 慢:把第 1 步的 https://github.com/ 换成 https://ghfast.top/https://github.com/(镜像前缀)。文末脚本已内置。

启动完成后:

  • 浏览器打开http://localhost/install(初始化:设置管理员邮箱和密码)——如果部署在云服务器,把 localhost 换成你的服务器 IP(记得放行 80 端口)
  • 再次访问http://localhost,用刚才的账号登录

三、接入大模型(整个平台的"大脑")

登录后第一件事:添加模型供应商——不接模型,Dify 只是个空壳。

入口:右上角头像 →「设置」→「模型供应商」。Dify 支持几十家模型服务商,其中最通用的就是 OpenAI-API 兼容格式——这代表你不需要绑定任何一家:DeepSeek、Ollama 本地模型、以及国内的各种 API 中转站,只要提供「API 地址 + API Key + 模型名」,都能接进来。

以国内直连的云间 API 中转站为例(https://cloudzone-api.cyou/,OpenAI 兼容格式):注册拿到 Key 后,在模型供应商页选择 OpenAI-API 兼容类,填入:

配置项填什么
API Key云间 API 控制台复制的 Key
API Base URLhttps://cloudzone-api.cyou/v1(以控制台显示为准)
模型名字gpt-5.5 / deepseek-v4-pro / claude-sonnet-5(服务支持的模型名)

保存后点「模型测试」,能正常回复就说明接好了——之后创建的任何应用都能从下拉框里直接选这个模型。

国内为什么要用中转站?官方 OpenAI/Claude 需要海外信用卡且国内不可直连;中转站一把 Key 管全部模型、按 token 精确计费(token 是模型处理文本的最小单位),注册即用。Dify 里加的 10 个模型,可能是 10 个不同厂商,但都走同一把 Key。

四、创建第一个聊天机器人(拖拽三分钟)

  1. 首页点「创建应用」→ 选「聊天助手」→ 起个名字
  2. 左侧「提示词编排」面板,在"系统提示词"里写下人设,例如:你是 CleanResolver 的客服小澈,回答简洁友好
  3. 右上角绑定模型:选你在上一步添加的模型
  4. 右侧对话框直接试用——已经能聊了!

真正动手点的进阶:

  • 添加上下文:编排面板里点「添加功能」→ 勾选"知识库"→(去「知识库」页上传你的 PDF/Word/TXT,Dify 自动切分向量化)→ 在编排里引用它——你的机器人立刻拥有了"只依据你的资料回答"的能力(这一整套就是 RAG)
  • 添加工具:勾选"Agent"模式,AI 就能调用你授权的工具(比如搜索、发消息),自动决定"什么时候用什么工具"
  • 工作流:对逻辑要求高的场景,切到「工作流」模式,把节点拖成一张流程图

五、发布与集成

点右上角「发布」:

  • Web 应用:生成一个独立链接,发给任何人直接用(还能自定义外观)
  • API 访问:每个应用自动有独立 API Endpoint(地址)与 API Key,你的程序/网站可以调用——和我们在前几篇学的 API 调用完全同一套套路(OpenAI 兼容格式)

六、常见问题

现象原因与解决
http://localhost/install 打不开容器没起来:docker compose ps 看 Status;首次启动要在 up -d 后等 1-2 分钟
内存不足(云服务器常见)Dify 全家桶需要 ≥4GB 内存;小机器可换更轻量的单容器部署(镁光,见官方文档)或直接用 Dify Cloud 托管版
80 端口被占.env 里的 EXPOSE_NGINX_PORT 为其他端口(如 8080),改完 docker compose up -d 重启
模型测试失败 401Key 填错 / Base URL 填错 / 模型名服务不支持——逐项核对上节表格
发消息一直转圈模型供应商服务不可达:先用 curl 测中转地址通不通(curl https://cloudzone-api.cyou/v1/models 带 Key),再回 Dify

升级到新版本:

cd dify/docker
git pull
docker compose down
docker compose up -d

升级后记得对照各 .env.example 检查 .env 是否有新增配置项(官方升级文档会说明)。

尾声

到这你已经拥有一个自托管的 AI 应用开发平台:模型接好、机器人聊起来、知识库挂上、工作流搭起来——全程没写一行代码

再往后走两个方向:一是把应用调得更"产出级"(提示词打磨、工作流分支、数据接入);二是让 AI “办事”(Agent + 工具),Dify 的插件市场也有很多现成方案。

如果你还没配模型 Key,顺手在云间 API(https://cloudzone-api.cyou/)注册一个吧——Dify 的模型供应商设置里填它的 OpenAI 兼容地址就行了,Claude / GPT / DeepSeek / GLM / Kimi 一个账号全管,按 token 精确计费,国内直连无门槛。有疑问也欢迎在评论区交流。


附:一键部署脚本

不方便下载的同学可以直接复制下方完整源码,新建文本文档粘贴后改后缀为 .sh(macOS/Linux/WSL)或 .ps1(Windows)运行。也可以下载现成文件:

macOS / Linux / WSL(.sh)

#!/usr/bin/env bash
set -u
# ============================================================
#  Dify 零代码 AI 应用开发 一键脚本(macOS / Linux / WSL)
#  公开源码,欢迎审查 —— 不放心可先复制给 AI 判断
#  默认配置:云间 API 中转站(https://cloudzone-api.cyou/)
#  前置要求:Docker + Docker Compose;CPU ≥ 2 核,内存 ≥ 4GB
# ============================================================

GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; CYAN='\033[0;36m'; NC='\033[0m'
info()  { echo -e "${GREEN}[INFO]${NC} $1"; }
warn()  { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; }
step()  { echo -e "${CYAN}[STEP]${NC} $1"; }

CLOUDZONE_URL="https://cloudzone-api.cyou"

detect_network() {
  step "检测网络环境(国内 / 国外)..."
  if curl -fsI --max-time 5 "https://claude.ai" >/dev/null 2>&1; then
    info "可直连 claude.ai,判定为海外网络"
    echo "overseas"
  else
    warn "无法直连 claude.ai,判定为国内网络环境(将自动切换国内镜像)"
    echo "domestic"
  fi
}

check_docker() {
  step "检查 Docker 与 Docker Compose..."
  if ! command -v docker >/dev/null 2>&1; then
    error "未找到 docker。请先安装 Docker:"
    echo "  · Windows:安装 Docker Desktop(启用 WSL2 后端)https://www.docker.com/products/docker-desktop/"
    echo "  · macOS:安装 Docker Desktop https://www.docker.com/products/docker-desktop/"
    echo "  · Linux:https://docs.docker.com/engine/install/ 按发行版安装"
    return 1
  fi
  if ! docker compose version >/dev/null 2>&1; then
    error "docker compose 不可用(需要 Compose v2)。请升级 Docker 后重试。"
    return 1
  fi
  info "Docker:$(docker --version 2>&1);Compose:$(docker compose version 2>&1)"
  return 0
}

clone_dify() {
  local net="$1"
  if [ -d "dify/docker" ]; then
    info "检测到 dify/ 目录已存在,跳过 clone"
    return 0
  fi
  step "克隆 Dify 仓库(约 1-3 分钟,视网络而定)..."
  local repo="https://github.com/langgenius/dify.git"
  if [ "$net" = "domestic" ]; then
    repo="https://ghfast.top/https://github.com/langgenius/dify.git"
  fi

  if git clone --depth 1 "$repo" 2>/dev/null; then
    info "clone 成功"
    return 0
  fi
  warn "主源失败,回退备用源..."
  if git clone --depth 1 "https://ghfast.top/https://github.com/langgenius/dify.git" 2>/dev/null; then
    info "备用源 clone 成功"
    return 0
  fi
  error "clone 失败。请手动执行:git clone https://ghfast.top/https://github.com/langgenius/dify.git 后重新运行本脚本。"
  return 1
}

start_dify() {
  step "启动 Dify 全部服务(首次拉镜像可能耗时 5-15 分钟)..."
  cd dify/docker || return 1

  if [ ! -f ".env" ]; then
    info "创建 .env(复制官方模板;.env 是 Dify 的配置文件,可后续修改端口等)"
    cp .env.example .env
  fi

  if docker compose up -d; then
    info "容器已启动"
  else
    warn "首次启动失败,等待 10 秒后重试一次..."
    sleep 10
    if ! docker compose up -d; then
      error "docker compose up 失败。请执行 cd dify/docker && docker compose up 查看详细报错。"
      return 1
    fi
  fi

  step "等待服务就绪(检查容器状态)..."
  docker compose ps
  return 0
}

configure_hint() {
  step "模型 Key 提示(部署完成后在 Dify 里配置模型)..."
  echo ""
  echo "Dify 部署好后需要接入大模型 Key 才能创建应用。默认推荐云间 API 中转站:"
  echo "  · OpenAI 兼容格式,Dify 模型供应商直接填 Base URL 即可"
  echo "  · 香港节点国内直连,Claude/GPT/DeepSeek/GLM 等 90+ 模型一把 Key 全管"
  echo ""
  echo "是否现在打开注册页获取 Key?"
  echo "  Y - 立即跳转至 ${CLOUDZONE_URL}"
  echo "  N - 直接跳过(用我自己的 Key)"
  read -r -p "请选择 [Y/N]: " choice
  if [ "${choice:-N}" = "Y" ] || [ "${choice:-N}" = "y" ]; then
    if command -v xdg-open >/dev/null 2>&1; then
      xdg-open "$CLOUDZONE_URL" >/dev/null 2>&1
    elif command -v open >/dev/null 2>&1; then
      open "$CLOUDZONE_URL" >/dev/null 2>&1
    else
      warn "无法自动打开浏览器,请手动访问:$CLOUDZONE_URL"
    fi
    echo "拿到 Key 后,到 Dify「设置 → 模型供应商」填入:"
    echo "  API Base URL : https://cloudzone-api.cyou/v1(以控制台显示为准)"
    echo "  API Key      : 刚复制的 sk-... Key"
    echo ""
  else
    info "已跳过。回到 Dify 设置页添加你自己的模型供应商即可。"
  fi
}

main() {
  echo "============================================"
  echo "  Dify 零代码 AI 应用开发 一键脚本"
  echo "  适用于 macOS / Linux / WSL"
  echo "  默认接入:云间 API 中转站"
  echo "============================================"
  echo ""

  local NET
  NET=$(detect_network)

  if ! check_docker; then
    error "Docker 环境不满足,脚本终止。请先安装 Docker(见上方指引)后重跑。"
    exit 1
  fi

  if ! clone_dify "$NET"; then
    exit 1
  fi

  if ! start_dify; then
    error "Dify 启动失败,脚本终止。请按上方提示手动排查。"
    exit 1
  fi

  configure_hint

  echo ""
  echo "============================================"
  info "全部完成!"
  echo "  首次部署:浏览器打开 http://localhost/install 初始化管理员"
  echo "  日常登录:http://localhost (云服务器请换成你的 IP,并放行 80 端口)"
  echo "  模型配置:登录后右上角头像 → 设置 → 模型供应商"
  echo "============================================"
}

main "$@"

Windows(.ps1)

Windows 运行 .ps1 若提示执行策略限制:打开 PowerShell 输入 Set-ExecutionPolicy -Scope Process Bypass 后回车,再运行脚本。-Scope Process 仅对当前窗口生效,关掉即恢复,不会改动系统全局策略(系统默认限制来自安全设计,不要为了省事永久 Bypass)。

# ============================================================
#  Dify 零代码 AI 应用开发 一键脚本(Windows PowerShell)
#  公开源码,欢迎审查 -- 不放心可先复制给 AI 判断
#  默认配置:云间 API 中转站(https://cloudzone-api.cyou/)
#  前置要求:Docker Desktop(WSL2 后端);CPU >= 2 核,内存 >= 4GB
# ============================================================
$ErrorActionPreference = "Stop"

function Write-Info  { Write-Host "[INFO] $args" -ForegroundColor Green }
function Write-Warn  { Write-Host "[WARN] $args" -ForegroundColor Yellow }
function Write-Err   { Write-Host "[ERROR] $args" -ForegroundColor Red }
function Write-Step  { Write-Host "[STEP] $args" -ForegroundColor Cyan }

$CLOUDZONE_URL = "https://cloudzone-api.cyou"

function Detect-Network {
    Write-Step "检测网络环境(国内 / 国外)..."
    try {
        $null = Invoke-WebRequest -Uri "https://claude.ai" -Method Head -TimeoutSec 5 -UseBasicParsing
        Write-Info "可直连 claude.ai,判定为海外网络"
        return "overseas"
    } catch {
        Write-Warn "无法直连 claude.ai,判定为国内网络环境(将自动切换国内镜像)"
        return "domestic"
    }
}

function Check-Docker {
    Write-Step "检查 Docker 与 Docker Compose..."
    if (-not (Get-Command docker -ErrorAction SilentlyContinue)) {
        Write-Err "未找到 docker,请先安装 Docker Desktop:https://www.docker.com/products/docker-desktop/"
        Write-Host "  安装后请重启 Docker Desktop(确保 WSL2 后端已启用),并新开 PowerShell 再运行本脚本。"
        return $false
    }
    $composeOK = $true
    try {
        $null = docker compose version 2>$null
    } catch {
        $composeOK = $false
    }
    if (-not $composeOK) {
        Write-Err "docker compose 不可用(需要 Compose v2)。请升级 Docker Desktop 后重试。"
        return $false
    }
    Write-Info "Docker 与 Docker Compose 已就绪。"
    return $true
}

function Clone-Dify {
    param([string]$Net)
    if (Test-Path "dify/docker") {
        Write-Info "检测到 dify/ 目录已存在,跳过 clone"
        return $true
    }
    Write-Step "克隆 Dify 仓库(约 1-3 分钟,视网络而定)..."
    $repo = if ($Net -eq "domestic") {
        "https://ghfast.top/https://github.com/langgenius/dify.git"
    } else {
        "https://github.com/langgenius/dify.git"
    }

    if (git clone --depth 1 $repo 2>$null) {
        Write-Info "clone 成功"
        return $true
    }
    Write-Warn "主源失败,回退备用源..."
    if (git clone --depth 1 "https://ghfast.top/https://github.com/langgenius/dify.git" 2>$null) {
        Write-Info "备用源 clone 成功"
        return $true
    }
    Write-Err "clone 失败。请手动执行:git clone https://ghfast.top/https://github.com/langgenius/dify.git 后重新运行本脚本。"
    return $false
}

function Start-Dify {
    Write-Step "启动 Dify 全部服务(首次拉镜像可能耗时 5-15 分钟)..."
    Set-Location "dify/docker"

    if (-not (Test-Path ".env")) {
        Write-Info "创建 .env(复制官方模板;.env 是 Dify 的配置文件,可后续修改端口等)"
        Copy-Item ".env.example" ".env"
    }

    $ok = $false
    try {
        docker compose up -d
        if ($LASTEXITCODE -eq 0) { $ok = $true }
    } catch { }
    if (-not $ok) {
        Write-Warn "首次启动失败,等待 10 秒后重试一次..."
        Start-Sleep -Seconds 10
        try {
            docker compose up -d
            if ($LASTEXITCODE -eq 0) { $ok = $true }
        } catch { }
    }
    if (-not $ok) {
        Write-Err "docker compose up 失败。请执行 cd dify/docker && docker compose up 查看详细报错。"
        return $false
    }

    Write-Step "等待服务就绪(检查容器状态)..."
    docker compose ps
    return $true
}

function Configure-Hint {
    Write-Step "模型 Key 提示(部署完成后在 Dify 里配置模型)..."
    Write-Host ""
    Write-Host "Dify 部署好后需要接入大模型 Key 才能创建应用。默认推荐云间 API 中转站:"
    Write-Host "  · OpenAI 兼容格式,Dify 模型供应商直接填 Base URL 即可"
    Write-Host "  · 香港节点国内直连,Claude/GPT/DeepSeek/GLM 等 90+ 模型一把 Key 全管"
    Write-Host ""
    Write-Host "是否现在打开注册页获取 Key?"
    Write-Host "  Y - 立即跳转至 $CLOUDZONE_URL"
    Write-Host "  N - 直接跳过(用我自己的 Key)"
    $choice = Read-Host "请选择 [Y/N]"
    if ($choice -eq "Y" -or $choice -eq "y") {
        try {
            Start-Process "$CLOUDZONE_URL"
        } catch {
            Write-Warn "无法自动打开浏览器,请手动访问:$CLOUDZONE_URL"
        }
        Write-Host "拿到 Key 后,到 Dify「设置 → 模型供应商」填入:"
        Write-Host "  API Base URL : https://cloudzone-api.cyou/v1(以控制台显示为准)"
        Write-Host "  API Key      : 刚复制的 sk-... Key"
        Write-Host ""
    } else {
        Write-Info "已跳过。回到 Dify 设置页添加你自己的模型供应商即可。"
    }
}

Write-Host "============================================"
Write-Host "  Dify 零代码 AI 应用开发 一键脚本"
Write-Host "  适用于 Windows(PowerShell)"
Write-Host "  默认接入:云间 API 中转站"
Write-Host "============================================"
Write-Host ""

$net = Detect-Network

if (-not (Check-Docker)) {
    Write-Err "Docker 环境不满足,脚本终止。请先安装 Docker Desktop 后重跑。"
    exit 1
}

if (-not (Clone-Dify -Net $net)) {
    exit 1
}

if (-not (Start-Dify)) {
    Write-Err "Dify 启动失败,脚本终止。请按上方提示手动排查。"
    exit 1
}

Configure-Hint

Write-Host ""
Write-Host "============================================"
Write-Info "全部完成!"
Write-Host "  首次部署:浏览器打开 http://localhost/install 初始化管理员"
Write-Host "  日常登录:http://localhost (云服务器请换成你的 IP,并放行 80 端口)"
Write-Host "  模型配置:登录后右上角头像 → 设置 → 模型供应商"
Write-Host "============================================"