查詢改寫:使用者問得很爛時怎麼救
真實的問題常是「那個怎麼用」。在檢索之前先把問題補完整,命中率會有明顯改善。
評測用的問題通常寫得很完整,真實使用者則是「這個要怎麼設定」「上次那個錯誤」。查詢改寫就是在檢索前把問題補成可檢索的形式。
三種常用改寫
- 指代消解:把「那個」「它」換成對話中提過的實體。
- 擴展同義詞:補上領域內的常見別名與英文原文。
- 拆解多問題:一句話問了三件事時拆成三個查詢,各自檢索後合併。
用歷史對話補完
system = '''把使用者的最新問題改寫成一個獨立、完整、可用於檢索的句子。
規則:
- 用對話歷史補上被省略的主詞與實體。
- 不要回答問題,只輸出改寫後的查詢。
- 若最新問題本身已完整,原樣輸出。'''多查詢檢索
另一個實用做法是產生多個改寫版本各自檢索,再用 RRF 合併。這能對沖單一改寫失敗的風險。
queries = rewrite_n(user_q, n=3) # 三種問法
hits = [vector_search(q, 20) for q in queries]
final = rrf(hits)[:8]改寫本身也會出錯,而且錯了很難察覺——使用者只會覺得「答非所問」。把改寫後的查詢記進日誌,這是除錯時的第一現場。