后台代码总览
目录~\dify\api里是dify的后台代码,使用python实现,每个模块内容按文件夹分类如下表所示。
| 模块(文件夹) | 主要职责与功能 |
|---|---|
| configs | 配置管理,存放环境变量、默认参数、插件配置等静态或全局配置。 |
| constants | 各类全局常量与枚举,如状态码、类型标识、默认值等。 |
| contexts | 请求/业务上下文管理,用于在接口层传递状态、用户信息、追踪等上下文数据。 |
| controllers | 控制层(Controller),处理外部 HTTP 请求、解析参数、调用服务、返回响应。 |
| core | 核心模块实现,包含基础运行时、模型调度以及插件基础设施等功能块(如 model_runtime)。 |
| docker | 与 Docker 相关的配置文件,如 docker-compose.yml、容器构建和环境部署脚本。 |
| events | 事件驱动逻辑,处理系统内异步事件、消息发布/订阅机制、钩子回调等。 |
| extensions | 外部插件或扩展机制代码,比如自定义工具、集成外部服务的插件入口。 |
| factories | 工厂类/函数,用于根据类型创建服务、存储、模型调用适配器等实例。 |
| fields | 数据字段定义与验证逻辑,可能包括 DTO、schema、参数校验类型等。 |
| libs | 通用工具库,例如日志、网络请求、加密、通用 util 函数等共享代码。 |
| migrations | 数据库迁移脚本,用于创建表、变更 schema、初始化元数据等。 |
| models | ORM 模型定义,与数据库表结构对应,定义实体结构与关系。 |
| repositories | 数据访问层(Repository),封装对 ORM 模型的 CRUD 操作、查询逻辑等。 |
| schedule | 定时任务调度脚本,如周期性执行的数据清理、任务触发、报告生成等。 |
| services | 业务层(Service),包含核心业务逻辑,与 controllers 层交互并治理过程。 |
| tasks | 异步任务或后台 worker 逻辑,用于处理长时间运行或需要异步执行的任务。 |
| templates | 文本模板、邮件模板、前端渲染模板等用于构建输出内容(如邮件、报告)。 |
| tests | 单元测试与集成测试代码,针对 controllers/services/models 等模块进行测试。 |
目录~\dify\api\core里是dify的后台代码核心部分,使用python实现,每个模块内容按文件夹分类如下表所示。
| 模块名称 | 主要职责与功能 |
|---|---|
| agent | 实现调度和执行 Agent 逻辑,支持基于 ReAct 或 Function‑calling 的智能代理行为,协调模型和工具调用。 |
| app | 定义“应用”运行时机制(如 BaseAppRunner),将用户输入映射到自定义流程执行,引导整个应用逻辑流程 。 |
| base | 提供核心基类和抽象组件,供其他模块继承,比如基础 Runner、执行器等共用逻辑。 |
| callback_handler | 管理模型或插件调用的回调机制,处理异步调用结果的回传、状态更新等流程。 |
| entities | 定义核心业务实体的数据模型结构(非数据库 ORM),如 Agent 状态、工具接口、节点抽象等 。 |
| errors | 定义核心错误类型与异常类,用于统一捕获、封装与上报核心层发生的问题。 |
| extension | 实现系统扩展机制基础,加载插件、模型 provider 插件、工具或自定义扩展的注册与调度逻辑。 |
| external_data_tool | 封装外部数据源读取工具逻辑,如抓取网页、调用外部 API 获取输入,作为 workflow 的输入变量来源。 |
| file | 处理与文件相关的通用逻辑,如 upload/download、文件类型检测、文本提取工具封装等。 |
| helper | 包含共用工具函数,如数据转换、时间处理、格式化帮助方法等跨模块通用辅助。 |
| llm_generator | 执行与 LLM 模型交互的业务逻辑,封装模型调用、生成策略、流式输出等统一接口。 |
| mcp | 负责 Model Context Protocol(MCP)相关流程处理(即 ScaleMCP 协议),实现上下文同步、工具交互决策的核心支撑模块 。 |
| memory | 管理对话或工作流中的记忆机制(如长期短期记忆、上下文缓存、历史记录管理等)。 |
| model_runtime | 提供统一的模型调用接口,与不同提供商(OpenAI、Anthropic、Azure、Self‑hosted)交互的鉴权与调用实现 。 |
| moderation | 实现内容审核模块,对输入/输出文本进行安全过滤、敏感内容拦截或分类判断。 |
| ops | 操作监控与运维支持,如调用 traces、日志记录、运行指标汇总等系统观察能力。 |
| plugin | 管理自定义插件(工具或模型扩展)逻辑,包括插件加载、配置注册、生命周期调用等。 |
| prompt | Prompt 构建相关逻辑,如模板渲染、变量填充、提示词拼接与构造策略。 |
| rag | RAG(检索增强生成)执行模块,处理索引检索、上下文拼接、文档检索与搭配生成流程。 |
| repositories | 和 api/repositories 不同,core 下的 repositories 主要管理核心组件元数据缓存、状态储存接口等核心层内部存储逻辑。 |
| tools | 内置工具集合(如搜索、算术、APIs 调用工具等),以及调度这些工具调用的封装逻辑。 |
| variables | 管理工作流中变量的定义、类型系统、绑定与流转规则,如结果变量、系统变量、用户变量。 |
| workflow | 构建执行流程引擎,包括节点(nodes)定义、执行逻辑、错误处理、分支调度等核心工作流调度机制 。 |
以workflowrun为例子说明代码流向
核心组件说明
从用户点击工作流开始运行,到工作流每个节点开始运行的所有代码路径,如下图所示。

涉及的模块主要有以下三个:
- controllers :负责接收 /workflows/run 的 HTTP 请求 → 验证输入 → 调用 services;
- services :业务逻辑层,调用核心执行器启动 workflow;
- core/workflow :真正的工作流调度引擎,包括节点分支调度、变量处理、异常处理、执行状态跟踪等核心机制;
代码流向说明
controllers层
代码中controller控制层有两处WorkflowRunApi绑定到flask api上。
(1) service_api部分,对用用户直接命令调用:
bp = Blueprint("service_api", __name__, url_prefix="/v1")
api = ExternalApi(bp)
class WorkflowRunApi(Resource):
def post(self, app_model: App, end_user: EndUser):
api.add_resource(WorkflowRunApi, "/workflows/run")
(2) web部分,对应用户web页面上操作:
bp = Blueprint("web", __name__, url_prefix="/api")
api = ExternalApi(bp)
class WorkflowRunApi(WebApiResource):
def post(self, app_model: App, end_user: EndUser):
api.add_resource(WorkflowRunApi, "/workflows/run")
services层
WorkflowRunApi.post() 函数将要调用services业务层的AppGenerateService.generate()。
AppGenerateService.generate()调用core核心层的WorkflowAppGenerator.generate()。
core层
WorkflowAppGenerator.generate()->_generate()->_generate_worker()调用WorkflowAppRunner.run()调用WorkflowEntry.run()。GraphEngine.run()调用BaseNode.run(),调度到10来种类型的Node。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




