54. Dify 低代码 AI 应用平台¶
一句话说明:Dify 是一个开源的低代码 AI 应用开发平台,让你通过拖拽界面快速搭建 RAG 知识库问答、Agent 智能体、工作流等 AI 应用,不用写代码就能从原型到生产上线。
1. 什么是 Dify?¶
白话解释:想象你要开一家奶茶店,传统方式是自己买设备、调配方、一杯一杯手工做(写代码)。Dify 就像一台全自动奶茶机——你只需要在触摸屏上选口味、甜度、加料,按一下就出杯(拖拽配置就能生成 AI 应用)。
技术定义:Dify(Do It For You)是由 LangGenius 团队开发的开源 LLM 应用开发平台,提供可视化的 Prompt 编排、RAG 管道、Agent 框架、模型管理和 LLMOps 能力。
关键数据(截至 2026 年 5 月,来自 GitHub API 实时查询):
| 指标 | 数据 |
|---|---|
| 最新版本 | v1.14.0(2026-04-29 发布) |
| GitHub Stars | 139,891 |
| Forks | 21,944 |
| 开源协议 | Apache 2.0 / 商业许可 |
| 主要语言 | Python(后端) + TypeScript(前端) |
| 部署方式 | Docker Compose / 源码 / Dify Cloud |
v1.14.0 新特性亮点: - 协作编辑:多人同时编辑同一个工作流,类似 Google Docs 的实时协作 - Human-in-the-loop(HITL):Service API 支持人工审核介入流程 - MCP(Model Context Protocol)工具改进:修复 OAuth、元数据刷新等问题 - 插件系统增强:自动升级策略、本地安装器优化
2. Dify vs LangChain:代码 vs 低代码¶
白话类比:LangChain 是一套乐高积木(Python 库),你需要自己写代码拼装;Dify 是一个乐高拼装桌面游戏,拖拽模块就能拼好。
| 对比维度 | Dify | LangChain |
|---|---|---|
| 使用方式 | 浏览器拖拽界面(低代码) | Python/JS 代码(纯代码) |
| 上手难度 | 低,会点鼠标就行 | 高,需要编程基础 |
| 灵活性 | 中等,受限于平台提供的组件 | 极高,可以自定义任何逻辑 |
| RAG 搭建 | 上传文档 → 自动分块 → 立刻可用 | 手写代码加载文档 → 分块 → 向量化 → 检索 |
| 部署方式 | Docker 一键部署,自带 Web 界面 | 需要自己写 API 和前端 |
| 适合谁 | 产品经理、生信研究者、不想写前端的开发者 | 需要深度定制的后端开发者 |
| 可视化 | 内置工作流画布、Prompt 调试器 | 需要搭配 LangSmith 等外部工具 |
| 社区生态 | 140k+ Stars,插件市场 | 100k+ Stars,Python 生态丰富 |
结论:如果你是生信工程师,想快速搭建一个文献问答系统或分析报告生成器,Dify 是首选;如果你需要把 LLM 嵌入到自己的 Python 管线中深度定制,选 LangChain。
3. Dify 核心功能详解¶
3.1 RAG 知识库(Retrieval-Augmented Generation)¶
白话:让 AI 先"读书"再"回答"。你上传自己的文档(论文、手册),AI 回答问题时会先从文档里找到相关段落,再用大模型组织语言回答。
- 支持格式:PDF、DOCX、TXT、Markdown、HTML、CSV、PPT 等
- 自动分块(Chunking):按段落或固定长度切割文档
- 向量化存储:内置 Weaviate/Qdrant/pgvector 等向量数据库
- 检索模式:向量检索、全文检索、混合检索
3.2 Agent 智能体工作流¶
白话:AI 不再只是"一问一答",而是能像员工一样按流程办事——先查资料,再分析,最后写报告。
- 支持 Function Calling 和 ReAct 两种 Agent 模式
- 50+ 内置工具(Google 搜索、DALL-E、Stable Diffusion、WolframAlpha 等)
- 可自定义 API 工具
- v1.14.0 新增 MCP(Model Context Protocol)工具支持
3.3 Prompt IDE(提示词工程工作台)¶
白话:一个专门调试 AI 提示词的实验室,可以对比不同模型、不同提示词的效果。
- 可视化 Prompt 编辑器
- 变量插入(如
{{user_question}}) - 多模型对比:同一个问题,GPT-4 和 Claude 的回答并排展示
- 附加功能:文本转语音(TTS)集成
3.4 对话应用¶
白话:一键生成一个 ChatGPT 风格的对话界面,可以分享给别人用。
- 对话式(Chatbot)和文本补全(Completion)两种模式
- 内置用户会话管理
- 支持嵌入网页(iframe)
- 可配置开场白、建议问题
3.5 文本生成应用¶
白话:像填表一样输入几个参数,AI 自动生成一篇完整的文本(报告、邮件、摘要等)。
- 表单式输入界面
- 批量运行支持
- 结果可导出
3.6 工作流编排(Workflow)¶
白话:像流程图一样拖拽节点,定义 AI 的工作步骤。比如:用户提问 → 知识库检索 → LLM 回答 → 人工审核 → 返回结果。
- 可视化画布编辑器
- 节点类型:LLM、知识检索、代码执行、条件分支、HTTP 请求、模板转换等
- 支持并行分支和循环
- v1.14.0 支持多人协作编辑工作流
4. Docker 部署教程(完整命令 + 注释)¶
4.1 环境要求¶
# 最低配置要求:
# CPU >= 2 核
# 内存 >= 4 GB
# 磁盘 >= 20 GB(Docker 镜像 + 数据)
# 操作系统:Linux / macOS / Windows (WSL2)
4.2 安装 Docker(如果还没装)¶
# Ubuntu 安装 Docker(已安装可跳过)
sudo apt update # 更新包索引
sudo apt install -y docker.io # 安装 Docker
sudo apt install -y docker-compose-plugin # 安装 Docker Compose 插件(v2)
sudo systemctl start docker # 启动 Docker 服务
sudo systemctl enable docker # 设置开机自启
sudo usermod -aG docker $USER # 把当前用户加入 docker 组,免 sudo
# 注意:加入 docker 组后需要重新登录才生效
4.3 部署 Dify¶
# 第一步:克隆 Dify 仓库
git clone https://github.com/langgenius/dify.git # 从 GitHub 克隆代码
cd dify/docker # 进入 Docker 配置目录
# 第二步:创建环境配置文件
cp .env.example .env # 复制示例配置为正式配置
# 你可以编辑 .env 文件修改以下常用配置:
# SECRET_KEY=你的密钥 # 安全密钥,生产环境必须修改
# INIT_PASSWORD=你的初始密码 # 管理员初始密码
# DB_PASSWORD=数据库密码 # PostgreSQL 密码,默认 difyai123456
# DIFY_PORT=5001 # API 服务端口,默认 5001
# 第三步:启动所有服务
docker compose up -d # 后台启动所有容器
# 这个命令会拉取并启动以下服务:
# - api:Dify 后端 API 服务(Python/Flask)
# - worker:后台任务队列(Celery,处理文档索引等)
# - web:前端界面(Next.js)
# - db_postgres:PostgreSQL 数据库
# - redis:Redis 缓存和消息队列
# - weaviate / qdrant:向量数据库(用于 RAG)
# - nginx:反向代理,统一入口
# 第四步:查看服务状态
docker compose ps # 查看所有容器运行状态
docker compose logs -f api # 实时查看 API 日志(调试用)
# 第五步:访问 Dify
# 浏览器打开 http://localhost/install
# 首次访问会进入初始化页面,设置管理员邮箱和密码
4.4 常用运维命令¶
# 更新 Dify 到最新版本
cd dify/docker # 进入 Docker 目录
git pull origin main # 拉取最新代码
docker compose down # 停止当前服务
docker compose pull # 拉取最新镜像
docker compose up -d # 重新启动
# 查看日志
docker compose logs -f # 查看所有服务日志
docker compose logs -f worker # 只看 worker 日志(文档索引相关)
# 数据备份
docker compose exec db_postgres pg_dump -U postgres dify > backup.sql # 备份数据库
# 完全卸载(谨慎操作!会删除所有数据)
# docker compose down -v # 停止并删除所有容器和数据卷
5. 实操教程:创建 RAG 知识库问答应用¶
以下是从零搭建一个 "文献问答系统" 的完整步骤:
步骤 1:登录并进入工作台¶
步骤 2:配置模型供应商¶
操作:点击右上角头像 → "设置" → "模型供应商"
→ 选择一个模型供应商(如 OpenAI)
→ 输入 API Key → 点击 "保存"
注意:如果用本地 Ollama,见第 8 节单独说明
界面位置:设置 → 模型供应商
步骤 3:创建知识库¶
步骤 4:上传文档¶
操作:进入刚创建的知识库 → 点击 "添加文件"
→ 可以上传 PDF/DOCX/TXT/Markdown 等文件
→ 选择分块策略:
- "自动"(推荐,Dify 自动决定怎么切)
- "自定义"(可设置分块大小,如 500 tokens,重叠 50 tokens)
→ 选择嵌入模型(Embedding Model)
→ 点击 "保存并处理"
→ 等待索引完成(状态变为绿色 "可用")
耗时:取决于文档大小,通常几秒到几分钟
步骤 5:创建对话应用¶
步骤 6:关联知识库 + 配置 Prompt¶
操作:进入应用编排页面
→ 左侧面板 "上下文" 区域 → 点击 "添加" → 选择刚才的知识库
→ 在 "提示词" 区域编写 System Prompt,例如:
提示词示例:
-----------
你是一个2型糖尿病肠道菌群研究的专家助手。
请根据提供的文献内容回答用户的问题。
如果文献中没有相关信息,请明确告知用户。
回答要求:
1. 引用具体的文献段落
2. 使用中文回答
3. 用通俗易懂的语言解释专业术语
-----------
→ 右侧选择 LLM 模型(如 GPT-4 或 Claude)
→ 设置参数:Temperature 建议 0.3-0.5(更精确)
步骤 7:调试测试¶
步骤 8:发布并获取 API¶
操作:点击右上角 "发布" 按钮
→ 发布后可获得:
1. Web 应用链接(直接分享给别人使用)
2. 嵌入代码(iframe 嵌入到你的网页)
3. API 端点(集成到其他系统)
API 调用示例:
# 调用 Dify 对话 API
curl -X POST 'http://localhost/v1/chat-messages' \
-H 'Authorization: Bearer your-api-key' \ # 替换为你的 API Key
-H 'Content-Type: application/json' \
-d '{
"inputs": {},
"query": "2型糖尿病患者肠道中哪些菌群显著减少?",
"response_mode": "blocking",
"user": "test-user"
}'
6. 工作流编排实操¶
6.1 创建工作流应用¶
6.2 拖拽节点构建 Agent 流程¶
示例场景:用户提问 → 判断问题类型 → 不同处理分支
节点1: [开始]
↓ 用户输入问题
节点2: [LLM - 问题分类器]
→ Prompt: "判断以下问题属于哪个类别:A.菌群组成 B.代谢通路 C.治疗方案 D.其他"
↓ 输出分类结果
节点3: [条件分支]
→ 如果分类=A → 走知识库检索分支
→ 如果分类=B → 走代谢数据库查询分支
→ 如果分类=D → 直接 LLM 回答
↓
节点4: [知识检索] → 从T2D文献库检索相关段落
↓
节点5: [LLM - 答案生成] → 基于检索结果生成回答
↓
节点6: [结束] → 返回最终答案给用户
6.3 常用工作流节点说明¶
| 节点类型 | 功能 | 白话解释 |
|---|---|---|
| 开始 | 接收用户输入 | 流程的入口 |
| LLM | 调用大语言模型 | 让 AI 思考和生成文本 |
| 知识检索 | 从知识库检索 | 去"图书馆"查资料 |
| 条件分支 | if/else 逻辑判断 | 走岔路口,根据条件选方向 |
| 代码执行 | 运行 Python/JS 代码 | 做数据处理或计算 |
| HTTP 请求 | 调用外部 API | 从外部系统获取数据 |
| 模板转换 | Jinja2 模板 | 把数据格式化成想要的样子 |
| 变量聚合 | 合并多个分支的结果 | 把多条路的结果汇总 |
| 结束 | 返回最终输出 | 流程的出口 |
7. 连接本地 Ollama 模型¶
白话:Ollama 是一个本地运行大模型的工具。连接到 Dify 后,你的数据不会发送到外部服务器,完全本地处理,适合处理敏感的生物医学数据。
7.1 前提条件¶
# 确保 Ollama 已安装并运行
ollama serve # 启动 Ollama 服务(默认 11434 端口)
ollama pull llama3 # 下载 Llama3 模型(约 4.7GB)
ollama pull nomic-embed-text # 下载嵌入模型(用于 RAG 向量化)
7.2 配置 Ollama 允许外部访问¶
# Ollama 默认只监听 127.0.0.1(本机)
# 如果 Dify 运行在 Docker 中,需要让 Ollama 监听所有地址
# 方法一:设置环境变量(Linux)
export OLLAMA_HOST=0.0.0.0:11434 # 让 Ollama 监听所有网络接口
ollama serve # 重启 Ollama
# 方法二:修改 systemd 配置(如果 Ollama 是系统服务)
sudo systemctl edit ollama # 编辑服务配置
# 添加以下内容:
# [Service]
# Environment="OLLAMA_HOST=0.0.0.0:11434"
sudo systemctl restart ollama # 重启服务
7.3 在 Dify 中添加 Ollama¶
操作:设置 → 模型供应商 → 找到 "Ollama"
→ 点击添加
→ 填写配置:
模型名称:llama3(和你 ollama pull 的名字一致)
Base URL:http://host.docker.internal:11434
(如果是 Linux Docker,用 http://172.17.0.1:11434)
→ 点击保存
嵌入模型同理:
→ 模型类型选 "Text Embedding"
→ 模型名称:nomic-embed-text
→ Base URL 同上
常见问题:Dify 容器访问不到 Ollama? - Docker Desktop(Windows/macOS):用 host.docker.internal - Linux Docker:用宿主机的 Docker 网桥 IP(通常 172.17.0.1) - 验证连通性:docker exec -it dify-api-1 curl http://172.17.0.1:11434/api/tags
8. Dify vs FastGPT vs Coze 对比表¶
| 对比维度 | Dify | FastGPT | Coze(扣子) |
|---|---|---|---|
| 定位 | 通用 LLM 应用开发平台 | 知识库问答系统 | 字节跳动的 AI Bot 平台 |
| 开源 | 是(Apache 2.0) | 是(Apache 2.0) | 否(商业闭源) |
| GitHub Stars | ~140k | ~28k | N/A |
| 自部署 | 支持(Docker) | 支持(Docker) | 不支持(仅云端) |
| 数据隐私 | 完全自控 | 完全自控 | 数据在字节服务器 |
| 工作流 | 强大(可视化画布) | 有(较简单) | 有(可视化) |
| RAG | 完善(多种向量库) | 非常完善(核心功能) | 支持 |
| Agent | Function Calling + ReAct | 支持 | 支持(插件生态丰富) |
| 模型支持 | 数百种(API + 本地) | 主流 API + Ollama | OpenAI/Claude 等主流 |
| 插件/工具 | 50+ 内置 + 自定义 | 较少 | 丰富(抖音生态) |
| 本地模型 | 支持(Ollama/Xinference) | 支持(OneAPI/Ollama) | 不支持 |
| API 输出 | 支持 | 支持 | 支持 |
| 协作编辑 | v1.14.0 新增支持 | 不支持 | 不支持 |
| 中文支持 | 好 | 非常好(国内团队) | 非常好(字节) |
| 适合谁 | 想要全功能 AI 平台 | 专注知识库问答 | 想快速搭建 Bot,不介意云端 |
选型建议: - 数据敏感(如医疗生信)→ Dify 或 FastGPT(可自部署,数据不出服务器) - 只需要知识库问答→ FastGPT(更简单直接) - 需要工作流 + Agent + 多功能→ Dify(功能最全) - 不想运维,快速试用→ Coze(零部署,但数据在云端)
9. 生信应用场景¶
9.1 文献智能问答系统¶
场景:上传 50 篇 T2D 肠道菌群相关论文 PDF,搭建文献问答助手
价值:快速定位文献中的关键信息,不用逐篇阅读
示例问题:
- "Akkermansia muciniphila 在 T2D 中的作用?"
- "有哪些研究使用了 16S rRNA 测序?"
- "二甲双胍对肠道菌群的影响有哪些文献支持?"
实现:创建 RAG 知识库应用(见第 5 节教程)
9.2 分析报告自动生成¶
场景:输入实验数据摘要,自动生成结构化分析报告
价值:节省写报告的时间,保持格式统一
工作流设计:
用户输入实验参数 → LLM 生成报告大纲 → 知识库检索参考文献
→ LLM 填充各章节 → 代码节点格式化 → 输出 Markdown 报告
9.3 实验方案建议助手¶
场景:描述研究目的,AI 推荐实验方案、工具选择、参数设置
价值:帮助新手快速确定实验路线
示例对话:
用户:"我想比较 T2D 患者和健康人的肠道菌群差异,样本量 30 vs 30"
AI:"建议使用以下分析流程:
1. 质控:fastp → KneadData(去宿主)
2. 物种注释:MetaPhlAn4 或 Kraken2+Bracken
3. 功能注释:HUMAnN3
4. 差异分析:LEfSe + MaAsLin2
5. 可视化:R ggplot2
样本量建议:宏基因组推荐每组 ≥30,统计检验力足够..."
9.4 生信工具使用手册问答¶
10. 常见报错及解决方案¶
报错 1:Docker Compose 启动失败 — 端口冲突¶
错误信息:Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use
原因:80 端口被其他程序占用(如 Apache/Nginx)
解决:
# 方法一:停掉占用 80 端口的程序
sudo lsof -i :80 # 查看谁占了 80 端口
sudo systemctl stop nginx # 停掉 nginx(举例)
# 方法二:修改 Dify 端口
# 编辑 docker-compose.yaml 中 nginx 服务的端口映射
# 把 "80:80" 改为 "8080:80"
# 然后访问 http://localhost:8080
报错 2:知识库文档索引失败 — Embedding 模型未配置¶
错误信息:Embedding model not found / Provider not configured
原因:没有配置嵌入模型(Embedding Model),RAG 需要它把文本转向量
解决:
设置 → 模型供应商 → 确保添加了支持 Embedding 的模型
推荐:OpenAI text-embedding-3-small 或本地 nomic-embed-text
报错 3:Ollama 连接失败 — Connection refused¶
错误信息:Connection refused / Cannot connect to Ollama
原因:Dify Docker 容器无法访问宿主机的 Ollama 服务
解决:
# 1. 确保 Ollama 监听 0.0.0.0 而不是 127.0.0.1
export OLLAMA_HOST=0.0.0.0:11434
# 2. 使用正确的地址
# Docker Desktop: http://host.docker.internal:11434
# Linux Docker: http://172.17.0.1:11434
# 3. 验证连通性
docker exec -it dify-api-1 curl http://172.17.0.1:11434/api/tags
报错 4:API 调用返回 401 Unauthorized¶
错误信息:{"code": "unauthorized", "message": "Invalid API key"}
原因:API Key 不正确或过期
解决:
应用概览页 → 左侧 "API 访问" → 重新生成 API Key
注意区分 "App API Key"(应用级别)和 "Dataset API Key"(知识库级别)
报错 5:文档上传失败 — 文件太大¶
错误信息:File too large / Request entity too large
原因:默认文件大小限制(通常 15MB)
解决:
# 修改 .env 文件中的上传限制
UPLOAD_FILE_SIZE_LIMIT=50 # 单位 MB,改大一些
UPLOAD_FILE_BATCH_LIMIT=10 # 批量上传数量限制
# 重启服务
docker compose restart api worker
报错 6:Worker 容器频繁重启 — 内存不足¶
错误信息:worker 容器状态显示 Restarting / OOMKilled
原因:服务器内存不足,索引大文档时内存溢出
解决:
# 1. 确保服务器至少 4GB 内存(推荐 8GB+)
free -h # 查看内存使用
# 2. 减少 Celery Worker 数量
# 编辑 .env:
CELERY_WORKER_AMOUNT=2 # 从默认 4 减少到 2
# 3. 重启
docker compose restart worker
11. 速查表¶
部署命令速查¶
| 操作 | 命令 |
|---|---|
| 首次部署 | git clone ... && cd dify/docker && cp .env.example .env && docker compose up -d |
| 查看状态 | docker compose ps |
| 查看日志 | docker compose logs -f [服务名] |
| 重启服务 | docker compose restart |
| 停止服务 | docker compose down |
| 更新版本 | git pull && docker compose pull && docker compose up -d |
| 备份数据库 | docker compose exec db_postgres pg_dump -U postgres dify > backup.sql |
Dify API 端点速查¶
| 端点 | 方法 | 用途 |
|---|---|---|
/v1/chat-messages | POST | 发送对话消息 |
/v1/messages | GET | 获取历史消息 |
/v1/conversations | GET | 获取会话列表 |
/v1/completion-messages | POST | 文本生成(非对话) |
/v1/files/upload | POST | 上传文件 |
/v1/datasets | GET/POST | 知识库管理 |
/v1/datasets/{id}/documents | POST | 上传知识库文档 |
关键配置项速查(.env)¶
| 配置项 | 默认值 | 说明 |
|---|---|---|
SECRET_KEY | 预设值 | 安全密钥,生产必改 |
INIT_PASSWORD | 空 | 管理员初始密码 |
DB_PASSWORD | difyai123456 | 数据库密码 |
DIFY_PORT | 5001 | API 端口 |
LOG_LEVEL | INFO | 日志级别 |
MIGRATION_ENABLED | true | 自动数据库迁移 |
UPLOAD_FILE_SIZE_LIMIT | 15 | 上传文件大小限制(MB) |
CELERY_WORKER_AMOUNT | 4 | 后台任务并发数 |
12. 延伸资源¶
| 资源 | 链接 |
|---|---|
| Dify 官方文档 | https://docs.dify.ai |
| Dify GitHub 仓库 | https://github.com/langgenius/dify |
| Dify Cloud(在线试用) | https://cloud.dify.ai |
| Dify 插件市场 | https://marketplace.dify.ai |
| Dify 中文社区 | https://github.com/langgenius/dify/discussions |
| Ollama 官网 | https://ollama.com |
| FastGPT GitHub | https://github.com/labring/FastGPT |
| Coze(扣子)官网 | https://www.coze.com |
| Docker 官方安装文档 | https://docs.docker.com/engine/install |
本文信息来源:GitHub API 实时查询(2026-05-03)、Dify 官方 README、v1.14.0 Release Notes、docker-compose.yaml 和 .env.example 配置文件。所有版本号和 Star 数据为实时获取,非训练数据。