在 Day 7,我們替 RAG Assistant 加入引用功能,讓使用者可以知道回答參考了哪些文件
但引用來源存在,並不代表搜尋結果一定正確
即使 LLM 能夠正常生成回答,因為參考資料不相關,最終答案仍可能不正確
因此,RAG 系統除了需要具備回答與引用功能,也要重視:
搜尋結果是否真的與使用者問題相關
今天將針對 Retrieval 階段進行改善,透過 Top-K、Chunk Size、Chunk Overlap 與 Retrieval Precision,建立基本的搜尋品質測試
今天的學習目標包含:
今天的核心觀念是:
搜尋結果不只是「有沒有找到資料」
而是「找到的資料是否真的有用」
RAG 的回答品質通常會受到多個階段影響:
如果 Retrieval 階段取得錯誤或不完整的資訊,後面的 LLM 就可能面臨:
因此,可以將問題拆成兩個區塊:
今天主要聚焦在 Retrieval。
Top-K 是指:
Vector Search 要回傳前 K 筆搜尋結果
代表希望取得前 3 筆搜尋結果
優點:
缺點:
如果只取得其中一個 Chunk,可能無法完整回答支援的作業系統
優點:
缺點:
因此,Top-K 並不是越大越好
可以比較不同 Top-K 的結果:
實際應用中,可以根據測試結果選擇合適的 K 值,而不是固定認為某個數值適用於所有資料集
除了 Top-K,文件切塊方式也會影響搜尋品質
Chunk Size 是指每個文字片段的大小
這裡的 chunk_size 是切塊大小設定
實際切分結果會受到文字內容、分隔符號與切分行為影響,因此不一定每個 Chunk 都剛好是 100 個字元
優點:
缺點:
如果答案分散在不同 Chunk,單獨搜尋時可能無法取得完整資訊
優點:
缺點:
Chunk Size 應根據文件型態、內容結構與查詢方式進行調整
Chunk Overlap 是指相鄰 Chunk 之間重複保留的內容
表示在切分時,盡量讓相鄰片段保留部分重疊內容
Overlap 的主要目的:
但 Overlap 太大也可能造成:
搜尋結果的相關性不能只看向量距離
因為:
數值上相似,不一定代表內容真的能回答問題
確認搜尋結果是否包含問題所需的資訊
如果搜尋結果沒有包含必要資訊,就需要檢查:
使用相同問題,比較不同設定下的搜尋結果:
Chunk Size = 100
Top-K = 2
觀察哪一組設定能取得更完整且相關的內容
在資訊檢索中,Precision 用來衡量:
搜尋回來的結果中,有多少比例是相關的
公式:
[
Precision = \frac{相關搜尋結果數量}{搜尋結果總數}
]
假設使用者詢問:
安裝完成後需要做什麼?
回傳的 5 個結果中,只有 2 個被判斷為相關
需要注意:
如果只回傳一個非常相關的 Chunk,可能仍然缺少其他必要資訊
搜尋結果可能沒有包含完全相同的關鍵字,但語意上仍然相關
雖然沒有完全出現相同的詞語,但語意上可能是相同意思
LLM Judge 也可能產生判斷錯誤,因此不應完全取代人工抽樣檢查
不同類型的文件,其最佳切分方式可能不同
因此,不應該認為所有文件都使用相同的 Chunk Size 就能得到最佳結果
今天將焦點從「建立 RAG」轉向「評估 RAG」
重要學習內容包括:
今天最大的收穫是:
RAG 的品質不能只靠「看起來能回答」來判斷,而是需要透過測試與指標,確認搜尋到的資料真的與問題相關
目前我們已經完成基本的 RAG 搜尋與品質測試
接下來可以進一步思考:
如果單純依靠向量搜尋,仍然找不到某些重要關鍵字或精確資訊,該怎麼改善
因此,Day 9 將會探討:
從「確保取得的依據真的相關」,進一步走向「結合不同搜尋方式,提高資料檢索能力」