Dify 是目前增长最快的开源 LLM 应用开发平台之一。与 LangChain 这类编排库不同,Dify 提供了完整的可视化 Workflow 引擎、RAG 管线、Agent 编排和插件体系。本文直接从源码入手,逐层拆解其核心架构设计与实现逻辑。
Dify 采用经典的分层架构,从上到下依次为:API 层(Flask RESTful)、Service 层(Workflow引擎、对话管理)、Engine 层(LLM 调用、RAG 检索、Tool 执行)、Provider 层(50+模型)、Storage 层(PostgreSQL + Redis + 向量数据库)。源码入口在 api/app.py,核心模块集中在 api/core 目录下。
与 OpenAI 的 Assistants API 相比,Dify 的优势在于完整的可视化编排和自托管能力。架构上继承了传统 Django 应用的 MVC 分层,但将 AI 特定的能力(RAG、Agent、Tool)独立为领域模块,保持了清晰的关注点分离。
Dify 最核心的能力是可拖拽的 Workflow 编辑器。每个 Workflow 被建模为有向无环图(DAG),节点之间通过 Edge 连接,engine.py 中的拓扑排序决定执行顺序。关键类 WorkflowEngine 维护运行上下文 RunContext。节点类型涵盖 LLM 节点、知识库检索节点、代码节点、HTTP 请求节点、条件分支节点和迭代节点。
RAG 实现在 api/core/rag。管线分三阶段:文档摄入(20+格式 → 纯文本 → RecursiveCharacterTextSplitter,块大小1000tokens)、向量化与存储(Embedding → Qdrant/Weaviate/Milvus/Pinecone/Chroma)、检索与重排序(Top-K + RRF / Cohere Rerank)。Dify 的向量数据库抽象层在 api/core/rag/datasource 下。
Agent 模块在 api/core/agent 下,支持 ReAct、Function Call、Plan-and-Execute 三种策略。base_agent.py 定义了生命周期:plan() → execute() → observe() → finish()。ReAct 策略在 react_agent.py 的 _run() 方法中每次迭代构造一次 LLM 调用。
Tool 系统在 api/core/tools 下,采用插件化架构:provider/(Built-in、API、Workflow)、builtin/(40+内置工具:搜索、计算、图片生成等)、api_tool/(用户自定义 API 工具)、workflow_tool/(工作流嵌套)。
模型提供商抽象在 api/core/model_runtime 下,覆盖 LLMs、text_embeddings、rerank、speech2text、tts、moderation 六类模型。每个提供商实现统一的 BaseModelRuntime 接口,通过工厂模式加载。新增一个提供商只需实现 validate_credentials() 和 generate() 两个方法。
Python + Flask — AI应用后端,Python在LLM/NLP领域有天然优势。PostgreSQL — 结构化数据+事务一致性需求强。Celery — 长耗时LLM调用和文档索引异步执行。前端 Svelte — 团队偏好,包体积比React小40%。与LangChain的轻量编排库定位不同,Dify更像一个完整的应用开发平台。