有了 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 組),實務上建議:
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) | - | - | - | - |
(實際數值請依照自己在測試集上真正跑出來的結果填入)
觀察重點:
A/B 測試的核心價值在於,把「我覺得這樣應該比較好」的直覺,轉換成「數據顯示這樣確實比較好」的證據。透過控制變因、系統性比較,能更有效率地找到適合自己知識庫的最佳配置。明天我們要更進一步,從實際的錯誤案例出發,做更細緻的問題分析與迭代優化。