从零开始学Dify - API 后端架构原来是这样设计的

Posted by Yezhiwei on May 4, 2025

详细介绍了 Dify API 后端服务的架构,包括其核心组件、服务组织、数据流和集成点。API 后端是 Dify 的中核心系统,将 Web 前端与各种 AI 模型和数据存储系统连接起来。

API 后端架构概述

Dify 的 API 后端基于现代 Python 技术栈构建,并以 Flask 作为 Web 框架。它采用模块化架构,在路由、业务逻辑和数据访问之间清晰地划分了关注点。该系统设计为水平可扩展,并配备无状态 API 服务器和处理后台任务的 Worker。

应用程序启动过程

Dify API 后端遵循标准 Flask 应用程序结构,并采用工厂模式创建应用程序,允许针对开发、测试和生产环境进行不同的配置。

应用程序以 API 服务器模式或工作模式启动,由 MODE 环境变量决定:

  1. API 模式 :通过 Flask/Gunicorn 处理 HTTP 请求
  2. 工作模式 :使用 Celery 处理后台任务

服务架构

API 后端由多个服务组成,共同提供 Dify 的完整功能。

核心组件

Flask 应用程序和扩展

Flask 应用程序是 API 服务的核心技术,并有多个扩展提供附加功能:

  • Flask-SQLAlchemy :用于数据库交互的 ORM
  • Flask-Migrate :数据库迁移
  • Flask-RESTful :RESTful API 框架
  • Flask-CORS :跨域资源共享
  • Flask-Login :用户身份验证
  • Celery :异步处理的任务队列

配置系统

Dify 的配置由一个组织良好的系统处理,该系统使用 Pydantic 进行验证和类型检查。配置从环境变量加载,并分组到相关组件中:

数据库模型

Dify 的数据模型围绕关键实体:

  • 帐户 :用户帐户和身份验证
  • 租户 :多租户支持
  • App :基于平台构建的 AI 应用
  • 数据集 :RAG 应用程序的知识库
  • 文档 :数据集中的文件和内容
  • 对话 :聊天历史和上下文
  • 提供者 :LLM 提供者配置

API 路由系统

API 路由按功能区域和 RESTful 端点进行组织。主要 API 类别包括:

  • 控制台 API(Console API) :由 Web 控制台用于管理
  • App API :由基于 Dify 构建的应用程序使用
  • 服务 API(Service API) :内部服务和集成

核心服务组件

向量数据库抽象

Dify 通过抽象层为多个向量数据库提供统一的接口,实现向量数据库提供商之间的无缝切换。

存储系统抽象

与向量数据库抽象类似,Dify 为不同的存储后端提供了统一的接口:

异步任务处理

Celery 用于异步任务处理,并使用 Redis 作为消息代理。主要任务类别包括:

  • 数据集索引和处理
  • 用于长时间运行操作的 LLM 生成
  • 电子邮件通知
  • 操作跟踪和日志记录

部署基础设施

Dify 的后端使用 Docker 进行容器化,并为不同组件提供单独的服务。标准部署包括:

关键部署组件:

  • API 容器(API Container) :主 Flask 应用程序
  • 工作者容器(Worker Container) :用于后台任务的 Celery 工作者
  • Web 容器(Web Container) :NextJS 前端应用程序
  • 数据库容器(Database Container) :PostgreSQL 数据库
  • Redis 容器(Redis Container) :用于缓存的 Redis 和 Celery 代理
  • 沙盒容器(Sandbox Container) :用于代码执行的隔离环境
  • 守护程序插件(Plugin Daemon) :管理插件执行
  • SSRF 代理(SSRF Proxy) :出站连接的安全层
  • Nginx :反向代理和 SSL 终止

安全注意事项

API 后端包含几个安全功能:

  1. SSRF 代理(SSRF Proxy) :通过代理出站连接来防止服务器端请求伪造
  2. 沙盒隔离(Sandbox Isolation) :代码执行发生在隔离的沙盒容器中
  3. 身份验证(Authentication) :API 密钥和基于 JWT 的身份验证
  4. CORS 配置(CORS Configuration) :可配置跨域资源共享
  5. 环境变量安全(Environment Variable Security) :通过环境变量管理敏感凭据

开发和测试

API 后端包括全面的测试基础设施:

  • 单元测试(Unit Tests) :单独测试各个组件
  • 集成测试(Integration Tests) :测试组件交互
  • VDB 测试(VDB Tests) :测试向量数据库实现
  • 工作流测试(Workflow Tests) :测试工作流执行

总结

Dify 的 API 后端架构展现了结构良好的模块化设计,具有可扩展性和灵活性。通过抽象存储和向量数据库系统,无论使用何种底层技术,它都能提供一致的接口。API 服务器和工作器之间的分离可实现高效的资源利用率并提高可靠性。

配置系统对应用程序的各个方面提供了细粒度的控制,使其能够适应不同的部署环境和用例。

推荐阅读

参考资料

https://github.com/langgenius/dify

欢迎关注公众号,更及时的接收消息,后续会继续写一些相关 LLM 的文章。