ragflow/personal_analyze/02_system_architecture.md
Claude c7cecf9a1f
docs: Add comprehensive RAGFlow analysis documentation
- Add directory structure analysis (01_directory_structure.md)
- Add system architecture with diagrams (02_system_architecture.md)
- Add sequence diagrams for main flows (03_sequence_diagrams.md)
- Add detailed modules analysis (04_modules_analysis.md)
- Add tech stack documentation (05_tech_stack.md)
- Add source code analysis (06_source_code_analysis.md)
- Add README summary for personal_analyze folder

This documentation provides:
- Complete codebase structure overview
- System architecture diagrams (ASCII art)
- Sequence diagrams for authentication, RAG, chat, agent flows
- Detailed analysis of API, RAG, DeepDoc, Agent, GraphRAG modules
- Full tech stack with 150+ dependencies analyzed
- Source code patterns and best practices analysis
2025-11-26 10:20:05 +00:00

567 lines
67 KiB
Markdown

# RAGFlow - Kiến Trúc Hệ Thống
## 1. Tổng Quan Kiến Trúc
RAGFlow sử dụng kiến trúc **Microservices** với các thành phần được container hóa bằng Docker. Hệ thống được thiết kế theo mô hình **3-tier architecture** kết hợp với **event-driven architecture** cho xử lý bất đồng bộ.
## 2. Sơ Đồ Kiến Trúc Tổng Quan
```
┌─────────────────────────────────────────────────────────────────────────────────┐
│ CLIENT LAYER │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Web App │ │ Mobile App │ │ Python SDK │ │ REST API │ │
│ │ (React/TS) │ │ (Future) │ │ Client │ │ Client │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │ │
└─────────┼─────────────────┼─────────────────┼─────────────────┼──────────────────┘
│ │ │ │
└─────────────────┴────────┬────────┴─────────────────┘
┌─────────────────────────────────────────────────────────────────────────────────┐
│ GATEWAY LAYER │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ NGINX Reverse Proxy │ │
│ │ (Load Balancing, SSL Termination) │ │
│ │ Port: 80/443 │ │
│ └─────────────────────────────────────┬───────────────────────────────────┘ │
│ │ │
└────────────────────────────────────────┼─────────────────────────────────────────┘
┌──────────────────────────────┼──────────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────────────────────┐
│ APPLICATION LAYER │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────────┐ ┌───────────────────────┐ ┌───────────────────┐ │
│ │ RAGFlow Server │ │ Admin Server │ │ MCP Server │ │
│ │ (Flask/Quart) │ │ (Flask) │ │ (MCP Protocol) │ │
│ │ Port: 9380 │ │ Port: 9381 │ │ Port: 9382 │ │
│ │ │ │ │ │ │ │
│ │ ┌─────────────────┐ │ │ ┌─────────────────┐ │ │ ┌─────────────┐ │ │
│ │ │ API Blueprints │ │ │ │ Admin APIs │ │ │ │ MCP Handler │ │ │
│ │ │ - kb_app │ │ │ │ - User Mgmt │ │ │ │ - Tools │ │ │
│ │ │ - document_app │ │ │ │ - System Cfg │ │ │ │ - Resources │ │ │
│ │ │ - dialog_app │ │ │ │ - Monitoring │ │ │ └─────────────┘ │ │
│ │ │ - canvas_app │ │ │ └─────────────────┘ │ │ │ │
│ │ │ - search_app │ │ │ │ │ │ │
│ │ │ - file_app │ │ │ │ │ │ │
│ │ └─────────────────┘ │ │ │ │ │ │
│ └───────────┬───────────┘ └───────────────────────┘ └───────────────────┘ │
│ │ │
└──────────────┼───────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────────┐
│ SERVICE LAYER │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Business Logic │ │ RAG Pipeline │ │ Agent System │ │
│ │ Services │ │ Engine │ │ Engine │ │
│ │ │ │ │ │ │ │
│ │ - UserService │ │ - Parser │ │ - Canvas │ │
│ │ - DialogService │ │ - Tokenizer │ │ - Components │ │
│ │ - DocService │ │ - Splitter │ │ - Tools │ │
│ │ - KBService │ │ - Embedder │ │ - Workflows │ │
│ │ - TaskService │ │ - Reranker │ │ │ │
│ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │ │
│ └────────────────────┼────────────────────┘ │
│ │ │
│ ┌─────────────────────────────┼─────────────────────────────────────────────┐ │
│ │ DeepDoc Processing Engine │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ PDF │ │ DOCX │ │ PPT │ │ Excel │ │ HTML │ │ │
│ │ │ Parser │ │ Parser │ │ Parser │ │ Parser │ │ Parser │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────────────────────┐ │ │
│ │ │ Vision/OCR Processing (Layout Analysis) │ │ │
│ │ └──────────────────────────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────────┐
│ DATA LAYER │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ MySQL │ │ Redis/Valkey │ │ MinIO │ │
│ │ (Primary DB) │ │ (Cache) │ │ (Object Store) │ │
│ │ Port: 5455 │ │ Port: 6379 │ │ Port: 9000/9001 │ │
│ │ │ │ │ │ │ │
│ │ - Users │ │ - Sessions │ │ - Documents │ │
│ │ - Tenants │ │ - Cache │ │ - Files │ │
│ │ - Knowledgebase │ │ - Rate Limit │ │ - Chunks │ │
│ │ - Documents │ │ - Task Queue │ │ - Images │ │
│ │ - Dialogs │ │ │ │ │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────────────────────┐ │
│ │ Vector Database Layer │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │
│ │ │ Elasticsearch │ │ Infinity │ │ OpenSearch │ │ │
│ │ │ (Default) │ │ (Alternative) │ │ (Alternative) │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ - Vector Search │ │ - Hybrid Search │ │ - Vector Search │ │ │
│ │ │ - Full-text │ │ - Full-text │ │ - Full-text │ │ │
│ │ │ - BM25 │ │ - BM25 │ │ - BM25 │ │ │
│ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │
│ └──────────────────────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────────┐
│ EXTERNAL SERVICES │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ LLM Providers │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │ │
│ │ │ OpenAI │ │ Claude │ │ Gemini │ │ Qwen │ │ Groq │ │ Ollama │ │ │
│ │ └────────┘ └────────┘ └────────┘ └────────┘ └────────┘ └────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ Data Source Connectors │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │Confluence│ │ Notion │ │ Slack │ │ Gmail │ │SharePoint│ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ Agent Tools & APIs │ │
│ │ ┌────────┐ ┌─────────┐ ┌────────┐ ┌────────┐ ┌─────────┐ ┌────────┐ │ │
│ │ │ Tavily │ │ Google │ │ ArXiv │ │ GitHub │ │Wikipedia│ │ Weather│ │ │
│ │ └────────┘ └─────────┘ └────────┘ └────────┘ └─────────┘ └────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────────────┘
```
## 3. Kiến Trúc Chi Tiết Các Thành Phần
### 3.1 API Server Architecture
```
┌──────────────────────────────────────────────────────────────┐
│ RAGFlow API Server │
│ (ragflow_server.py) │
├──────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Flask/Quart Application │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │ │
│ │ │ CORS │ │ Session │ │ JWT Auth │ │ │
│ │ │ Middleware │ │ Middleware │ │ Middleware │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌───────────────────────────┼───────────────────────────────┐
│ │ API Blueprints │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ │ kb_app │ │ doc_app │ │dialog_app│ │canvas_app│ │
│ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ │file_app │ │search_app│ │ llm_app │ │ user_app │ │
│ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ └───────┼────────────┼────────────┼────────────┼───────────┘
│ │ │ │ │ │
│ ┌───────┴────────────┴────────────┴────────────┴───────────┐
│ │ Service Layer │
│ │ ┌────────────────┐ ┌────────────────┐ │
│ │ │ UserService │ │ DialogService │ │
│ │ │ - register() │ │ - chat() │ │
│ │ │ - login() │ │ - stream() │ │
│ │ │ - get_user() │ │ - completion() │ │
│ │ └────────────────┘ └────────────────┘ │
│ │ │
│ │ ┌────────────────┐ ┌────────────────┐ │
│ │ │ DocumentService│ │ KBService │ │
│ │ │ - upload() │ │ - create() │ │
│ │ │ - parse() │ │ - list() │ │
│ │ │ - chunk() │ │ - delete() │ │
│ │ └────────────────┘ └────────────────┘ │
│ └──────────────────────────────────────────────────────────┘
│ │ │
│ ┌───────────────────────────┴───────────────────────────────┐
│ │ Database Layer (Peewee ORM) │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ │ User │ │ Tenant │ │Document │ │ Dialog │ │
│ │ │ Model │ │ Model │ │ Model │ │ Model │ │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
│ └──────────────────────────────────────────────────────────┘
│ │
└──────────────────────────────────────────────────────────────┘
```
### 3.2 RAG Pipeline Architecture
```
┌──────────────────────────────────────────────────────────────────────────┐
│ RAG Processing Pipeline │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ INGESTION PIPELINE │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ File │───▶│ Parser │───▶│Tokenizer │───▶│ Splitter │ │ │
│ │ │ Upload │ │ │ │ │ │ (Chunker)│ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └────┬─────┘ │ │
│ │ │ │ │
│ │ ┌──────────────────────────────────────────────────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Embedding│───▶│ Index │───▶│ Store │ │ │
│ │ │ Model │ │ Creation │ │ (ES/Inf) │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ RETRIEVAL PIPELINE │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Query │───▶│ Query │───▶│ Embedding│───▶│ Hybrid │ │ │
│ │ │ Input │ │ Analysis │ │ Query │ │ Search │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └────┬─────┘ │ │
│ │ │ │ │
│ │ ┌──────────────────────────────────────────────────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Candidate│───▶│ Reranker │───▶│ Context │───▶│ LLM │ │ │
│ │ │ Chunks │ │ │ │ Building │ │ Response │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
```
### 3.3 Agent Workflow Architecture
```
┌──────────────────────────────────────────────────────────────────────────┐
│ Agent Canvas Architecture │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ Canvas Orchestrator │ │
│ │ (canvas.py) │ │
│ └──────────────────────────────┬──────────────────────────────────────┘ │
│ │ │
│ ┌───────────────────────────┼───────────────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ BEGIN │─────────────▶│ LLM │─────────────▶│RETRIEVAL│ │
│ │Component│ │Component│ │Component│ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │ │ │ │
│ │ ┌───────────────────┼───────────────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────┐ ┌─────────────┐ │
│ │ CATEGORIZE │ │ MESSAGE │ │ WEBHOOK │ │
│ │ Component │ │Component│ │ Component │ │
│ └─────────────┘ └─────────┘ └─────────────┘ │
│ │ │ │ │
│ └────────────────────────┼────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ TOOLS INTEGRATION │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │ │
│ │ │ Tavily │ │ ArXiv │ │ GitHub │ │ Email │ │Code │ │ │
│ │ │ Search │ │ Search │ │ API │ │ Send │ │Executor│ │ │
│ │ └────────┘ └────────┘ └────────┘ └────────┘ └────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
└───────────────────────────────────────────────────────────────────────────┘
```
## 4. Data Flow Architecture
### 4.1 Document Ingestion Flow
```
┌────────────────────────────────────────────────────────────────────────────┐
│ Document Ingestion Flow │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ User Upload │
│ │ │
│ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ API │────▶│ File │────▶│ MinIO │────▶│ Task │ │
│ │ Endpoint │ │ Service │ │ Storage │ │ Queue │ │
│ └──────────┘ └──────────┘ └──────────┘ └────┬─────┘ │
│ │ │
│ ┌────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ Background Task Processor │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Parser │───▶│Extractor │───▶│ Chunker │───▶│ Embedder │ │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ │ │ - PDF │ │ - Text │ │ - Token │ │ - OpenAI │ │ │
│ │ │ - DOCX │ │ - Table │ │ - Sent │ │ - BGE │ │ │
│ │ │ - HTML │ │ - Image │ │ - Page │ │ - Cohere │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └────┬─────┘ │ │
│ │ │ │ │
│ └────────────────────────────────────────────────────────┼────────┘ │
│ │ │
│ ┌─────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ Storage Layer │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ MySQL │ │ Elasticsearch│ │ MinIO │ │ │
│ │ │ (Metadata) │ │ (Vectors) │ │ (Files) │ │ │
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
└───────────────────────────────────────────────────────────────────────────┘
```
### 4.2 Query Processing Flow
```
┌────────────────────────────────────────────────────────────────────────────┐
│ Query Processing Flow │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ User Query: "What is the revenue for Q3 2024?" │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────────┐ │
│ │ 1. QUERY UNDERSTANDING │ │
│ │ ┌──────────────┐ │ │
│ │ │ Query Parser │──▶ Extract: entities, intent, keywords │ │
│ │ └──────────────┘ │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────────┐ │
│ │ 2. RETRIEVAL │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │ Embedding │───▶│ Hybrid │───▶│ Candidate │ │ │
│ │ │ Query │ │ Search │ │ Chunks │ │ │
│ │ └────────────┘ │ │ │ (Top 100) │ │ │
│ │ │ Vector+BM25│ └────────────┘ │ │
│ │ └────────────┘ │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────────┐ │
│ │ 3. RERANKING │ │
│ │ ┌────────────┐ ┌────────────┐ │ │
│ │ │ Reranker │───▶│ Top-K │ │ │
│ │ │ Model │ │ Chunks │ │ │
│ │ │ │ │ (Top 5) │ │ │
│ │ └────────────┘ └────────────┘ │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────────┐ │
│ │ 4. GENERATION │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │ Prompt │───▶│ LLM │───▶│ Response │ │ │
│ │ │ Builder │ │ (GPT-4) │ │ + Sources │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ Response: "The revenue for Q3 2024 was $X million... [source: doc.pdf]" │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
```
## 5. Deployment Architecture
### 5.1 Docker Compose Deployment
```
┌──────────────────────────────────────────────────────────────────────────────┐
│ Docker Compose Deployment │
├──────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ Docker Network │ │
│ │ (ragflow-network) │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌───────────────────────────────┼───────────────────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ nginx │ ◀──────────────▶│ ragflow- │◀──────────────────▶│ ragflow- │ │
│ │ :80/443 │ │ server │ │ admin │ │
│ └──────────┘ │ :9380 │ │ :9381 │ │
│ │ └────┬─────┘ └──────────┘ │
│ │ │ │
│ │ ┌──────────────────┼──────────────────────┐ │
│ │ │ │ │ │
│ │ ▼ ▼ ▼ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ │ mysql │ │ redis │ │elasticsearch│ │
│ │ │ :5455 │ │ :6379 │ │ :9200 │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │
│ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ │ minio │ │ sandbox │ │ tei │ │
│ │ │:9000/9001│ │ :9385 │ │ :6380 │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │
│ │ │
│ ┌────┴─────────────────────────────────────────────────────────────────┐ │
│ │ Volumes │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │mysql_data │ │ es_data │ │minio_data │ │ redis_data │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │
└───────────────────────────────────────────────────────────────────────────────┘
```
## 6. Security Architecture
```
┌──────────────────────────────────────────────────────────────────────────────┐
│ Security Architecture │
├──────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ Authentication Layer │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ JWT │ │ OAuth │ │ API │ │ │
│ │ │ Tokens │ │ (GitHub, │ │ Tokens │ │ │
│ │ │ │ │ OIDC) │ │ │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ Authorization Layer │ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────────────────────────┐ │ │
│ │ │ Multi-Tenancy Model │ │ │
│ │ │ │ │ │
│ │ │ Tenant A Tenant B Tenant C │ │ │
│ │ │ ┌──────┐ ┌──────┐ ┌──────┐ │ │ │
│ │ │ │Users │ │Users │ │Users │ │ │ │
│ │ │ │KBs │ │KBs │ │KBs │ │ │ │
│ │ │ │Docs │ │Docs │ │Docs │ │ │ │
│ │ │ └──────┘ └──────┘ └──────┘ │ │ │
│ │ │ │ │ │
│ │ └─────────────────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Role-Based │ │ Team │ │ Resource │ │ │
│ │ │ Access │ │ Permissions│ │ Ownership │ │ │
│ │ │ Control │ │ │ │ │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ Encryption Layer │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ RSA │ │ HTTPS │ │ Password │ │ │
│ │ │ Key Pair │ │ (TLS) │ │ Bcrypt │ │ │
│ │ │ (conf/*.pem)│ │ │ │ │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ │
└───────────────────────────────────────────────────────────────────────────────┘
```
## 7. Scalability Architecture
```
┌──────────────────────────────────────────────────────────────────────────────┐
│ Scalability Architecture │
├──────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ Horizontal Scaling │ │
│ │ │ │
│ │ Load Balancer (Nginx) │ │
│ │ │ │ │
│ │ ┌──────────────────┼──────────────────┐ │ │
│ │ │ │ │ │ │
│ │ ▼ ▼ ▼ │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ Server #1 │ │ Server #2 │ │ Server #N │ │ │
│ │ │ (Instance) │ │ (Instance) │ │ (Instance) │ │ │
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ Database Scaling │ │
│ │ │ │
│ │ MySQL: Elasticsearch: Redis: │ │
│ │ - Read Replicas - Cluster Mode - Sentinel │ │
│ │ - Connection Pool - Sharding - Cluster Mode │ │
│ │ - Index Partitioning │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ Async Processing │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Task │───▶│ Redis │───▶│ Worker │ │ │
│ │ │ Producer │ │ Queue │ │ Consumer │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ │ │ │
│ │ Tasks: Document parsing, Embedding, Indexing │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ │
└───────────────────────────────────────────────────────────────────────────────┘
```
## 8. Tóm Tắt Kiến Trúc
| Layer | Components | Technology |
|-------|------------|------------|
| Client | Web App, SDK, API | React, Python SDK, REST |
| Gateway | Reverse Proxy | Nginx |
| Application | API Server, Admin | Flask/Quart |
| Service | Business Logic | Python Services |
| Processing | RAG, DeepDoc, Agent | Python, ML Models |
| Data | Storage, Cache, Vector | MySQL, Redis, ES, MinIO |
| External | LLM, Connectors, Tools | OpenAI, Claude, APIs |
### Đặc Điểm Nổi Bật
1. **Microservices**: Các service độc lập, dễ scale
2. **Event-Driven**: Xử lý async cho document processing
3. **Multi-Tenant**: Hỗ trợ nhiều tenants với data isolation
4. **Hybrid Search**: Kết hợp vector search và full-text search
5. **Pluggable**: Hỗ trợ multiple LLM providers và vector stores
6. **Containerized**: Full Docker deployment với orchestration