iT邦幫忙

2026 iThome 鐵人賽

DAY 25
0
AI Engineering

從零打造 RAG 系統:檢索、生成與落地全紀錄系列 第 25 篇

[Day 25] A/B 測試:比較不同 Chunking / Embedding / Rerank 組合的效果

  • 分享至 

  • xImage
  •  

前言

有了 Day 24 的自動化評估工具,今天要把前面幾週介紹過的各種優化手段(不同 Chunking 策略、Embedding 模型、是否加入 Rerank)系統性地組合起來,透過 A/B 測試找出最適合自己知識庫的配置。

為什麼需要系統性比較,而不是憑經驗猜?

前面幾天介紹的每一種技巧(Hybrid Search、Rerank、Query Rewriting…)都有其適用情境,但沒有一種組合是萬用的最佳解。與其憑感覺猜測「這個知識庫應該適合用哪些技巧」,不如設計一組實驗,讓資料告訴我們答案。

設計實驗變數

先列出想比較的變數與候選值:

變數 候選值
Chunk Size 300 / 500 / 800
Chunking 策略 遞迴字元切分 / 結構化切分
Embedding 模型 模型 A / 模型 B
是否加入 Rerank 是 / 否
是否加入 Hybrid Search 是 / 否

如果每個變數都要窮舉所有組合,數量會爆炸性成長(3 × 2 × 2 × 2 × 2 = 48 組),實務上建議:

  1. 先固定大部分變數,一次只改一個變數,觀察單一變數的影響(控制變因法)
  2. 找到單一變數的較佳選項後,再組合起來做小規模驗證
  3. 優先測試「預期影響最大」的變數(通常是 Chunking 策略與是否加入 Rerank)

實作:批次跑多組設定的評估

def run_ab_test(configs, test_questions):
    results = []
    for cfg in configs:
        # 依照設定重新建立索引(Chunking + Embedding)
        rag_system = build_rag_system(
            chunk_size=cfg["chunk_size"],
            chunking_strategy=cfg["chunking_strategy"],
            embedding_model=cfg["embedding_model"],
            use_rerank=cfg["use_rerank"],
            use_hybrid=cfg["use_hybrid"],
        )

        eval_result = run_evaluation(test_questions, rag_system)  # Day 24 的評估函式

        results.append({
            **cfg,
            "faithfulness": eval_result["faithfulness"],
            "answer_relevancy": eval_result["answer_relevancy"],
            "context_precision": eval_result["context_precision"],
            "context_recall": eval_result["context_recall"],
        })

    return results

configs = [
    {"chunk_size": 300, "chunking_strategy": "recursive", "embedding_model": "model_a", "use_rerank": False, "use_hybrid": False},
    {"chunk_size": 500, "chunking_strategy": "recursive", "embedding_model": "model_a", "use_rerank": False, "use_hybrid": False},
    {"chunk_size": 500, "chunking_strategy": "recursive", "embedding_model": "model_a", "use_rerank": True,  "use_hybrid": False},
    {"chunk_size": 500, "chunking_strategy": "structured", "embedding_model": "model_a", "use_rerank": True,  "use_hybrid": True},
]

results = run_ab_test(configs, test_questions)

結果呈現與判讀

建議把結果整理成表格,方便橫向比較:

設定 Context Precision Context Recall Faithfulness Answer Relevancy
設定 1(基準版) - - - -
設定 2(+ 加大 chunk) - - - -
設定 3(+ Rerank) - - - -
設定 4(+ Hybrid Search) - - - -

(實際數值請依照自己在測試集上真正跑出來的結果填入)

觀察重點:

  • 哪個變數的改動,對哪個指標影響最明顯?
  • 有沒有「顧此失彼」的情況(例如 Context Precision 提升了,但 Context Recall 反而下降)?
  • 加入 Rerank、Hybrid Search 等技巧,換來的效果提升,是否值得付出的額外延遲與成本?

小結

A/B 測試的核心價值在於,把「我覺得這樣應該比較好」的直覺,轉換成「數據顯示這樣確實比較好」的證據。透過控制變因、系統性比較,能更有效率地找到適合自己知識庫的最佳配置。明天我們要更進一步,從實際的錯誤案例出發,做更細緻的問題分析與迭代優化。


上一篇
[Day 24] 用 RAGAS 等工具建立自動化評估流程
系列文
從零打造 RAG 系統:檢索、生成與落地全紀錄 共 25 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言