Dify:面向LLM应用的开源可视化开发平台
—— 系统架构、核心机制与技术评析
摘要
Dify 是由 LangGenius 公司主导开发的开源 LLM 应用开发平台,自 2023 年开源以来在 GitHub 上累计获得超过 80,000 颗 Star,已纳入 Linux 基金会托管。该平台以「可视化工作流编排 + RAG 管道 + Agent 框架 + 模型治理」四位一体的架构,试图在 LangChain 式编程框架与 Coze 式零代码平台之间开辟第三条道路——亦即面向企业级场景的「低代码 + 开源可控」路线。本文从系统架构、工作流引擎的 DSL 设计与解析机制、RAG 管道的文档处理链路、Agent 框架的 ReAct/Function Call 实现、以及 LLMOps 的可观测性设计五个维度,对 Dify 进行系统性技术剖析,并与 LangChain、Coze、Flowise 进行横向对比,最后讨论其当前局限与未来演进方向。
关键词: Dify;LLM 应用开发平台;工作流引擎;RAG;Agent 框架;LLMOps;DSL
1. 引言
大语言模型(LLM)从实验室走向生产环境的进程,催生了一类新的基础设施需求:开发者需要的已不仅是模型 API,而是一个能把 prompt 工程、知识检索、工具调用、流程编排、性能监控这些散落环节整合到一起的开发平台。2023—2025 年间,围绕这一需求形成了三条路线:以 LangChain/LlamaIndex 为代表的编程框架(极致灵活,但学习成本高)、以 Coze/GPTs 为代表的零代码平台(上手快如闪电,但深度受限于平台边界)、以及以 Dify 为代表的开源平台(试图在二者之间找到平衡)。
Dify 的独特之处在于:它并非 LangChain 的简单可视化封装。事实上,Dify 自 0.6 版本起便移除了对 LangChain 的依赖,自研了完整的模型运行时(Model Runtime)、工作流引擎和 RAG 管道[1]。这意味着 Dify 在架构层面是一条独立的技术栈——它不跟随 LangChain 的版本节奏,不依赖 LangChain 的抽象层,有自己的演进路径。截至 2026 年 6 月,Dify 已迭代至 1.x 大版本,在 GitHub 上积累了超过 950 位贡献者,Docker 镜像下载量达数千万次[1]。本文对其技术架构进行系统性剖析,以期为 LLM 应用平台的选型与二次开发提供参考。
2. 系统架构总览
2.1 整体架构
Dify 采用前后端分离的微服务架构,由以下核心子系统组成[2][3]:
-
Web 前端(dify-web): 基于 Next.js + React + TypeScript 构建,利用 ReactFlow 库实现工作流的可视化画布编排。负责管理控制台的 UI 渲染与 API 调用,本身不承载业务逻辑。
-
API 后端(dify-api): 基于 Python Flask + Gunicorn 的 RESTful API 服务器,是整个系统的核心调度层。承载认证授权、模型调用、文件管理、RAG 检索、应用运行时逻辑等全部业务能力。
-
异步任务层(dify-worker + dify-worker-beat): 基于 Celery 的任务队列系统。Worker 负责文档解析、向量入库、LLM 批量调用、邮件发送等耗时操作;Beat 作为定时调度器触发周期性任务(如知识库自动同步、日志清理)。
-
Nginx 反向代理: 处理 HTTP 请求的负载均衡和静态资源服务,对外统一暴露端口。
2.2 数据存储层
Dify 的数据层采用「关系型 + 向量型 + 缓存」的三层架构[2][3][4]:
| 组件 | 技术选型 | 职责 |
|---|---|---|
| 关系数据库 | PostgreSQL | 存储应用配置、用户/租户数据、对话历史、工作流 DSL 定义等结构化数据 |
| 向量数据库 | Weaviate(默认)/ Qdrant / Milvus / Pgvector 等 | 存储文档切片后的嵌入向量,支撑 RAG 管道的语义检索 |
| 缓存 | Redis | 会话管理、高频访问缓存、Celery 消息队列 Broker |
| 文件存储 | 本地文件系统 / S3 / 阿里云 OSS 等 | 存储上传的文档、图片等原始文件 |
2.3 核心子系统划分
从功能域角度,API 后端内部可细分为六个子系统[2]:
-
对话系统(Conversation System): 管理 Chat 和 Completion 两种交互模式的会话状态、消息历史和上下文窗口。
-
RAG 知识系统(Knowledge System): 负责文档摄入(PDF/Word/PPT/Markdown/网页)、文本分割、向量化、索引构建和检索全流程。
-
工作流系统(Workflow System): 基于 DAG(有向无环图)的流程编排引擎,提供 DSL 定义、解析、验证和执行全套能力。
-
模型提供商系统(Model Provider System): 统一的模型调用抽象层,将数百种专有/开源 LLM 及推理提供商的 API 差异封装为一致的接口。
-
Agent 系统: 基于 Function Call 和 ReAct 两种范式构建的智能体框架,支持 50 余种内置工具和自定义工具扩展。
-
账户与租户系统: 多租户架构下的用户认证、工作空间管理和 RBAC 权限控制。
3. 核心模块深度剖析
3.1 工作流引擎:基于图的 DSL 设计与解析
工作流引擎是 Dify 技术架构中最具工程深度的模块,其设计遵循「定义与执行分离」原则[5]。
3.1.1 DSL 设计
用户在画布上拖拽生成的每一个工作流,最终被序列化为一个 JSON 对象——这便是 Dify 的领域特定语言(DSL)。一个典型的 DSL 结构包含三个核心要素[5]:
- Graph(图): 顶层容器,包含节点集合(nodes)和边集合(edges)。
- Nodes(节点): 每个节点拥有唯一
id、业务配置data(含type、模型参数、prompt 模板等)、以及position等前端视图数据。 - Edges(边): 定义「source → target」的控制流传递关系。
DSL 在此处扮演了一个有趣的双重角色——它既是前后端的通信契约,又是工作流的持久化格式。前端把画布内容序列化为 DSL JSON 传给后端;后端解析这份 JSON,在校验的同时直接入库。一物二用,减少了一层中间转换。
3.1.2 节点类型体系
Dify 利用工厂模式(Factory Pattern)根据 DSL 中的 type 字段实例化不同的节点类。当前支持的核心节点类型包括[5]:
| 节点类型 | 功能描述 |
|---|---|
| LLM Node | 封装 model_runtime 调用,处理 Prompt 模板渲染和模型推理 |
| Code Node | 在安全沙箱(Sandbox)中执行 Python/Node.js 代码片段,用于数据转换或自定义逻辑 |
| Knowledge Retrieval Node | 调用 RAG 管道,根据用户输入从知识库检索相关文档片段 |
| If/Else Node | 逻辑分支节点,根据条件表达式决定控制流走向 |
| HTTP Request Node | 向外部 API 发起 HTTP 请求,实现与外部系统的集成 |
| Parameter Extractor Node | 从自然语言输入中提取结构化参数 |
| Template Transform Node | 基于 Jinja2 模板将上游输出转换为特定格式的文本 |
| Variable Aggregator Node | 汇聚多个上游分支的输出变量 |
| Start / End Node | 工作流的入口和出口 |
3.1.3 解析与验证流程
WorkflowParser(位于 api/core/workflow/parser.py)承担编译器的角色,其解析流程分为三步[5]:
- 结构反序列化: 将 JSON DSL 转换为 Python 对象图。
- 拓扑验证: 检查连通性(防止孤立节点)、检测环路(工作流本质上是 DAG)、验证起止节点的完整性。
- 变量引用解析(Variable Selector Validation): 这是最复杂的一步。Dify 的 DSL 中变量引用表示为
["node_id", "variable_name"]数组。解析器构建一个「变量池(Variable Pool)」,模拟遍历整张图,收集每个节点可能产生的 Output Schema,从而验证下游引用是否合法——节点 B 只能引用其上游节点 A 的输出变量,且变量名必须在 A 的 Schema 中存在。
3.1.4 图引擎:逻辑与执行分离
Dify 将工作流系统划分为定义层(Definition Layer)和执行层(Execution Layer)[5]:
- 定义层(
core/workflow/graph_engine): 负责构建图结构,管理节点间的依赖关系。它只关心「图的拓扑结构是否正确」,而不关心具体业务逻辑。 - 执行层(
core/workflow/runner): 负责真正的运行时调度,将WorkflowGraph对象按拓扑顺序逐节点执行,管理上下文传递和异常处理。
这种分离带来了三个显著的工程收益:其一,大部分配置错误在运行前即可被拦截,不会产生昂贵的模型调用成本;其二,Parser 的校验逻辑可脱离外部 API 独立测试;其三,新增节点类型只需增加对应的 Node 类和 Schema,无需修改图引擎核心代码。
3.2 RAG 管道:端到端的知识注入链路
Dify 的 RAG 系统采用的是经典的「摄入→索引→检索→生成」四阶段架构。但与 LangChain 需要开发者自行拼装不同——在 Dify 里,RAG 不是一个可选插件,而是内置核心服务[1][2]。这意味着你不需要纠结「用什么 Loader、怎么配 Splitter、选哪个 VectorStore」——上传文档,其余环节自动走完。
文档摄入: 支持 PDF、Word、PPT、Excel、Markdown、TXT、HTML、网页 URL 等十余种格式。后端通过 Celery Worker 异步处理上传文档,调用对应解析器提取文本。对于包含表格和图片的复杂文档,新版「知识管道」(Knowledge Pipeline)允许对处理环节做精细控制——自定义分块策略、表格/图片提取等,专业度上已不亚于专用的文档处理管线[6]。
文本分割与向量化: 文档经解析后进入文本分割阶段。Dify 支持多种分块策略(按字符数、按段落、按语义边界),分块后通过配置的 Embedding 模型(支持 OpenAI、Cohere、HuggingFace 等多种提供商)生成向量表示。
向量存储与检索: 向量嵌入写入 Weaviate/Qdrant/Milvus 等向量数据库。检索阶段支持混合检索策略——结合向量相似度搜索与关键词(BM25)搜索,以提升召回质量。此外,支持通过元数据过滤(如文档来源、上传时间)缩小检索范围。
重排序与上下文组装: 检索结果经可选的 Rerank 模型重排序后,与对话历史、System Prompt 一起组装为完整的 LLM 上下文,注入到模型推理请求中。
3.3 Agent 智能体框架
Dify 的 Agent 系统支持两种主流的智能体范式[1]:
-
Function Call(函数调用): 利用模型原生的 Function Calling 能力(如 GPT-4 的 Function Call、Claude 的 Tool Use),由模型自行决定何时调用工具、调用哪个工具、传递什么参数。Dify 预置了 50 余种内置工具,涵盖 Google 搜索、DALL·E 图像生成、Stable Diffusion、WolframAlpha 计算引擎、网页抓取等。
-
ReAct(推理+行动): 对于不原生支持 Function Call 的模型,Dify 采用 ReAct(Reasoning + Acting)范式——通过精心设计的 Prompt 引导模型在「思考→行动→观察→思考」的循环中自主规划和执行任务。
工具扩展方面,Dify 支持通过 YAML 配置文件快速创建自定义工具(Custom Tool),以声明式的方式描述工具的参数 Schema 和调用接口,使其能够对接企业内部系统或第三方 API。
3.4 Prompt IDE 与模型治理
Prompt IDE: 这是一个可视化 Prompt 编辑界面,变量插入、上下文预览、多模型并行对比——这些能力被整合在同一面板上。用户编辑 Prompt 时可以实时切模型、调参数(temperature、top_p 等),同一条 Prompt 在 GPT-4 和 Claude 上的输出差异一眼可见。这种即时反馈对 Prompt 迭代效率的提升,比「写完→部署→看结果→回来改」的循环要直接得多。
模型提供商系统(Model Runtime): 这是 Dify 实现模型无关性的技术关键。自 0.6 版本起,Dify 自研了 Model Runtime 抽象层,不再依赖 LangChain 的模型封装[1]。该层为每种模型提供商实现统一的接口契约——模型列表获取、参数校验、调用、流式输出、Token 计费——全都收敛到一套 API 之下。目前已覆盖数百种模型及数十家推理提供商,OpenAI API 兼容的自托管模型也能无缝接入。一个实际的好处是:当你从 GPT-4 切换到 Claude 或自部署的 Llama 3 时,应用层代码无需任何修改,只需在配置中切换提供商即可。
4. 技术栈与部署架构
4.1 前端技术栈
| 技术 | 用途 |
|---|---|
| Next.js | React 全栈框架,提供服务端渲染和路由 |
| React + TypeScript | UI 组件开发,类型安全 |
| ReactFlow | 工作流画布的可视化编排(节点拖拽、连线、缩放) |
| Tailwind CSS | 原子化 CSS 框架 |
4.2 后端技术栈
| 技术 | 用途 |
|---|---|
| Python 3.10+ | 主开发语言 |
| Flask + Gunicorn | Web 框架与 WSGI 服务器 |
| Celery + Redis | 异步任务队列 |
| PostgreSQL | 核心关系型数据库 |
| Weaviate / Qdrant / Milvus | 向量数据库(按部署环境可选) |
| uv(自 v1.3.0) | Python 包管理器,替代 Poetry |
4.3 部署模式
Dify 支持从轻量级到企业级的多种部署方式[1]:
-
Docker Compose 单机部署: 最小系统要求 CPU ≥ 2 Core、RAM ≥ 4 GiB,通过一行
docker compose up -d即可拉起全部 11 个容器(5 个核心服务 + 6 个依赖组件)。 -
Kubernetes 集群部署: 社区提供了多套 Helm Chart 和 YAML 资源清单,支持在 K8s 上进行高可用部署。
-
云平台一键部署: 支持 AWS CDK、Azure Terraform、Google Cloud Terraform、阿里云计算巢/数据管理 DMS 等云原生部署方案。
-
Dify Cloud(SaaS): 官方提供的云服务,沙盒计划包含 200 次免费 GPT-4 调用,零配置即可使用。
-
AWS Marketplace 高级版: 面向中小企业的 AMI 产品,支持自定义品牌和 Logo。
5. LLMOps 与可观测性
Dify 的 LLMOps 能力围绕「监控→标注→改进」的闭环设计[1]:
-
日志与性能监控: 记录每次模型调用的输入、输出、延迟、Token 消耗、费用等元数据,支持按时间、应用、模型等维度聚合分析。社区提供了 Grafana 仪表板方案,可直接将 PostgreSQL 作为数据源进行多粒度监控。
-
标注与反馈: 支持对模型输出进行人工标注(好评/差评/修正),标注数据可用于后续的 Fine-tuning 或 Prompt 优化。
-
A/B 测试与持续改进: 通过 Prompt IDE 的多模型对比能力,可在生产数据和标注的基础上持续迭代 Prompt 模板、调整检索策略、切换模型。
-
外部可观测性集成: Dify 集成了 Opik 和 Langfuse 等外部 LLM 可观测性平台,可将日志和 Trace 数据导出到专业监控工具中进行深度分析。
6. 竞品横向对比
为清晰呈现 Dify 在 LLM 应用开发生态中的定位,以下将其与三条技术路线上的代表性产品做横向对比[6][7]:
6.1 与 LangChain 的对比
LangChain 本质上是一个编程框架(代码库),其核心价值在于极致的灵活性和控制力——开发者可以用 LCEL(LangChain Expression Language)以声明式方式串联步骤,理论上可构建任意复杂的 AI 应用。但代价是陡峭的学习曲线(需理解 Chain、Agent、LCEL 等概念)和自行承担部署运维开销。
Dify 则将 LangChain 的能力封装为可视化平台。关键区别在于:LangChain 给的是「乐高零件」,开发者需自己拼装;Dify 给的是「预组装模块 + 图形化操作面板」,开发者聚焦业务逻辑即可。两者的关系并非替代,而是面向不同抽象层次的开发群体——LangChain 适合需要全栈控制权的工程师团队,Dify 适合追求快速落地的企业和个人开发者[6]。
6.2 与 Coze 的对比
Coze(字节跳动)是零代码 SaaS 平台,以极低的使用门槛和社交渠道一键发布能力著称。但其定制深度受限于平台提供的插件和功能,且数据存储在平台服务器上,对数据安全要求高的企业不够友好[6]。
Dify 的核心优势在于:开源、支持私有化部署、数据完全自主可控。同时,Dify 的工作流引擎(支持代码节点、HTTP 节点等自定义逻辑)和工具扩展机制(YAML 声明式自定义工具)提供了远超 Coze 的定制深度。
6.3 与 Flowise 的对比
Flowise 同样是开源的可视化 LLM 编排工具,但其定位更偏向 LangChain 的可视化前端——本质上是将 LangChain 的 Chain 和 Agent 配置为可视化节点。Flowise 的节点直接映射到 LangChain 的概念(如 LLM Chain、Conversation Chain、Vector Store),因此在生态对接上强于 Dify,但在独立性和企业级特性(多租户、RBAC、标注系统、可观测性)上弱于 Dify。
6.4 综合对比矩阵
| 维度 | LangChain | Dify | Coze | Flowise |
|---|---|---|---|---|
| 产品形态 | 编程框架 | 开源应用平台 | 零代码 SaaS | 开源可视化工具 |
| 使用方式 | 写代码 | 可视化 + 可扩展代码 | 纯可视化配置 | 可视化配置 |
| 灵活性 | 极高 | 高 | 中低 | 中 |
| 学习门槛 | 高 | 中 | 低 | 中低 |
| 私有化部署 | 自行实现 | 原生支持 | 不支持 | 支持 |
| 数据主权 | 自主控制 | 自主控制 | 平台托管 | 自主控制 |
| 多租户/RBAC | 无 | 有 | 有 | 无 |
| LLMOps | 需自建 | 内置 | 基础 | 无 |
| 工具生态 | 极丰富 | 50+ 内置 + 自定义 | 平台商店 | 依赖 LangChain |
| LangChain 依赖 | 自身 | 无(自研 Runtime) | 无 | 强依赖 |
| 典型用户 | 高级开发者 | 企业IT/ISV/个人开发者 | 业务人员/初学者 | LangChain 用户 |
7. 局限与展望
尽管 Dify 在架构完整性上表现出色,但在以下几个方向仍有明显短板:
7.1 多智能体协作的缺失。 Dify 当前的 Agent 能力局限在单 Agent 场景——一个应用里只能放一个 Agent 节点,通过 ReAct 或 Function Call 执行任务。一旦需求变成「让三个 Agent 分别扮演产品经理、架构师和程序员,协作完成一个功能设计」,Dify 就捉襟见肘了。这一领域目前由 AutoGen、CrewAI 等专用多智能体框架主导。Dify 要在 Agent 编排层面做架构扩展,其工作流引擎的 DAG 模型本身也需重新审视。
7.2 工作流引擎的表达能力边界。 Dify 的工作流基于 DAG 设计,天然排斥循环结构。环路检测作为基础检查手段没有问题,但某些真实场景——迭代式检索(「检索→评估相关性→不够→重新检索」)、自反思 Agent 循环——确实需要循环语义。Dify 通过 Agent 节点内部的 ReAct 循环做了部分弥补,但这是一种「节点内的循环」而非「工作流层的循环」,两类循环在表达能力上有本质的区别。
7.3 社区生态的成熟度差距。 与 LangChain 数以千计的第三方集成相比,Dify 的插件和工具生态仍显单薄。YAML 声明式工具创建降低了扩展门槛,但缺的是一个类似 npm 或 PyPI 的插件市场——没有分发渠道,工具的共享和复用就形不成网络效应。这是一个社区运营问题而非技术问题,但影响同样深远。
7.4 多模态能力的渐进式演进。 知识库已支持图片内容提取,但也就到此为止了。视频理解、语音交互等方向的原生支持还停留在规划阶段。考虑到多模态模型(GPT-4o、Gemini 等)在 2024—2025 年的快速成熟,这一短板的紧迫性在上升。
展望: 从 v1.x 的迭代方向来看,Dify 的路线图指向一个清晰的趋势:企业化。更强的知识管道、更稳的工作流引擎、更细粒度的审计和权限体系——这些都是在为「生产落地」而非「原型演示」做准备。纳入 Linux 基金会托管也是一个信号:项目正从创业公司驱动的开源产品,走向社区共建的基础设施。在 LLM 应用从「能跑就行」进入「能扛住生产」的阶段,Dify 所代表的开源可控 + 低门槛路线,恰好契合了大量企业「既不想被平台绑定、又不想从零造轮子」的真实诉求。
8. 结语
Dify 在 LLM 应用开发平台的版图中占据了一个微妙而关键的位置。说它微妙,是因为它恰好卡在两条主流路线之间——比 LangChain 多了开箱即用,比 Coze 多了开源可控。说它关键,是因为这种「中间路线」在工程上并不容易实现:你既要提供足够的抽象来降低门槛,又不能过度封装而丧失灵活性。
从技术架构来看,Dify 做出了几个经得起推敲的决策。自研 Model Runtime 和 Workflow Engine 固然增加了初期开发成本,但换来了不受上游框架制约的独立性。定义与执行分离的工作流引擎设计,让校验和执行各司其职——错误在调用模型之前就被拦住了,这在 Token 按量计费的场景下,是实用主义而非教条主义的胜利。RAG 管道作为内置核心服务而非可选插件,虽然牺牲了模块替换的自由度,却大幅降低了集成复杂度。
说到底,Dify 的价值不仅在于它是一个好用的工具,更在于它示范了一种「系统性地构建 LLM 应用基础设施」的方法。对于正在选型或准备基于 Dify 二次开发的团队而言,理解其架构取舍——哪里做了抽象、哪里选择了务实的妥协——可能比直接上手使用更有长远意义。
参考文献
[1] LangGenius. Dify README (zh-CN). https://github.com/langgenius/dify/blob/main/docs/zh-CN/README.md
[2] Dify 系统架构分析. CSDN. https://blog.csdn.net/feeltouch/article/details/158741891
[3] Dify 核心技术栈. 博客园. https://www.cnblogs.com/farwish/p/18762336
[4] Dify Backend API Setup and Run. https://github.com/langgenius/dify/blob/main/api/README.md
[5] Dify 源码解析 (四):Workflow 引擎(上)—— 基于图的 DSL 设计与解析. CSDN. https://blog.csdn.net/exlink2012/article/details/155260984
[6] Dify和LangChain和Coze对比. CSDN. https://blog.csdn.net/qq_41067796/article/details/156361203
[7] LangChain、Dify、Coze...国内外主流LLM应用开发平台选型对比. 什么值得买. https://post.smzdm.com/zz/p/akolnzq4/
报告信息
- 撰写日期:2026 年 6 月 17 日
- 字数:约 6,200 字
- 研究方法:文档分析 + 源码解析 + 竞品对比
讨论回复
1 条回复推荐
智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。