數據庫基礎設施
RAGFlow 使用關系數據庫(MySQL 或 PostgreSQL)作為主要元數據存儲,通過具有連接池和重試機制的 Peewee ORM 進行管理。
連接管理
數據庫連接通過 service_conf.yaml 和環境變量進行配置。該系統支持具有可配置連接池的 MySQL 和 PostgreSQL:
數據庫配置架構
數據庫連接參數從 service_conf.yaml 加載,支持連接池、超時配置和自動重新連接處理。
核心數據模型
系統使用幾個關鍵模型類,通過自動時間戳管理擴展 BaseModel
:
Model | 目的 | 關鍵字段 |
---|---|---|
Document | 文檔元數據和處理狀態 | id、kb_id、parser_id、 名稱 、 大小 、token_num、chunk_num |
Knowledgebase | 知識庫配置 | id、tenant_id、letter、embd_id、parser_config |
Task | 文檔處理任務 | id、doc_id、 進度 、progress_msg、retry_count |
File | 文件系統元數據 | id、 名稱 、 位置 、 大小 、 類型 |
TenantLLM | 每個租戶的 LLM 配置 | llm_factory、tenant_id、llm_name、api_key |
User | 用戶帳戶信息 | ID、 電子郵件 、 昵稱 、 密碼 access_token |
UserTenant | 用戶-租戶關系 | user_id、tenant_id、 角色 、 狀態 |
文檔存儲層
RAGFlow 支持用于矢量和全文搜索的多個文檔存儲后端:Elasticsearch、Infinity 和 OpenSearch。抽象層允許通過 DOC_ENGINE 環境變量透明地在實現之間切換。
文檔存儲抽象
文檔存儲體系結構
所有文檔存儲實現都擴展了 DocStoreConnection
抽象基類,提供了統一的接口。后端在初始化時根據 DOC_ENGINE
環境變量選擇,配置從 service_conf.yaml
加載和單例連接管理。
Elasticsearch 實現
ESConnection 類提供復雜的查詢功能,混合搜索結合了向量相似性和全文匹配,使用 conf/mapping.json
中定義的模式:
Elasticsearch 查詢構造
搜索方法構造復雜的布爾查詢,將術語篩選器、向量相似性和全文搜索與 mapping.json
中動態模板定義的字段映射相結合。
Infinity實現
InfinityConnection
提供高性能矢量搜索,包括連接池和從 conf/infinity_mapping.json
遷移模式:
Infinity查詢處理
該系統使用連接池和自動模式遷移,并將搜索條件轉換為 Infinity 的查詢構建器 API,同時保持每個知識庫的表組織。
對象存儲層
RAGFlow 通過 STORAGE_IMPL 單例支持多個對象存儲后端,可通過 STORAGE_IMPL_TYPE 環境變量進行配置。支持的實現包括 MinIO、AWS S3、Azure Blob Storage 和阿里云 OSS。
存儲接口
多后端對象存儲架構
storage_factory.py
中的 get_storage_impl()
工廠函數實現了工廠模式,允許在存儲后端之間無縫切換。每個實現都提供相同的接口方法:put()
、get()
、rm()
、obj_exist()
和 get_presigned_url()
。
Redis 緩存和任務協調
Redis 層提供分布式任務排隊、會話管理和緩存功能。系統支持 Redis 和 Valkey(Redis 分支),如 pyproject.toml 中配置的那樣。Redis 配置從 service_conf.yaml 加載,并帶有密碼身份驗證和數據庫選擇。
Redis 架構
Redis 有多種用途:與優先級隊列的任務協調、Flask 會話存儲、用于成本優化的 LLM 響應緩存以及用于性能的文件緩存。
任務處理工作流程
任務執行遵循具有進度跟蹤和錯誤處理的結構化管道:
任務處理順序
每個任務都通過塊構建、嵌入生成和文檔存儲插入進行,并具有全面的錯誤處理和重試機制。
服務層架構
服務層通過封裝數據庫作和業務邏輯的專用服務類提供高級數據訪問模式。
服務類層次結構
服務層組織
每個服務類都提供特定于域的作,同時從 CommonService 繼承通用 CRUD 功能。服務處理用戶身份驗證、知識庫管理和文檔處理工作流。
知識庫服務作
知識庫服務提供全面的知識庫生命周期管理,包括訪問控制和配置管理:
方法 | 目的 | 數據庫作 |
---|---|---|
accessible() | 權限檢查 | 通過 UserTenant 驗證用戶訪問權限 |
accessible4deletion() | 刪除權限 | 檢查用戶是否是創建者 |
is_parsed_done() | 解析狀態檢查 | 驗證所有文件均已處理 |
get_by_tenant_ids() | 多租戶列表 | 使用分頁聯接查詢 |
update_parser_config() | 配置更新 | 深度合并解析器設置 |
get_field_map() | 字段映射檢索 | 從配置中提取字段映射 |
該服務包括復雜的訪問控制邏輯,用于檢查所有權和團隊成員權限。
數據流集成
數據層組件協同工作以支持完整的文檔處理和檢索管道:
完整的數據流架構
集成數據層支持實時作和批處理工作流,并在所有存儲系統中實現一致的狀態管理。