跳至主要内容

Retriever

What?​

Retriever 是 Retrieval-Augmented Generation 架構中負責從外部知識庫中找出相關資料片段的元件。 簡單來說,它就是一個「Semantic Search引擎」,會把使用者輸入的問題轉成向量,去向量資料庫中找出語意上最相關的內容。

Who?​

  • 開發者:設計 RAG 查詢邏輯的人,會選用哪種Vector DB、Embedding 模型、查幾筆資料等
  • 企業/系統管理員:需要透過 Retriever 管理自己的知識文件、FAQ、內部文件等
  • 使用者(最終用戶):最終會因為 Retriever 表現好壞,得到準確或偏離的回答

When?​

  • 每次使用者提出問題時(Run-time),Retriever 都會:
    1. 將問題轉成向量
    2. 到資料庫中查找語意相似的內容(如前幾名 top-k)

Where?​

  • RAG 系統:Retriever 是第一步(Retrieve → Generate)
  • 搜尋引擎強化 QA 系統
  • AI Copilot 工具:如程式碼助理查找內部 codebase 的說明
  • 知識型助理:如客服回答器、自動問答 bot 查產品手冊
  • 推薦系統(擴展應用):語意向量也可用於內容推薦

Why?​

  • RAG 的回答品質 完全依賴於 Retriever 的準確度
  • 如果找不到對的資料,生成模型也無法「神奇地回答對」
  • 它可決定:
    • 回答是否貼近原文
    • 是否能對應用場景(如查產品、技術、法律內容)
  • 提高 LLM 的可信度與穩定性

How?​

  1. 資料處理階段(Indexing)
    • 將文件分割成小段(chunks)
    • 對每段進行 embedding(向量化)
    • 存進向量資料庫
  2. 查詢階段(Querying)
    • 將使用者問題做 embedding
    • 對向量資料庫進行相似度比對(通常是 cosine similarity)
    • 取出 top-k 段落(例如 3–10 段)傳給語言模型

補充說明​

類型與工具​

類型說明範例工具
Sparse Retriever傳統關鍵字查詢(TF-IDF, BM25)Elasticsearch, Lucene
Dense Retriever向量語意查詢(使用 embedding)FAISS, Weaviate, Qdrant
Hybrid Retriever混合關鍵字與語意查詢Elastic + Dense, ColBERT
Multi-Stage Retriever先粗篩、後重排序ColBERT, ReRankers

常用組件搭配​

元件範例
向量資料庫FAISS, Weaviate, Qdrant, Pinecone
Embedding 模型OpenAI Embedding, BGE, Instructor, E5
文本分割工具LangChain TextSplitter、LlamaIndex NodeParser
優化策略Chunk overlap, Re-ranking, Filter by metadata