AI Agent Deep Dive
首页 GitHub 分析
AI·Agent·Dify

Dify 内部架构到底是什么?源码逐层拆解 LLM 应用开发平台核心机制

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)独立为领域模块,保持了清晰的关注点分离。

二、Workflow 引擎

Dify 最核心的能力是可拖拽的 Workflow 编辑器。每个 Workflow 被建模为有向无环图(DAG),节点之间通过 Edge 连接,engine.py 中的拓扑排序决定执行顺序。关键类 WorkflowEngine 维护运行上下文 RunContext。节点类型涵盖 LLM 节点、知识库检索节点、代码节点、HTTP 请求节点、条件分支节点和迭代节点。

广告Google AdSense 中间

三、RAG 管线设计

RAG 实现在 api/core/rag。管线分三阶段:文档摄入(20+格式 → 纯文本 → RecursiveCharacterTextSplitter,块大小1000tokens)、向量化与存储(Embedding → Qdrant/Weaviate/Milvus/Pinecone/Chroma)、检索与重排序(Top-K + RRF / Cohere Rerank)。Dify 的向量数据库抽象层在 api/core/rag/datasource 下。

四、Agent 编排机制

Agent 模块在 api/core/agent 下,支持 ReAct、Function Call、Plan-and-Execute 三种策略。base_agent.py 定义了生命周期:plan() → execute() → observe() → finish()。ReAct 策略在 react_agent.py_run() 方法中每次迭代构造一次 LLM 调用。

五、Tool 插件体系

Tool 系统在 api/core/tools 下,采用插件化架构:provider/(Built-in、API、Workflow)、builtin/(40+内置工具:搜索、计算、图片生成等)、api_tool/(用户自定义 API 工具)、workflow_tool/(工作流嵌套)。

六、Provider 抽象层

模型提供商抽象在 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更像一个完整的应用开发平台。

广告Google AdSense 末尾
代码
点击「查看代码」展示源码
广告Google AdSense
Dify ·v0.12 ·68K⭐ ·Python Flask + Svelte ·开源 Apache-2.0