Dify-3:系统架构

发布于:2025-05-20 ⋅ 阅读:(22) ⋅ 点赞:(0)

系统架构

概述了 Dify 的系统架构,解释主要组件如何协同工作以提供大语言模型(LLM)应用开发平台。内容涵盖高层架构、部署选项、核心子系统和外部集成。

1. 整体架构

Dify 采用基于微服务的架构,将前端 Web 应用与后端 API 服务分离。系统设计支持可扩展性、可部署性,并能适应多种环境(包括自托管和云部署)。

高层组件概览

架构组成:

  1. Web 前端:基于 Next.js 的 Web 应用,为开发者提供应用创建界面,为终端用户提供交互界面。
  2. API 后端:基于 Flask 的 API 服务器,处理前端请求并协调核心子系统。
  3. 核心子系统
    • 会话系统:管理聊天与补全交互
    • RAG 知识系统:处理文档处理、索引与检索
    • 工作流系统:支持复杂 AI 工作流创建
    • 模型供应系统:集成多 LLM 供应商
    • 账户与租户系统:管理用户、工作空间及认证
  4. 外部集成
    • LLM 供应商(OpenAI、Azure、Anthropic 等)
    • 向量数据库(Weaviate、Qdrant、Milvus 等)
    • 关系型数据库(PostgreSQL)
    • 缓存系统(Redis)

2. 部署架构

Dify 使用 Docker 实现容器化部署,支持灵活环境部署。系统由多个可独立扩展的服务组成。

关键部署组件

  • API 服务:提供 REST API 端点的 Flask 应用(端口 5001,镜像 langgenius/dify-api)。
  • Web 服务:Next.js 前端应用(端口 3000,镜像 langgenius/dify-web)。
  • 工作节点服务:处理异步任务的 Celery 工作节点(如文档处理与索引)。
  • 支持服务
    • sandbox(安全代码执行)
    • plugin插件守护进程(管理插件)
    • SSRF 代理(防御服务端请求伪造攻击)
  • 数据库与缓存
    • PostgreSQL(结构化数据)
    • Redis(缓存与 Celery 任务队列)
    • 向量数据库(可配置:Weaviate、Qdrant 等)
  • Nginx:作为 Web 和 API 服务的反向代理。

3. 核心子系统

3.1 API 后端架构

基于 Flask 的模块化设计,通过服务和控制器处理业务逻辑。

关键组件

  • 入口点app.py(主入口)和 app_factory.py(Flask 应用工厂)。
  • 控制器层:位于 api/controllers/,实现 REST API 端点。
  • 服务层:位于 api/services/,封装核心业务逻辑。
  • 异步处理:Celery 工作节点处理文档索引等资源密集型操作。
3.2 Web 前端架构

基于 Next.js 和 React 的现代化响应式界面。

关键组件

  • Next.js 应用:位于 web/app/,支持服务端渲染。
  • 组件库:可复用的基础与功能组件。
  • 状态管理:使用 Zustand 管理复杂 UI 状态。
  • API集成:与后端API进行通信 使用SWR进行数据获取和缓存以及为不同的端点实现API客户端。
3.3 RAG 知识系统

负责文档处理、嵌入存储和检索,支持 LLM 上下文增强。

关键功能

  • 数据集服务:管理文档数据集
    • 创建并配置数据集
    • 处理文档上传与处理
  • 索引运行器:通过ETL管道处理文档
    • 提取:从各种文档格式中获取文本
    • 转换:分块、清理并准备文本
    • 加载:创建嵌入并存储到向量数据库中
  • 检索系统:支持多种检索方法
    • 使用向量嵌入进行语义搜索
    • 关键词搜索
    • 全文搜索
    • 结合多种方法的混合方法
  • 向量存储工厂:抽象向量数据库实现
    • 支持多种向量数据库(如Weaviate、Qdrant、Milvus等)
    • 为创建和查询向量存储提供统一接口
3.4 模型供应系统

集成多 LLM 供应商并提供统一接口。

关键功能

  • 模型管理器:模型交互的核心接口
    • 支持不同的模型类型(大语言模型、嵌入模型、重排模型等)
    • 处理模型选择和回退策略
  • 供应商管理器:管理供应商配置
    • 安全存储API密钥和端点
    • 支持系统管理和用户提供的凭证
  • 模型类型
    • 大语言模型(LLMs):用于文本生成
    • 文本嵌入模型:用于向量表示
    • 重排模型:用于提高搜索相关性
    • 文本转语音:用于音频生成
    • 语音转文本:用于转录
  • 供应商集成
    • 支持20多家模型供应商
    • 为所有供应商提供标准化接口
    • 凭证管理和API密钥轮换
3.5 对话系统

对话系统负责管理用户与大型语言模型(LLM)之间的交互,处理聊天历史记录、消息格式化和上下文管理。

关键功能

  • 对话服务:管理对话会话
    • 创建和更新对话
    • 维护对话状态和元数据
  • 消息服务:处理单独的消息
    • 处理用户输入
    • 格式化模型响应
    • 存储消息历史
  • 应用运行器:实现不同的应用类型
    • Chat:支持多轮对话
    • Completion:处理单次交互
    • Agent Chat:支持使用工具的代理交互
    • Workflow:执行复杂多步骤流程
  • 集成点
    • 应用配置
    • 文本生成的模型集成
    • 知识检索的RAG系统
    • 代理能力的工具支持
3.6 工作流系统

工作流系统支持创建和执行复杂的AI流程,将LLM交互与工具、分支逻辑和数据转换相结合。

关键组件

  • 工作流编辑器
    • 基于节点的可视化编辑界面
    • 配置节点参数
    • 测试和调试工作流
  • 工作流服务
    • 存储工作流配置
    • 管理版本控制与发布
  • 工作流运行器
    • 遍历工作流图
    • 管理执行状态
    • 处理错误恢复
  • 节点类型
    • LLM节点:文本生成
    • 工具节点:调用外部工具和插件
    • 分支节点:条件逻辑控制
    • 循环节点:迭代处理
    • 数据转换:数据操作
    • 并行节点:并发执行
    • HTTP请求节点:外部API调用

4. 存储与数据库

Dify使用多种存储系统来管理不同类型的数据。

4.1 PostgreSQL

存储结构化数据,关键表包括用户、应用、数据集、会话和工作流。

关键组件

  • 数据库配置:
    • 可配置的连接参数
    • 为提升性能的连接池
    • 对pgvector扩展的支持(可选)
  • 关键表:
    • 用户与账户
    • 租户(工作区)
    • 应用程序
    • 数据集与文档
    • 对话与消息
    • 工作流和节点
    • 提供商配置
4.2 向量数据库

Dify支持多种向量数据库选项,用于存储RAG系统中使用的嵌入。

关键特征:

  • 向量工厂抽象

    • 统一接口:为不同向量数据库提供统一接口
    • 动态实例化:基于配置实现动态实例化
    • 运行时切换:支持运行时切换向量数据库
  • 支持的向量数据库

    • Weaviate(默认)
    • Qdrant
    • PGVector(PostgreSQL 扩展)
    • Milvus
    • MyScale
    • OpenSearch
    • 其他 15+ 选项
  • 向量数据存储

    • 文本嵌入向量:存储生成的文本嵌入
    • 文档元数据:关联文档的元数据信息
    • 节点 ID 检索:存储用于检索的节点标识符
    • 内容哈希去重:通过内容哈希值实现去重功能
4.3 文件存储

Dify使用一个可配置的存储系统来进行文件上传和文档存储。

主要特性:

  • 存储工厂模式:

    • 对不同存储后端的抽象
    • 统一文件操作接口
    • 支持运行时配置
  • 支持的存储选项:

    • OpenDAL(默认,支持多后端)
    • Amazon S3
    • Azure Blob Storage
    • Google Cloud Storage
    • 阿里云OSS
    • 腾讯云COS
    • 本地文件系统
    • 其他多种存储提供商
  • 使用场景:

    • RAG系统的文档上传
    • 用户文件附件存储
    • 应用程序资源管理

5. 系统配置

Dify使用了一套全面的配置系统,该系统支持环境变量、配置文件和运行时设置。

关键配置机制

  • 配置来源

    • 环境变量(Environment Variables)
    • .env 配置文件
    • Docker 环境变量
    • 命令行参数(Command-line Arguments)
  • 配置分类

    • 功能配置:控制应用程序特性开关
    • 中间件配置:数据库连接、缓存策略、存储设置
    • 部署配置:运行时参数(如端口、并发数)
    • 安全配置:身份验证、数据加密、访问控制
  • 技术实现

    • Pydantic 配置类:基于类型注解的配置建模
    • 强类型校验:自动验证配置数据类型
    • 环境感知加载:根据运行环境动态载入配置
    • 默认值机制:提供安全的缺省参数配置

6. 开发与部署流程

介绍Dify的开发和部署工作流程。

工作流

本地开发 → 测试 → PR 审查 → 合并至主分支 → CI/CD(GitHub Actions) → 构建镜像 → 部署(Docker/K8s)  

核心要点:

  • 开发流程:

    • 使用Docker Compose进行本地开发
    • 本地测试运行
    • 代码审查制的Pull Request流程
  • CI/CD管道:

    • GitHub Actions自动化流程
    • 代码风格检查
    • 单元测试与集成测试
    • Docker镜像构建与推送
  • 部署方案:

    • Docker Compose部署(推荐方案)
    • Kubernetes集群部署
    • 手动配置部署

网站公告

今日签到

点亮在社区的每一天
去签到