dify二開之組件調用關系
Dify 系統架構文檔
概述
Dify 是一個易于使用的 LLMOps 平臺,旨在幫助開發者構建、測試和部署 AI 應用。系統采用前后端分離的架構,后端基于 Python Flask 框架構建,前端使用 Next.js 技術棧。
整體架構圖
graph TB
subgraph "前端層"
A[Web 瀏覽器]
B[Next.js 前端]
A --> B
end
subgraph "API 網關層"
C[API 網關/負載均衡]
end
subgraph "應用服務層"
D[Flask 應用服務器]
E[Flask 應用服務器]
F[Flask 應用服務器]
end
subgraph "核心服務層"
G[任務隊列 Celery]
H[緩存系統 Redis]
I[數據庫 PostgreSQL]
J[向量數據庫]
K[對象存儲]
end
subgraph "第三方服務"
L[大語言模型 API]
M[外部數據源]
N[監控服務]
end
B --> C
C --> D
C --> E
C --> F
D --> G
D --> H
D --> I
D --> J
D --> K
E --> G
E --> H
E --> I
E --> J
E --> K
F --> G
F --> H
F --> I
F --> J
F --> K
G --> H
G --> I
G --> J
G --> K
D --> L
D --> M
D --> N
E --> L
E --> M
E --> N
F --> L
F --> M
F --> N
核心組件
1. Web 前端 (Next.js)
- 基于 Next.js 構建的單頁應用
- 提供用戶友好的界面用于創建和管理 AI 應用
- 通過 RESTful API 與后端通信
2. API 網關
- 負載均衡請求到多個應用服務器實例
- 處理 SSL 終止
- 提供限流和安全防護
3. 應用服務器 (Flask)
- 基于 Python Flask 框架構建
- 處理 HTTP 請求和業務邏輯
- 包含多個組件模塊
3.1 控制器層 (Controllers)
處理 HTTP 請求,包括:
- Console API: 管理后臺接口
- Service API: 服務接口
- Web API: 前端接口
- Inner API: 內部接口
- Files API: 文件處理接口
3.2 服務層 (Services)
實現核心業務邏輯:
- Account Service: 賬戶管理
- App Service: 應用管理
- Dataset Service: 數據集管理
- Model Service: 模型管理
- Workflow Service: 工作流管理
- Plugin Service: 插件管理
3.3 核心層 (Core)
提供核心功能實現:
- Model Runtime: 模型運行時
- RAG: 檢索增強生成
- Agent: 智能代理
- Workflow Engine: 工作流引擎
- Plugin System: 插件系統
- Tools: 工具系統
4. 數據層
4.1 關系數據庫 (PostgreSQL)
存儲系統的核心數據:
- 用戶賬戶信息
- 應用配置
- 對話歷史
- 數據集元數據
4.2 向量數據庫
存儲向量化的文檔數據:
- 文檔段落的向量表示
- 相似性檢索
4.3 緩存系統 (Redis)
- 會話存儲
- 緩存熱點數據
- 任務隊列支持
4.4 對象存儲
- 存儲上傳的文件
- 存儲處理后的文檔
5. 異步任務處理 (Celery)
- 處理耗時任務如文檔處理、向量索引等
- 通過消息隊列分發任務
- 支持任務重試和監控
6. 第三方集成
- 大語言模型 API (OpenAI, Anthropic等)
- 外部數據源 (Notion, Google Docs等)
- 監控服務 (Sentry, OpenTelemetry等)
組件調用關系
graph TD
A[客戶端] --> B[API 網關]
B --> C[Flask 應用]
C --> D[控制器層]
D --> E[服務層]
E --> F[核心層]
E --> G[數據訪問層]
F --> H[模型運行時]
F --> I[RAG引擎]
F --> J[工作流引擎]
F --> K[代理系統]
G --> L[數據庫]
G --> M[向量數據庫]
G --> N[緩存系統]
G --> O[對象存儲]
C --> P[異步任務隊列]
P --> Q[Celery Worker]
Q --> L
Q --> M
Q --> N
Q --> O
C --> R[第三方服務]
H --> R
I --> R
數據流向
1. 用戶請求處理流程
- 用戶通過 Web 前端發起請求
- 請求通過 API 網關路由到 Flask 應用服務器
- 控制器接收請求并進行參數驗證
- 服務層處理業務邏輯
- 核心層執行具體功能(如調用 LLM、RAG 檢索等)
- 數據訪問層與數據庫交互
- 返回響應給用戶
2. 異步任務處理流程
- 應用服務器將耗時任務發送到任務隊列
- Celery Worker 從隊列中獲取任務
- Worker 執行任務并與數據存儲交互
- 任務完成后更新數據庫狀態
- 通過回調或輪詢方式通知前端
部署架構
graph LR
subgraph "負載均衡器"
A[Load Balancer]
end
subgraph "Web 服務"
B[Next.js App]
end
subgraph "API 服務集群"
C1[Flask API 1]
C2[Flask API 2]
C3[Flask API N]
end
subgraph "Worker 集群"
D1[Celery Worker 1]
D2[Celery Worker 2]
D3[Celery Worker N]
end
subgraph "存儲層"
E[(PostgreSQL)]
F[(向量數據庫)]
G[(Redis)]
H[(對象存儲)]
end
A --> B
A --> C1
A --> C2
A --> C3
C1 --> E
C2 --> F
C3 --> G
C1 --> H
D1 --> E
D2 --> F
D3 --> G
D1 --> H
擴展性設計
水平擴展
- 應用服務器可水平擴展以處理更多請求
- Worker 可以根據任務負載動態擴展
- 數據庫可通過讀寫分離和分片擴展
插件系統
- 支持自定義工具和插件
- 提供標準接口用于集成第三方服務
- 支持自定義模型提供商
微服務潛力
- 當前為單體架構,但模塊化設計便于未來拆分為微服務
- 核心組件間通過明確定義的接口交互
安全設計
認證與授權
- 基于 JWT 的身份驗證
- 角色基礎訪問控制 (RBAC)
- 租戶隔離
數據安全
- 敏感數據加密存儲
- HTTPS 通信
- API 限流和防護
審計與監控
- 操作日志記錄
- 性能監控
- 錯誤追蹤
總結
Dify 采用分層架構設計,各層之間職責明確,便于維護和擴展。通過異步任務處理耗時操作,保證系統的響應性。模塊化的核心層設計使得系統功能易于擴展,支持多種大語言模型和第三方服務集成。

浙公網安備 33010602011771號