Dify 开源 LLM 应用开发平台:核心功能解析与 Docker 自托管部署实战指南
本文以 Dify 官方简体中文 README 为主线,系统梳理 Dify 的七项核心能力(工作流、模型支持、Prompt IDE、RAG 管道、Agent、LLMOps、后端即服务),并完整给出社区版 Docker 自托管安装步骤、关键环境变量配置与高级部署选项,同时结合仓库源码目录印证各功能的实现位置,帮助读者快速从“了解 Dify”走到“跑起 Dify 并深入源码”。
Dify 是一个开源的 LLM 应用开发平台。其直观的界面结合了 AI 工作流、RAG 管道、Agent、模型管理、可观测性功能等,让团队可以较快从原型走向生产环境。
Dify 的七项核心能力
官方 README(简体中文说明)将 Dify 的核心功能归纳为七类,下面逐项说明,并标注其在当前仓库中的源码位置,方便读者从文档概念直接跳到实现。
1. 工作流(Workflow)
在画布上构建和测试功能强大的 AI 工作流程,并可组合使用下述所有功能。
从源码结构看,工作流引擎集中在 api/core/workflow 目录:workflow_entry.py 是工作流执行入口,node_factory.py 负责按节点类型实例化节点,graph_topology.py 处理图拓扑校验。api/core/workflow/nodes 下的子目录展示了当前内置的节点家族:agent / agent_v2、knowledge_retrieval(知识检索)、human_input(人工介入)、datasource,以及三种触发器 trigger_webhook、trigger_schedule、trigger_plugin。前端则可通过环境变量 LOOP_NODE_MAX_COUNT(默认 100)、MAX_ITERATIONS_NUM(默认 99)、MAX_TREE_DEPTH(默认 50)等参数约束循环、迭代与树的规模,这些默认值定义在 docker/.env.example 中。
2. 全面的模型支持
Dify 与数百种专有/开源 LLM 以及数十种推理提供商和自托管解决方案无缝集成,涵盖 GPT、Mistral、Llama3 以及任何与 OpenAI API 兼容的模型。
在仓库层面,模型能力的扩展有两条路径:
- 向量数据库/模型提供商:api/providers/vdb 目录下以
vdb-*命名的 30 余个包(vdb-weaviate、vdb-qdrant、vdb-pgvector、vdb-milvus、vdb-opensearch等)对应各向量存储的后端实现,部署时通过VECTOR_STORE环境变量(默认weaviate)选择其一; - 插件系统:工作流与工具生态的持续扩展依赖插件机制,Docker 部署中专门包含
plugin_daemon服务(见下文服务架构),由 api/core/plugin 与api/core/tools下的plugin_tool、mcp_tool、custom_tool、workflow_as_tool等模块对接。
3. Prompt IDE
用于制作提示词、比较模型性能,以及向基于聊天的应用添加其他功能(如文本转语音)的直观界面。该能力主要由前端 web/ 工程与后端模型配置服务承载,其中文本转语音相关的后端处理可在 api/services/audio_service.py 等处找到。
4. RAG Pipeline
Dify 提供覆盖从文档摄入到检索的完整 RAG 功能,支持从 PDF、PPT 和其他常见文档格式中提取文本的开箱即用能力。
api/core/rag 目录完整体现了这一管道的分层结构,与文档描述的“摄入 → 切分 → 索引 → 检索”流程一一对应:
| 子模块 | 职责 |
|---|---|
| extractor | 文档解析,内置 pdf_extractor.py、excel_extractor.py、word_extractor.py、csv_extractor.py、html_extractor.py、markdown_extractor.py、notion_extractor.py 以及 unstructured、firecrawl、watercrawl 等外部方案集成 |
splitter |
文本分段切分 |
index_processor |
索引构建 |
embedding / docstore |
向量化与文档存储 |
retrieval / rerank / data_post_processor |
检索、重排与结果后处理 |
pipeline |
异步索引流水线(与 api/tasks/document_indexing_task.py 等 Celery 任务配合) |
前端对索引行为的约束同样通过环境变量暴露,如 INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH(默认 4000,限制单条分段的最大 token 数)、TOP_K_MAX_VALUE(默认 10,限制检索 TopK 上限)。
5. Agent 智能体
可以基于 LLM 函数调用(Function Calling)或 ReAct 模式定义 Agent,并为 Agent 添加预构建或自定义工具。
这一点在源码中得到直接印证:api/core/agent 下同时存在 fc_agent_runner.py(Function Calling 策略)与 cot_agent_runner.py(Chain-of-Thought/ReAct 策略),两者均继承自 base_agent_runner.py,与文档中“函数调用或 ReAct”两种定义方式的描述完全一致。关于工具:文档提到 Dify 提供 50 多种内置工具(如谷歌搜索、DALL·E、Stable Diffusion、WolframAlpha 等);从当前源码结构看,核心仓库的 api/core/tools/builtin_tool/providers 保留了 audio、code、time、webscraper 等基础内置工具,其余大量工具能力已迁移至插件体系,通过 plugin_tool、mcp_tool 等模块加载。单个应用可挂载的工具数量由 MAX_TOOLS_NUM(默认 10)约束。
6. LLMOps
随时间监视和分析应用日志与性能,基于生产数据和标注持续改进提示词、数据集和模型。对应的实现分布在多处:
- api/core/logging:结构化日志格式化与上下文注入(
structured_formatter.py、context.py); - api/providers/trace:数十种链路追踪/可观测性后端 Provider 集成;
- api/extensions/otel:OpenTelemetry 埋点扩展;
- api/core/ops:应用运行指标与运维数据。
部署时日志行为由 LOG_LEVEL(默认 INFO)、LOG_FILE(默认 /app/logs/server.log)、LOG_FILE_MAX_SIZE(默认 20 MB)、LOG_FILE_BACKUP_COUNT(默认 5)等变量控制,可在 docker/.env.example 中查看。
7. 后端即服务(Backend as a Service)
Dify 的所有功能都带有相应的 API,可将 Dify 作为后端服务集成进自有业务系统。路由层面这一点体现得非常清晰:api/controllers/service_api 是对外的服务 API 蓝图,init.py 中声明 bp = Blueprint("service_api", __name__, url_prefix="/v1"),即所有开放 API 挂载在 /v1 前缀下,覆盖 app、dataset、end_user、workspace 等资源域;仓库同时提供 console(控制台)、web(终端用户应用)、inner_api(内部服务间调用)等多套蓝图,并在 api/app_factory.py 中统一注册。
三种使用方式
README 将使用方式分为三档,选型建议如下:
| 形态 | 说明 | 适用场景 |
|---|---|---|
| 云服务 | 官方提供的托管服务,零配置即可尝试,包含自部署版本的全部功能,沙盒计划含 200 次免费 GPT-4 调用 | 快速验证想法、不想运维基础设施 |
| 自托管社区版 | 使用下文的 Docker Compose 一键部署到自有环境 | 数据需要留在自己机器/内网、需要定制 |
| 企业版 | 在社区版之上提供额外的企业级功能,需联系官方商务获取 | 有组织级合规、权限、SLA 需求 |
安装 Dify 社区版
系统要求
在安装 Dify 之前,确保机器满足以下最低配置:
- CPU ≥ 2 Core
- RAM ≥ 4 GiB
快速启动
启动 Dify 服务器的最简单方式是运行仓库自带的 docker-compose.yaml 文件。运行安装命令前,请确认机器上已安装 Docker 与 Docker Compose:
cd docker
cp .env.example .env
docker compose up -d
三条命令的含义:
cd docker:进入部署目录,该目录包含 Compose 编排文件与全部环境变量模板;cp .env.example .env:以官方示例为基线生成自己的.env配置文件(docker/.env.example),后续所有自定义都改这个文件;docker compose up -d:后台拉起整套服务栈。
运行后,在浏览器访问 http://localhost/install 即可进入 Dify 控制台,完成初始化安装操作。
注意:docker-compose.yaml 文件头明确标注该文件由
generate_docker_compose脚本自动生成(对应 docker/generate_docker_compose),不要直接手工修改它;应修改.env或docker-compose-template.yaml后重新生成。
Compose 服务架构解读
当前版本(镜像标签 langgenius/dify-api:1.17.0)的编排文件中定义了完整的微服务栈,核心服务包括:
| 服务 | 作用 |
|---|---|
api |
Flask 主服务(工作流、RAG、控制台 API),健康检查为 /health |
api_websocket |
工作流协作的 WebSocket 服务(collaboration profile 按需启用) |
worker / worker_beat |
Celery 异步任务执行器与定时调度器 |
web |
Next.js 前端 |
sandbox / local_sandbox |
代码执行沙箱(CODE_EXECUTION_ENDPOINT 默认指向 http://sandbox:8194) |
plugin_daemon |
Go 编写的插件守护进程,负责插件的安装与运行隔离 |
agent_backend |
Agent 运行时后端(agent_ssrf_proxy 为其配套出口代理) |
ssrf_proxy |
统一的 SSRF 防护代理(docker/ssrf_proxy) |
nginx / certbot |
入口反向代理与 HTTPS 证书 |
db_postgres / redis |
默认数据底座;db_mysql 为可选替代 |
| 向量库服务 | weaviate(默认)、qdrant、pgvector、milvus 等,按 VECTOR_STORE 选用 |
etcd / minio |
Milvus 的依赖组件 |
关键环境变量速查
以下参数摘自 docker/.env.example,是部署调优时最常接触的配置:
# —— 安全 ——
SECRET_KEY= # 必填。Flask 会话/令牌签密密钥,生产环境务必自定义
# —— 数据库(默认 PostgreSQL) ——
DB_TYPE=postgresql
DB_USERNAME=postgres
DB_PASSWORD=difyai123456
DB_HOST=db_postgres
DB_PORT=5432
DB_DATABASE=dify
# —— 缓存与任务队列 ——
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=difyai123456
CELERY_BROKER_URL=redis://:difyai123456@redis:6379/1
CELERY_BACKEND=redis
CELERY_WORKER_AMOUNT=4 # worker 进程数
CELERY_AUTO_SCALE=false
# —— 存储与功能开关 ——
MIGRATION_ENABLED=true # 容器启动时自动执行数据库迁移
VECTOR_STORE=weaviate # 向量库后端,可切换 qdrant/pgvector/milvus 等
CODE_EXECUTION_ENDPOINT=http://sandbox:8194
NEXT_PUBLIC_ENABLE_AGENT_V2=true
# —— 日志 ——
LOG_LEVEL=INFO
LOG_FILE=/app/logs/server.log
LOG_FILE_MAX_SIZE=20
LOG_FILE_BACKUP_COUNT=5
修改任何配置后,重新执行 docker compose up -d 使配置生效。更完整的环境变量说明可参考官方文档(docs.dify.ai 的环境变量页面,见 docs/zh-CN/ADVANCED_SETUP.md 的指引)。
高级设置
需要自定义配置、可观测性或云原生部署时,可参阅 高级设置文档,其要点包括:
- 自定义配置:以 .env.example 中的注释为准更新
.env,必要时调整docker-compose.yaml的镜像版本、端口映射或卷挂载,改完重跑docker compose up -d; - Grafana 指标监控:以 Dify 的 PostgreSQL 作为数据源导入社区仪表板,监控应用、租户、消息等粒度指标;
- Kubernetes 部署:社区提供了多套 Helm Chart 与原生 YAML 清单,可部署到自建 K8s 集群;
- 云上 Terraform/CDK 一键部署:涵盖 Azure、Google Cloud、AWS(EKS/ECS)等方案;
- 阿里云:支持通过计算巢、DMS 一键部署;亦可通过 Sealos App Store 部署。
贡献与社区
Dify 欢迎多种形式的贡献(贡献指南):
- 代码:先阅读贡献指南,再处理标注为新手友好的问题;
- 想法与反馈:在 GitHub Discussions 发起或参与讨论;
- 翻译:参照 国际化指南 添加或更新语言,
web/i18n目录下已维护 888 个语言资源文件; - 社区:分享自己构建的应用、帮助其他用户。
获取帮助的渠道:GitHub Discussions(求助与反馈)、GitHub Issues(报告可复现的错误,提单前先读贡献指南)、Discord 与 X 等社交平台(实时交流与版本动态)。
安全与许可证
- 安全问题:为保护隐私,请勿在公开渠道发布安全漏洞,应发送至 security@dify.ai;
- 许可证:本仓库遵循 Dify Open Source License,本质上是 Apache 2.0,但包含一些额外限制(例如对 logo 的使用与多租户商业化条款等),二次开发或商用前请完整阅读。
小结
Dify 简体中文 README 勾勒的是一套“功能完整 + 部署极简”的开源 LLM 应用平台:七项核心能力(工作流、模型支持、Prompt IDE、RAG、Agent、LLMOps、API 化后端)在仓库中都有清晰对应的源码模块(api/core/workflow、api/core/rag、api/core/agent、api/providers/trace、api/controllers/service_api 等);而社区版部署只需“复制 .env + docker compose up -d”两步即可在满足 2 核 4 GiB 的机器上跑起包含 API、Worker、插件守护进程、沙箱与向量库的完整服务栈。掌握本文后,你可以自行完成 Dify 的安装调优,并沿源码路径深入任何一个功能模块的实现细节。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0625
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
