RAG

RAG (Retrieval-Augmented Generation) 檢索增強生成

核心概念:結合資訊檢索與大型語言模型,在生成回答前先從知識庫中檢索相關資訊。

架構流程

  1. Query - 使用者輸入問題
  2. Retrieval - 從向量資料庫檢索相關文件
  3. Augmentation - 將檢索結果與原始問題結合
  4. Generation - LLM 基於增強後的上下文生成回答

優點

  • 減少幻覺 (Hallucination)
  • 知識可即時更新(無需重新訓練模型)
  • 回答可追溯來源

應用場景

  • 企業知識庫問答
  • 文件搜尋與摘要
  • 客服機器人

向量資料庫實作 (Redis)

來源:Redis University RU402 課程筆記

環境設定

首次執行需下載 embedding 模型 all-MiniLM-L6-v2

python -m venv redisvenv
source ./redisvenv/bin/activate

pip install sentence_transformers
pip install imgbeddings

在 Redis 中儲存向量

Redis as Vector Database

向量在 Redis 中以字串形式儲存,需先序列化後再存入:

SET vec "0.00555776,0.06124274,-0.05503812,-0.08395513,-0.09052192,-0.01091553,-0.06539601,0.01099653,-0.07732834,0.0536432"

使用 Hash 與 JSON 資料類型

  1. 使用 all-MiniLM-L6-v2 embedding 模型計算向量
    • 可將最多 256 字的文字映射至 384 維向量空間

Hash 儲存方式

向量以二進位 blob 形式存於 Hash:

{
    "content": "Understanding vector search is easy, but understanding all the mathematics behind a vector is not!",
    "genre": "technical",
    "embedding": "..."
}

使用 FT.CREATE 建立索引

FT.CREATE doc_idx ON HASH PREFIX 1 doc: SCHEMA content AS content TEXT genre AS genre TAG embedding VECTOR HNSW 6 TYPE FLOAT32 DIM 384 DISTANCE_METRIC COSINE

設定說明:

  • DIM 384 - 向量維度(由 embedding 模型決定)
  • HNSW - 索引方法
  • FLOAT32 - 向量資料類型
  • COSINE - 距離計算方式

JSON 儲存方式

FT.CREATE doc_idx ON JSON PREFIX 2 doc: SCHEMA $.content as content TEXT $.genre AS genre TAG $.embedding VECTOR HNSW 6 TYPE FLOAT32 DIM 384 DISTANCE_METRIC COSINE

索引方法比較

方法說明適用場景
FLAT逐一比對所有向量,精確但較慢小型資料集
HNSW使用機率演算法,犧牲些許精確度換取效能大型資料集

注意:Cosine distance = 1 - Cosine similarity

相關主題