【RAGFlow代碼詳解-4】數據存儲層

數據庫基礎設施

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()字段映射檢索從配置中提取字段映射

該服務包括復雜的訪問控制邏輯,用于檢查所有權和團隊成員權限。

數據流集成

數據層組件協同工作以支持完整的文檔處理和檢索管道:

在這里插入圖片描述

完整的數據流架構

集成數據層支持實時作和批處理工作流,并在所有存儲系統中實現一致的狀態管理。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94300.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94300.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94300.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ES_映射

一、 映射(Mapping)是什么? 簡單來說,映射就像是關系型數據庫中的表結構定義(Schema)。它定義了索引(Index)中的文檔(Document)可以包含哪些字段(…

【Linux | 網絡】多路轉接IO之poll

一、poll函數二、poll的優缺點三、實現poll服務器(只關心讀事件)3.1 Log.hpp(日志)3.2 Lockguard.hpp(自動管理鎖)3.3 Socket.hpp(封裝套接字)3.4 PollServer.hpp(服務端…

一站式資源共享平臺模板,助力快速搭建專屬資源站源碼

內容目錄一、詳細介紹二、效果展示1.部分代碼2.效果圖展示三、學習資料下載一、詳細介紹 這個資源分享網站模板是一個功能完整、設計現代的單頁網站,非常適合快速搭建資源分享平臺。以下是關于這個模板的詳細介紹,幫助你更好地理解并發布到自己的網站&a…

ngnix的部分配置

1. 禁止特定IP地址訪問你可以通過在Nginx配置文件中添加deny指令來阻止特定IP地址或IP地址段的訪問。server {listen 80;server_name example.com;location / {deny 192.168.1.0/24;allow all;} }2. 允許特定IP地址訪問如果你想允許只有特定IP地址或IP地址段的訪問,…

Qwt7.0-打造更美觀高效的Qt開源繪圖控件庫

概述 Qt 生態里能畫圖的庫不多,主流的為QCustomPlot、Qwt、Qt Charts和KDChart,Qt6.8之后把原來的 Qt Charts(2D) 與 Qt DataVisualization(3D) 合并為統一的Qt Graphs模塊(注意不是Qt Graphic…

NFC線圈設計計算

對工作于13.56MHz的電感耦合的NFC系統,針對小距離的傳統天線通常是環形或者矩形的扁平線圈。 圓形扁平線圈計算評估 對于二階估計,我們可以由匝數決定的電感等式為 考慮到線圈的物理參數,設置平均直徑:D_averD0-N(gw) 線圈周長: ;d2*(w t)/π 初始設置中的這種電感…

mac設置鼠標滾輪方向

mac中滾輪的滑動方向和windows是相反的,如果需要設置和windows相同,設置如下:將自然滾動關閉即可。

QSpinBox的用法及其使用QSS對其美化

摘要 在現代應用程序開發中,提供一個直觀且用戶友好的界面至關重要。Qt框架提供了豐富的控件和工具,幫助開發者實現這一目標。本文將詳細介紹如何使用Qt的QSpinBox控件讓用戶輸入數值,并通過Qt Style Sheets (QSS) 美化界面,提升…

18 繼續學習

要設計出一個好的系統,需要多年的知識積累。有一個捷徑是研究真實世界的系統架構。本文將介紹一些有幫助的閱讀材料。 務必留意那些真實系統之間共通的原理和相同的底層技術。研究每個技術并了解它解決了什么問題, 這是一個鞏固基礎知識和完善設計過程的…

深度學習篇---混淆矩陣

要理解混淆矩陣(Confusion Matrix),我們可以從它的名字入手:它本質是一張 “幫你理清模型預測結果到底‘混淆’在哪里” 的表格,核心作用是評估分類模型的表現 —— 比如判斷一張圖片是 “貓” 還是 “狗”、一封郵件是…

MySQL重大隱患!mysqlpump的--set-gtid-purged參數在5.7和8.0的雷區

MySQLPump是MySQL官方提供的一個用于備份和恢復MySQL數據庫的工具。它于MySQL 5.7.8版本中首次引入,旨在提供一種快速、可靠且高效的備份和恢復解決方案。MySQL Pump首次支持了并行導出、壓縮導出,可以利用多核CPU來提高備份能力,在效率上要比…

低質量視頻變高清AI:告別模糊,重現清晰畫質

在數字時代,視頻內容的創作和消費日益普及,然而,許多早期拍攝或存儲的視頻,由于技術限制或壓縮等原因,往往存在畫質不佳的問題,如模糊、噪點多、分辨率低等。這不僅影響觀看體驗,也限制了這些珍…

Linux入門教程 第十二章 防火墻

文章目錄前言一、 iptables 概述Netfilter二、iptables 的表、鏈結構2.1 ptables的四表五鏈結構介紹2.1.1 四表五鏈2.1.2 四表2.1.3 **五鏈**2.2 數據包過濾的匹配流程(數據包到防火墻)2.2.1 規則鏈之間的匹配順序:主機型防火墻:2.2.2 規則鏈內的匹配順序…

單詞搜索+回溯法

題目&#xff1a;思考&#xff1a; 1.經典回溯 實現&#xff1a; class Solution { public:bool find_word(vector<vector<char>>&board,string word,int pos,int i,int j){bool retfalse;if (posword.size()-1) return board[i][j]word[pos];if (board[i][j…

【嵌入式開發 Linux 常用命令系列 8 -- git checkout 解沖突詳細介紹】

文章目錄1. Git 沖突產生的場景2. 沖突標記符號解釋3. git checkout --ours 和 git checkout --theirs語法含義使用場景4. 操作完成后的流程5. 舉例演示1. Git 沖突產生的場景 當你在 git merge、git rebase、git cherry-pick 等操作時&#xff0c;如果 同一個文件的同一部分在…

16-day13強化學習和訓練大模型

強化學習 強化學習和監督學習是機器學習中的兩種不同的學習范式 強化學習&#xff1a;目標是讓智能體通過與環境的交互&#xff0c;學習到一個最優策略&#xff0c;以最大化長期累積獎勵。 例如&#xff0c;在機器人導航任務中&#xff0c;智能體需要學習如何在復雜環境中移動&…

OpenAI o1:OpenAI最新推出的AI大語言模型,更擅長推理也更貴

本文轉載自&#xff1a;OpenAI o1&#xff1a;OpenAI最新推出的AI大語言模型&#xff0c;更擅長推理也更貴 - Hello123工具導航 ** 一、&#x1f916; OpenAI o1 是什么&#xff1f; OpenAI o1 是 2024 年推出的推理特化型 AI 模型&#xff0c;主打 “慢思考、深分析”&#…

自然語言處理——03 RNN及其變體

1 認識RNN 1.1 概念循環神經網絡 RNN &#xff08;Recurrent Neural Network&#xff0c;簡稱RNN&#xff09;——處理序列數據的神經網絡&#xff1b;一般以序列數據作為輸入&#xff0c;通過網絡內部的結構設計有效捕捉序列之間的關系特征&#xff0c;一般也是以序列形式進行…

量子計算基礎

量子計算 量子計算一般由三個基本步驟組成&#xff1a;制備輸入量子態、對于量子態執行幺正變換以及測量輸出態&#xff0c;這里將介紹這三個基本要素。 1 量子態 與經典計算中比特(bit)的概念相對應&#xff0c;量子計算中最小信息載體和處理單位是量子比特(quantum bit, or t…

Apache Maven 3.1.1 (eclipse luna)

Apache Maven 3.1.1 &#xff08;eclipse luna&#xff09;D:\apache-maven-3.1.1\binMAVEN_HOME:D:\apache-maven-3.1.1PATH:D:\apache-maven-3.1.1\binmvn -vMaven Integration for Eclipse(Luna)