iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0

前言

在過去幾天,我們已經完成了 文件解析、向量檢索、Hybrid Search、Rerank 等功能。
今天我們要先思考 如何把這些功能整合成一個模組。後面我們則會介紹一下我們選擇作為前端呈現的工具 Streamlit ,讓使用者能直觀操作整個流程。

🧩為什麼要模組化?

一個完整的 RAG架構,通常包含以下幾個核心模組:

  • Indexer:負責文件上傳、OCR、Chunking、Embedding,並存入向量資料庫。
  • Retriever:負責查詢向量資料庫,進行相似度檢索與候選文件篩選。
  • Frontend (UI):讓使用者能夠上傳文件、進行問答、查看結果。
  • Database (DB):儲存嵌入向量、文件摘要、結構化資訊。
  • Monitor / Logs:追蹤系統運行情況與效能。

而我們最後目標是AgenticRAG,所以後面還會有Agent Flow的模組,處理複雜任務(例如 Query Expansion、MRKL 等)。

👉 在這樣的設計裡,Streamlit 只負責前端呈現,真正的檢索、嵌入與生成都在後端服務處理。把前後端分離,這樣能讓系統更容易維護與擴充。


🏗️目前的基本RAG架構

到目前為止的內容,我們其實只需要四個模組:

RAG_base/
│
├── indexer/ # 文件上傳與嵌入
├── retriever/ # 檢索與問答
├── model/ # 模型管理(Embedding, Rerank, LLM)
└── frontend/ # Streamlit 前端

1. Indexer

  • 負責處理文件上傳。
  • 使用 OCR(如需要)與 Chunking。
  • 呼叫 Embedding 模型,將結果存入 Qdrant 資料庫。

2. Retriever

  • 接收查詢(Query)。
  • 執行向量檢索與Rerank。
  • 把候選文件送入 LLM,生成答案。

3. Model

  • 集中管理三種類型的模型:
    • Embedding 模型(例:OpenAI Embedding、bge-m3、本地 embedding)
    • Rerank 模型(例:bge-reranker、jina-reranker)
    • LLM 模型(例:OpenAI GPT、本地 LLaMA、Mistral)
  • 提供統一的設定介面,方便在本地/雲端環境切換與比較不同模型組合。

4. Frontend (Streamlit)

  • 提供兩個主要分頁:
    1. 文件上傳頁:上傳 PDF / TXT,並觸發 Indexer。
    2. 問答頁:輸入 Query,並調用 Retriever,顯示最終回答。

📊Streamlit 簡介

在開始實作之前,我們先來認識一下 Streamlit

Streamlit 是一個專為 資料科學家與機器學習工程師 設計的開源框架,讓你可以只用 Python 快速建立互動式 Web 應用。
它的最大特色是 簡單直觀:你不用寫前端程式碼(如 HTML、CSS、JavaScript),就能直接把 Python 變數、資料框、模型輸出等轉換成漂亮的網頁元件。

Streamlit 的特點

  • 開發快速:只需要幾行 Python 程式碼,就能把模型或數據展示成一個互動式網頁。
  • 專注在數據與模型:無需考慮前端開發,直接專注於資料處理與 AI/ML 模型。
  • 豐富的元件:支援文字、表格、圖表、表單、檔案上傳、分頁等功能。
  • 方便部署:可以本地運行,也能透過 Streamlit Community Cloud 部署上線和大家分享。

官方資源

📌小結

今天我們的重點不是程式碼,而是 架構設計,因為後續我們會一步一步擴充功能,如果沒有做好系統架構,那做到後面很可能需要把前面寫的程式打掉重練。
而我們也把 前端 (Streamlit)後端模組 清楚分開,這樣可以:

  1. 讓每個模組專注於單一責任(SRP 原則)。
  2. 方便維護與測試(只要換掉 Retriever,就能比較不同檢索策略)。
  3. 保持可擴充性(未來加入 Agent Flow、監控時不需大改前端)。

本來想在這篇就先做 基本版 Streamlit Demo,但我想先把架構講清楚是非常重要的! 我們明天再來建立第一個可互動的 RAG 應用吧!


上一篇
Day 12: 實作調整:加入Rerank model
下一篇
Day 14: 模組擴充與Streamlit Demo程式
系列文
從 RAG 到 Agentic RAG:30 天打造本機智慧檢索系統14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言