下面用“流程圖 + 六階段拆解”的方式,把 RAGFlow 的完整流程逐層剖開,力求把每一步的輸入、輸出、可選策略、內部機制都講清楚。
────────────────────────
一、總覽圖(先建立體感)
用戶提問
│
├─→【階段1 查詢理解】意圖解析、關鍵詞擴展、槽位抽取
│
├─→【階段2 路由與任務編排】簡單問句?輕量流程;復雜問句?激活多輪/多路/Graph 檢索
│
├─→【階段3 混合檢索】向量+全文+圖關系 三路并行召回
│
├─→【階段4 精排與重排】粗排→精排→多樣性/去重→Top-K 切片
│
├─→【階段5 上下文組裝】Prompt 模板+引用標注+長度截斷策略
│
├─→【階段6 答案生成與后處理】LLM 生成、幻覺檢測、引用回鏈、敏感詞過濾
│
回答返回
────────────────────────
二、六階段詳細拆解
階段1 查詢理解(Query Understanding)
- 輸入:原始用戶問句 + 會話歷史(多輪場景)。
- 關鍵動作
? 意圖分類:使用輕量模型(如 BERT-mini)把問句分到“事實問答 / 摘要 / 比較 / 分析”等桶;不同意圖會觸發不同后續工作流。
? 關鍵詞擴展:內置實體鏈接模塊,把“蘋果”?{Apple Inc., 蘋果水果, 蘋果手機} 等候選實體,并計算消歧置信度。
? 時空間抽取:對“2024 年 Q1 財報”這類時間表達做歸一化(“2024-01-01~2024-03-31”)。 - 輸出:結構化 Query Object(意圖標簽、擴展關鍵詞列表、時間區間、地點實體、必須包含/排除詞)。
階段2 路由與任務編排(Router & Workflow Orchestration)
- 規則+模型雙重決策
? 簡單事實 → 單路向量檢索 + 1-shot LLM 回答;
? 復雜分析 → 激活“Agentic RAG”子流程:并行調用多路檢索器、SQL 檢索器、外部 API(如財報 API)。 - Graph Workflow 描述:RAGFlow 用一張 DAG(有向無環圖)描述任務依賴;節點可以是“向量檢索”“SQL 查詢”“調用外部工具”“LLM 生成”等,邊表示數據流向。該 DAG 可在 Web UI 里拖拽生成。
- 動態擴展:若第一次召回結果置信度低,DAG 會自動插入“二次檢索”節點,擴大時間窗口或更換索引空間。
階段3 混合檢索(Hybrid Retrieval)
- 三路召回并行
? 向量召回:基于嵌入模型(e5-large-v2、BGE 等)把 Query Object 變成向量,在 Milvus/Qdrant 中做 ANN 搜索,召回 top 100。
? 全文召回:Elasticsearch 做 BM25 + 擴展關鍵詞,召回 top 100。
? 圖譜召回:在 Neo4j 中執行 Cypher,利用實體 ID 做多跳查詢(例如“公司→高管→履歷→學歷”),召回與實體關聯的文檔 ID 列表。 - 結果融合:使用 Reciprocal Rank Fusion (RRF) 把三路分數歸一化,取前 N。
階段4 精排與重排(Rerank & Filtering)
- 精排模型:Cross-Encoder(如 BAAI/bge-reranker-large)對 Query-Object 與候選片段逐一打分,輸出相關性概率。
- 多樣性策略:MMR(最大邊際相關性)去冗余,保證切片之間信息不重復。
- 長度截斷:按 token 預算(如 4k)選 Top-K 個片段,K 動態計算:K = min(K_max, floor(預算 / 平均片段長度))。
階段5 上下文組裝(Context Assembly)
- Prompt 模板化:系統內置多種模板(“你是某領域專家,請基于以下資料回答…引用的段落請以[^id]結尾…”)。
- 引用溯源:每個片段附帶元數據(文件名、頁碼、段落 ID),在 Prompt 里顯式標注,方便 LLM 在回答里插入引用。
- 長度控制:若片段總長度仍超預算,優先保留高相關片段;對長片段做滑動窗口二次切分。
階段6 答案生成與后處理(Generation & Post-processing)
- 生成:調用 LLM(OpenAI GPT-4、DeepSeek、本地 Llama-3 等),temperature 按意圖動態調整:事實問答 0.1,創意寫作 0.7。
- 幻覺檢測:基于“自洽性檢查”——讓 LLM 再生成一次,比較兩次回答的引用片段是否一致;若差異大,觸發重試。
- 回鏈高亮:前端把返回的 [^id] 渲染成可點擊錨點,用戶點擊即可跳轉到原文高亮段落,實現“可解釋性”。
- 敏感詞/合規過濾:正則 + 詞典雙重過濾;不合規內容打碼并提示“涉及敏感信息已隱藏”。
────────────────────────
三、可插拔組件與配置要點
-
文檔解析
? DeepDoc 解析器支持 PDF、掃描件、圖片、表格;表格自動轉 Markdown 表格,數字保留兩位小數。
? 支持用戶手動調整切片:在 Chunk 頁面雙擊即可修改分塊邊界、添加關鍵詞權重。 -
索引策略
? “RAPTOR” 召回增強:先在段落級向量檢索,再對命中的段落做二次句子級檢索,提高細粒度命中率。
? 圖索引:實體-關系三元組實時寫 Neo4j,并同步到 Elasticsearch 做全文混合召回。 -
部署與擴展
? Docker Compose 一鍵啟動,支持 GPU 鏡像;對外暴露 REST API、WebSocket 流式接口。
? 多知識庫隔離:每個團隊獨立 ES Index + 向量庫,權限粒度到文件級。
────────────────────────
四、小結
RAGFlow 的最大特色是把傳統 RAG“兩段式”(檢索→生成)拆成了“可編排、可觀測、可干預”的多階段流水線。
? 對開發者:提供 DAG 工作流畫布,像搭積木一樣組合“檢索器-重排器-工具-LLM”。
? 對業務:每個階段的結果都可查看、可人工糾正,大幅降低幻覺,提升最終答案的可信度。