RAG
RAG (Retrieval-Augmented Generation) 檢索增強生成
核心概念:結合資訊檢索與大型語言模型,在生成回答前先從知識庫中檢索相關資訊。
架構流程
- Query - 使用者輸入問題
- Retrieval - 從向量資料庫檢索相關文件
- Augmentation - 將檢索結果與原始問題結合
- 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 中以字串形式儲存,需先序列化後再存入:
SET vec "0.00555776,0.06124274,-0.05503812,-0.08395513,-0.09052192,-0.01091553,-0.06539601,0.01099653,-0.07732834,0.0536432"使用 Hash 與 JSON 資料類型
- 使用
all-MiniLM-L6-v2embedding 模型計算向量- 可將最多 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