> For the complete documentation index, see [llms.txt](https://docs.clore.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.clore.ai/guides/guides_v2-zh/ai-ping-tai-yu-zhi-neng-ti/dify.md).

# Dify.ai 工作流平台

在 Clore.ai 上部署 Dify.ai——以 GPU 云价格，通过可视化界面构建可投入生产的 AI 工作流、RAG 流水线和智能体应用。

## 概览

[Dify.ai](https://github.com/langgenius/dify) 是一个开源的 LLM 应用开发平台，拥有 **114K+ GitHub 星标**。它将可视化工作流构建器、检索增强生成（RAG）流水线、智能体编排、模型管理以及一键 API 部署层整合到一个可自托管的技术栈中。

在 **Clore.ai** 你可以在租用的 GPU 服务器上运行完整的 Dify 技术栈——包括其 Postgres 数据库、Redis 缓存、Weaviate 向量存储、Nginx 反向代理、API worker 和 Web 前端——最低只需 **$0.07–0.21/小时** （RTX 3090/4090）。GPU 对 Dify 本身是可选的，但当你通过 Ollama 或 vLLM 后端集成本地模型推理时，它就变得至关重要。

**主要能力：**

* 🔄 **可视化工作流构建器** — 支持分支、循环和条件逻辑的拖放式 LLM 流水线
* 📚 **RAG 流水线** — 上传 PDF、URL、Notion 页面；分块 + 向量化 + 检索全部在 UI 中管理
* 🤖 **智能体模式** — 具备工具使用能力的 ReAct 和函数调用型智能体（网页搜索、代码解释器、自定义 API）
* 🚀 **以 API 为先** — 每个应用都会立即生成 REST 端点和 SDK 代码片段
* 🔌 **100+ 模型集成** — OpenAI、Anthropic、Mistral、Cohere，以及通过 Ollama/vLLM 使用的本地模型
* 🏢 **多租户** — 团队、工作区、RBAC、使用配额

***

## 需求

{% hint style="warning" %}
**Clore.ai 市场上未列出多 GPU 的 80GB 级机型。** 目前列出的最大配置是 4× RTX PRO 6000 Blackwell（每张 96GB，共 380GB）以及 8–11× RTX 5090（每张 32GB）。A100 / H200 / B200 容量可按 [裸机](https://clore.ai/bare-metal) 需求提供。部署前请查看 [GPU 价格与可用性](/guides/guides_v2-zh/ru-men-zhi-nan/pricing.md) 。
{% endhint %}

Dify 作为一个多容器 Docker Compose 技术栈运行。开发所需的最低可用服务器是仅 CPU 实例；对于包含本地模型推理的生产环境，你需要一台 GPU 节点。

| 配置                 | GPU             | 显存    | 系统内存   | 磁盘     | Clore.ai 价格                       |
| ------------------ | --------------- | ----- | ------ | ------ | --------------------------------- |
| **极小** （仅限 API 密钥） | 无 / CPU         | —     | 8 GB   | 30 GB  | \~$0.05/小时（CPU）                   |
| **标准**             | RTX 3080        | 10 GB | 16 GB  | 50 GB  | $0.05–0.19/小时                     |
| **推荐**             | RTX 3090 / 4090 | 24 GB | 32 GB  | 80 GB  | $0.07–0.21/小时                     |
| **生产环境 + 本地 LLM**  | A100 80 GB      | 80 GB | 64 GB  | 200 GB | [裸机](https://clore.ai/bare-metal) |
| **高吞吐量**           | H100 SXM        | 80 GB | 128 GB | 500 GB | \~$1.04/小时                        |

> **提示：** 如果你只使用云端 API 提供商（OpenAI、Anthropic 等），任何 2 核 CPU、8 GB 内存的实例都可以。只有在通过 Ollama 或 vLLM 运行本地模型时，GPU 才重要——请看 [GPU 加速](#gpu-acceleration) 下文。

### 磁盘说明

随着文档上传，Weaviate 和 Postgres 的数据会快速增长。请至少配置 **50 GB** 并通过 Clore.ai 的卷选项挂载持久存储。

***

## 快速开始

### 1. 租用一台 Clore.ai 服务器

访问 [clore.ai](https://clore.ai)，按你想要的 GPU 进行筛选，并部署一台具备以下条件的服务器：

* **Docker** 已预装（所有 Clore 镜像都包含它）
* 暴露端口 **80** 以及 **443** （如有需要，可在报价设置中添加自定义端口）
* 已启用 SSH 访问

### 2. 连接并准备服务器

```bash
# SSH 登录到你的 Clore 服务器
ssh root@<clore-server-ip> -p <ssh-port>

# 更新系统软件包
apt-get update && apt-get upgrade -y

# 验证 Docker 是否可用
docker --version
docker compose version   # 应该是 v2.x
```

### 3. 克隆 Dify 并启动

```bash
# 克隆仓库
git clone https://github.com/langgenius/dify.git
cd dify/docker

# 复制示例环境文件
cp .env.example .env

# （可选）在启动前编辑设置
nano .env

# 拉取所有镜像并在后台启动所有服务
docker compose up -d

# 在启动期间查看日志（首次运行需要 2-3 分钟）
docker compose logs -f
```

### 4. 验证所有服务是否正常

```bash
# 检查容器状态
docker compose ps

# 预期输出：
# 名称                    状态
# docker-api-1            正常运行（健康）
# docker-web-1            正常运行（健康）
# docker-worker-1         正常运行（健康）
# docker-nginx-1          正常运行
# docker-db-1             正常运行（健康）
# docker-redis-1          正常运行（健康）
# docker-weaviate-1       正常运行（健康）
# docker-sandbox-1        正常运行（健康）
```

### 5. 访问 Web 界面

打开浏览器并访问：

```
http://<clore-server-ip>:80
```

首次启动时，Dify 会重定向到设置向导以创建管理员账户。完成向导后登录。

***

## 配置

所有配置都位于 `dify/docker/.env`。以下是最重要的设置：

### 必要环境变量

```bash
# ── 密钥（请修改这些） ──────────────────────────────────────────────
SECRET_KEY=your-super-secret-key-change-this-immediately
# 生成一个强密钥：
# python3 -c "import secrets; print(secrets.token_hex(32))"

# ── 应用 URL ──────────────────────────────────────────────────────────
# 设置为你的服务器公网 IP 或域名
CONSOLE_WEB_URL=http://<clore-server-ip>
APP_WEB_URL=http://<clore-server-ip>

# ── 数据库（Postgres） ─────────────────────────────────────────────────────
DB_USERNAME=postgres
DB_PASSWORD=difyai123456          # 生产环境中请修改！
DB_HOST=db
DB_PORT=5432
DB_DATABASE=dify

# ── Redis ───────────────────────────────────────────────────────────────────
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=difyai123456       # 生产环境中请修改！

# ── 存储（默认使用本地磁盘） ─────────────────────────────────────────
STORAGE_TYPE=local
# 或使用兼容 S3 的存储：
# STORAGE_TYPE=s3
# S3_ENDPOINT=https://s3.amazonaws.com
# S3_BUCKET_NAME=your-dify-bucket
# S3_ACCESS_KEY=...
# S3_SECRET_KEY=...

# ── 默认 LLM 提供商 ─────────────────────────────────────────────────────
# 登录后可在 UI 中设置，或在此预先配置：
# OPENAI_API_KEY=sk-...
```

### 更改对外暴露的端口

默认情况下 Nginx 监听端口 **80**。要更改它：

```bash
# 在 docker-compose.yaml 中编辑 nginx 服务：
# ports:
#   - "8080:80"   ← 将 8080 改为你想要的主机端口

# 然后重启：
docker compose down && docker compose up -d
```

### 持久化数据卷

Dify 的 Compose 文件默认挂载这些卷：

```yaml
volumes:
  oradata:          # Postgres 数据
  redis_data:       # Redis AOF
  weaviate_data:    # 向量存储
  app_storage:      # 上传的文档和生成的文件
```

要备份：

```bash
# 先停止服务，再将 Docker 卷打包
docker compose stop
docker run --rm \\
  -v docker_oradata:/data \\
  -v $(pwd)/backups:/backup \\
  alpine tar czf /backup/postgres-$(date +%Y%m%d).tar.gz /data
docker compose start
```

***

## GPU 加速

Dify 的核心平台基于 CPU，但你可以通过集成 **Ollama** 或 **vLLM** 作为模型提供商来解锁本地模型推理——这两者都能从 GPU 中获得巨大收益。

### 选项 A：Ollama 侧车（最简单）

在同一台 Clore 服务器上与 Dify 一起运行 Ollama：

```bash
# 安装 Ollama
curl -fsSL https://ollama.com/install.sh | sh

# 拉取一个模型（例如 Llama 3 8B）
ollama pull llama3:8b

# 验证是否使用了 GPU
ollama run llama3:8b "Hello!"
nvidia-smi   # 应显示 ollama 进程正在使用显存
```

然后在 Dify UI → **设置 → 模型提供商 → Ollama**:

* 基础 URL： `http://localhost:11434`
* 选择你的模型并保存

> 完整的 Ollama 指南请参见 [language-models/ollama.md](/guides/guides_v2-zh/yu-yan-mo-xing/ollama.md).

### 选项 B：vLLM 侧车（高吞吐量）

```bash
# 将 vLLM 作为独立容器运行，并启用 GPU 直通
docker run -d \\
  --name vllm \
  --gpus all \\
  --runtime nvidia \\
  -p 8000:8000 \
  -v ~/.cache/huggingface:/root/.cache/huggingface \\
  -e HUGGING_FACE_HUB_TOKEN=<your-hf-token> \\
  vllm/vllm-openai:latest \
  --model mistralai/Mistral-7B-Instruct-v0.2 \\
  --dtype auto \\
  --max-model-len 4096

# 验证端点
curl http://localhost:8000/v1/models
```

然后在 Dify UI → **设置 → 模型提供商 → 兼容 OpenAI**:

* 基础 URL： `http://localhost:8000/v1`
* API 密钥： `dummy`
* 模型名称： `mistralai/Mistral-7B-Instruct-v0.2`

> 完整的 vLLM 配置请参见 [language-models/vllm.md](/guides/guides_v2-zh/yu-yan-mo-xing/vllm.md).

### 本地模型的 GPU 显存建议

| 模型                 | 所需显存   | 推荐的 Clore GPU   |
| ------------------ | ------ | --------------- |
| Llama 3 8B (Q4)    | 6 GB   | RTX 3060        |
| Llama 3 8B (FP16)  | 16 GB  | RTX 3090 / 4090 |
| Mistral 7B (Q4)    | 5 GB   | RTX 3060        |
| Llama 3 70B (Q4)   | 40 GB  | A100 40GB       |
| Llama 3 70B (FP16) | 140 GB | 2× H100         |

***

## 提示与最佳实践

### 在 Clore.ai 上优化成本

```bash
# 使用现货定价——Dify 的数据库状态保存在卷中
# 因此你可以低成本地停止/重启实例

# 在停止 Clore 实例之前，先导出数据库：
docker exec docker-db-1 pg_dump -U postgres dify > dify_backup_$(date +%Y%m%d).sql

# 压缩存储卷以便传输
tar czf dify_storage_$(date +%Y%m%d).tar.gz \\
  $(docker volume inspect docker_app_storage --format '{{.Mountpoint}}')
```

### 使用 Caddy 启用 HTTPS（推荐用于生产环境）

```bash
# 将 Caddy 添加到 docker-compose.yaml，或单独运行
docker run -d \\
  --name caddy \\
  --network docker_default \\
  -p 443:443 -p 80:80 \\
  -v $PWD/Caddyfile:/etc/caddy/Caddyfile \\
  -v caddy_data:/data \\
  caddy:latest

# Caddyfile 内容：
# your-domain.com {
#     reverse_proxy nginx:80
# }
```

### 为高负载扩展 worker

```bash
# 运行 4 个 celery worker，而不是 1 个
docker compose up -d --scale worker=4
```

### 监控资源使用情况

```bash
# 实时容器状态
docker stats

# GPU 利用率（如果使用本地模型）
watch -n1 nvidia-smi

# Dify 应用日志
docker compose logs -f api worker
```

### RAG 性能调优

* 设置 **分块大小** 设置为 512–1024 个 token，适用于大多数文档类型
* 启用 **父子检索** 用于数据集设置中的长文档
* 使用 **混合搜索** （关键词 + 向量）以提升技术内容的召回率
* 在低峰时段为文档建立索引，以避免 API 限流

***

## 故障排查

### 服务不断重启

```bash
# 检查出错服务的日志
docker compose logs --tail=50 api
docker compose logs --tail=50 worker

# 常见原因：SECRET_KEY 错误或数据库连接异常
# 确保 .env 中的 SECRET_KEY 已设置且唯一
grep SECRET_KEY .env
```

### 启动时出现“迁移失败”

```bash
# 手动运行数据库迁移
docker compose exec api flask db upgrade

# 如果失败，先检查 Postgres 是否处于健康状态
docker compose exec db pg_isready -U postgres
```

### Dify 无法连接到 Ollama

```bash
# Ollama 默认绑定到 127.0.0.1
# 将其改为监听所有接口：
OLLAMA_HOST=0.0.0.0 ollama serve

# 或者编辑 systemd 服务：
systemctl edit ollama
# 添加到 [Service] 下：
# Environment="OLLAMA_HOST=0.0.0.0"
systemctl restart ollama

# 从 Dify 容器内部测试：
docker compose exec api curl http://host.docker.internal:11434/api/tags
```

### 磁盘空间不足

```bash
# 检查卷大小
df -h
docker system df

# 删除未使用的镜像
docker image prune -a

# Weaviate 日志可能会变得很大——请轮转它们
docker compose exec weaviate truncate -s 0 /tmp/weaviate.log
```

### Weaviate 向量存储错误

```bash
# 重置 Weaviate（警告：会删除所有嵌入，需要重新索引）
docker compose stop weaviate
docker volume rm docker_weaviate_data
docker compose up -d weaviate

# 然后在 Dify UI → Datasets → [dataset] → Re-index 中重新索引你的数据集
```

### 端口 80 已被占用

```bash
# 查找正在使用端口 80 的进程
ss -tlnp | grep :80
# 或
lsof -i :80

# 停止冲突服务，或在 docker-compose.yaml 中更改 Dify 的 nginx 端口
```

***

## 延伸阅读

* [Dify 官方文档](https://docs.dify.ai)
* [Dify GitHub 仓库](https://github.com/langgenius/dify)
* [Dify 自托管指南](https://docs.dify.ai/getting-started/install-self-hosted/docker-compose)
* [在 Clore.ai 上运行 Ollama](/guides/guides_v2-zh/yu-yan-mo-xing/ollama.md)
* [在 Clore.ai 上运行 vLLM](/guides/guides_v2-zh/yu-yan-mo-xing/vllm.md)
* [Clore.ai GPU 对比](/guides/guides_v2-zh/ru-men-zhi-nan/gpu-comparison.md)
* [Dify 社区 Discord](https://discord.gg/FngNHpbcY7)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.clore.ai/guides/guides_v2-zh/ai-ping-tai-yu-zhi-neng-ti/dify.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
