共用方式為


改善 RAG 鏈結品質

參與品質之RAG鏈結元件的圖表。

本文涵蓋如何使用RAG鏈結的元件來改善RAG應用程式的品質。

RAG 鏈結會採用使用者查詢作為輸入、擷取該查詢的相關信息,併產生以所擷取數據為基礎的適當回應。 雖然RAG鏈結內的確切步驟可能會因使用案例和需求而有所不同,但以下是建置RAG鏈結時要考慮的重要元件:

  1. 查詢瞭解: 分析及轉換用戶查詢,以更好地呈現意圖,並擷取相關信息,例如篩選條件或關鍵詞,以改善擷取程式。
  2. 擷取: 在擷取查詢時尋找最相關的資訊區塊。 在非結構化數據案例中,這通常涉及語意或關鍵詞型搜尋的其中一種或組合。
  3. 提示增強: 結合使用者查詢與擷取的資訊和指示,引導 LLM 產生高質量的回應。
  4. LLM: 選取最適合應用程式的模型(和模型 parameters),以 optimize/平衡效能、延遲和成本。
  5. 後置處理和護欄: 套用額外的處理步驟和安全措施,以確保 LLM 產生的回應是主題上的、事實上一致的,並遵守特定的指導方針或限制。

反覆實作和評估品質修正 會示範如何逐一查看鏈結的元件。

查詢瞭解

直接使用使用者查詢做為擷取查詢,對於某些查詢可以運作。 不過,在擷取步驟之前重新格式化查詢通常很有説明。 查詢瞭解包含鏈結開頭的步驟(或一系列步驟),以分析及轉換用戶查詢,以更妥善地表示意圖、擷取相關信息,並最終協助後續的擷取程式。 轉換使用者查詢以改善擷取的方法包括:

  1. 查詢重寫: 查詢重寫牽涉到將使用者查詢轉譯成一或多個更能代表原始意圖的查詢。 目標是以提升擷取步驟尋找最相關文件的可能性的方式重新調整查詢。 處理可能不符合擷取檔中所用術語的複雜或模棱兩可查詢時,這特別有用。

    範例:

    • 在多回合聊天中描述交談歷程記錄
    • 更正用戶查詢中的拼字錯誤
    • 以同義字取代用戶查詢中的單字或片語,以擷取更廣泛的相關文件

    重要

    查詢重寫必須與擷取元件的變更搭配完成

  2. 篩選擷取: 在某些情況下,用戶查詢可能包含可用來縮小搜尋結果的特定篩選或準則。 篩選提取涉及識別和提取查詢中的篩選條件,並將其作為額外的 parameters傳遞至檢索步驟。 這可藉由專注於可用數據的特定子集,協助改善所擷取文件的相關性。

    範例:

    • 擷取查詢中提及的特定時間週期,例如「過去 6 個月中的文章」或「2023 年的報告」。
    • 識別查詢中特定產品、服務或類別的提及,例如「Databricks 專業服務」或「膝上型計算機」。
    • 從查詢擷取地理實體,例如城市名稱或國家/地區代碼。

    注意

    篩選擷取必須結合元數據擷取數據管線和擷取器鏈結元件的變更來完成。 元數據擷取步驟應確保每個檔/區塊都能使用相關的元數據欄位,而且應該實作擷取步驟以接受並套用擷取的篩選。

除了查詢重寫和篩選擷取之外,查詢瞭解的另一個重要考慮是要使用單一 LLM 呼叫還是多個呼叫。 雖然搭配精心製作的提示使用單一呼叫可能會有效率,但在某些情況下,where 將查詢理解程式分解成多個 LLM 呼叫,可能會導致更好的結果。 順便說一下,當您嘗試在單一提示中實作一些複雜的邏輯步驟時,這是一般適用的經驗法則。

例如,您可以使用一個 LLM 呼叫來分類查詢意圖、另一個呼叫來擷取相關實體,第三個呼叫會根據擷取的資訊重寫查詢。 雖然這種方法可能會為整體程式增加一些延遲,但它可以允許更精細的控制,並可能改善所擷取檔的品質。

支援 Bot 的多步驟查詢瞭解

以下是多步驟查詢瞭解元件如何尋找客戶支援 Bot:

  1. 意圖分類: 使用 LLM 將使用者的查詢分類為預先定義的類別,例如「產品資訊」、「疑難解答」或「帳戶管理」。
  2. 實體擷取: 根據識別的意圖,使用另一個 LLM 呼叫從查詢擷取相關實體,例如產品名稱、回報的錯誤或帳戶號碼。
  3. 查詢重寫: 使用擷取的意圖和實體,將原始查詢重寫為更具體且目標的格式,例如「我的RAG鏈結無法在模型服務上部署,我看到下列錯誤...」。

擷取

RAG 鏈結的擷取元件負責在擷取查詢時尋找最相關的資訊區塊。 在非結構化數據的內容中,擷取通常牽涉到語意搜尋、關鍵詞型搜尋和元數據篩選的組合。 擷取策略的選擇取決於應用程式的特定需求、數據的本質,以及您預期要處理的查詢類型。 讓我們比較這些選項:

  1. 語意搜尋: 語意搜尋會使用內嵌模型,將每個文字區塊轉換成可擷取其語意意義的向量表示法。 藉由比較擷取查詢的向量表示法與區塊的向量表示,語意搜尋可以擷取概念上類似的檔,即使它們不包含查詢中的確切關鍵詞也一樣。
  2. 關鍵詞型搜尋: 以關鍵詞為基礎的搜尋會藉由分析擷取查詢與索引檔之間的共用單字頻率和分佈,來判斷檔的相關性。 查詢和檔中的相同單字越常出現,指派給該文件的相關性分數越高。
  3. 混合式搜尋: 混合式搜尋會採用雙步驟擷取程式,結合語意和關鍵詞型搜尋的優點。 首先,它會執行語意搜尋,以擷取set個概念上相關的文件。 然後,它會在縮減的 set 上根據關鍵詞進行搜尋,以便於基於精確的關鍵詞匹配進一步精緻結果。 最後,它會結合這兩個步驟中的分數來排名檔。

比較擷取策略

下列 table 將每一個檢索策略與其他進行對比:

語意搜尋 關鍵字搜尋 混合式搜尋
簡單說明 如果查詢中出現相同的 概念 和潛在的檔,則它們會相關。 如果查詢中出現相同的 單字 和可能的檔,它們就會相關。 文件中 查詢的文字 越多,檔就越相關。 執行語意搜尋和關鍵詞搜尋,然後結合結果。
範例使用案例 客戶支援 where 用戶查詢與產品手冊中的單字不同。 範例:「如何開啟我的手機? 而手動區段稱為「切換電源」。 客戶支援 where 查詢包含特定、非描述性的技術詞彙。 範例:「HD7-8D 模型有何用途? 結合語意和技術詞彙的客戶支持查詢。 範例:「如何開啟 HD7-8D?
技術方法 使用內嵌來代表連續向量空間中的文字,啟用語意搜尋。 依賴離散令牌型方法,例如 單字包、 TF-IDFBM25 來比對關鍵詞。 使用重新排名方法來合併結果,例如相互排名融合或重新排名模型。
優勢 即使未使用確切字組,擷取與查詢的內容類似資訊也一樣。 需要精確關鍵詞比對的案例,適用於特定字詞焦點查詢,例如產品名稱。 結合這兩種方法的最佳方法。

增強擷取程式的方式

除了這些核心擷取策略之外,您還可以套用數種技術來進一步增強擷取程式:

  • 查詢擴充: 查詢擴充可透過使用多個擷取查詢的變化,協助擷取更廣泛的相關文件。 您可以針對每個展開的查詢執行個別搜尋,或使用單一擷取查詢中所有展開搜尋查詢的串連,來達成此目的。

注意

查詢擴充必須與查詢瞭解元件 (RAG 鏈結) 的變更一起完成。 擷取查詢的多個變化通常會在此步驟中產生。

  • 重新排名: 擷取初始區塊 set 之後,套用其他排名準則(例如,依時間排序)或重排序模型來重新排序結果。 重新排名有助於針對特定擷取查詢,設定最相關的區塊優先順序。 使用 mxbai-rerank 和 ColBERTv2跨編碼器模型重新調整,可能會提升擷取效能。
  • 元數據篩選: 使用從查詢瞭解步驟擷取的元數據篩選,根據特定準則縮小搜尋空間的範圍。 元數據篩選可以包含檔類型、建立日期、作者或網域特定標籤等屬性。 藉由結合元數據篩選與語意或關鍵詞型搜尋,您可以建立更具針對性且更有效率的擷取。

注意

元數據篩選必須結合查詢瞭解 (RAG 鏈結) 和元數據擷取 (資料管線) 元件的變更來完成。

提示增強

提示增強是 where 用戶查詢與提示範本中擷取的資訊和指示結合的步驟,以引導語言模型產生高質量的回應。 對此範本進行迭代,以 optimize 的方式提供給 LLM 的提示(即 提示工程),必須確保引導模型產生準確、有根據且連貫的回應。

有完整的 提示工程指南,但當您在提示範本上反覆運算時,有一些要記住的考慮:

  1. 提供範例
    • 在提示範本本身中包含格式正確的查詢及其對應的理想回應範例(很少拍攝的學習)。 這有助於模型了解回應所需的格式、樣式和內容。
    • 想出良好範例的其中一個實用方法是識別鏈結所苦苦掙扎的查詢類型。 為這些查詢建立金標準回應,並在提示中包含這些回應作為範例。
    • 請確定您提供的範例代表您在推斷時預期的用戶查詢。 旨在涵蓋各種不同的預期查詢範圍,以協助模型更妥善地一般化。
  2. 將提示範本參數化
    • 藉由將提示範本參數化以納入所擷取數據和用戶查詢以外的其他資訊,來設計提示範本具有彈性。 這可能是變數,例如目前的日期、用戶內容或其他相關元數據。
    • 在推斷時間將這些變數插入提示時,可以啟用更個人化或內容感知的回應。
  3. 考慮思考鏈提示
    • 對於複雜的查詢 where 直接答案並不明顯,請考慮 思考鏈結(CoT)提示。 這個提示工程策略會將複雜的問題分解成更簡單、循序的步驟,引導 LLM 完成邏輯推理程式。
    • 藉由提示模型「逐步思考問題」,建議您提供更詳細且有理由的回應,這對於處理多步驟或開放式查詢特別有效。
  4. 提示可能不會跨模型傳輸
    • 辨識提示通常不會順暢地跨不同的語言模型傳輸。 每個模型都有自己的獨特特性 where 一個適用於某個模型的提示可能無法對另一個模型有效。
    • 試驗不同的提示格式和長度,請參閱在線指南(例如 OpenAI Cookbook人類食譜),並準備在切換模型時調整和精簡您的提示。

LLM

RAG 鏈結的產生元件會採用上一個步驟中的增強提示範本,並將其傳遞至 LLM。 針對RAG鏈結的產生元件選取和優化 LLM 時,請考慮下列因素,這同樣適用於涉及 LLM 呼叫的任何其他步驟:

  1. 試驗不同的現成模型。
    • 每個模型都有自己的獨特屬性、優缺點。 某些模型可能會更瞭解特定領域,或對特定工作執行得更好。
    • 如先前所述,請記住,模型的選擇也可能影響提示工程程序,因為不同的模型可能會以不同的方式回應相同的提示。
    • 如果您的鏈結中有多個需要 LLM 的步驟,例如除了產生步驟之外,還需要呼叫查詢瞭解,請考慮針對不同的步驟使用不同的模型。 對於決定使用者查詢意圖等工作,更昂貴、一般用途的模型可能會過度使用。
  2. 視需要啟動小型並相應增加。
    • 雖然可以立即接觸最強大且功能最強的模型(例如 GPT-4、Claude),但從更小、更輕量型的模型開始,通常更有效率。
    • 在許多情況下,較小的開放原始碼替代方案,如 Llama 3 或 DBRX,可以降低成本並提供令人滿意的結果,並加快推斷時間。 這些模型對於不需要高度複雜推理或廣泛的世界知識的工作特別有效。
    • 當您開發和精簡 RAG 鏈結時,請持續評估所選模型的效能和限制。 如果您發現模型難以處理特定類型的查詢,或無法提供足夠詳細或準確的回應,請考慮相應增加為更有能力的模型。
    • 監視變更模型對回應品質、延遲和成本等關鍵計量的影響,以確保您達到特定使用案例需求的正確平衡。
  3. Optimize 模型 parameters
    • 試驗不同的參數設定,以找出響應品質、多樣性和一致性之間的最佳平衡。 例如,調整溫度可以控制產生的文字隨機性,而max_tokens可以 limit 回應長度。
    • 請注意,最佳參數設定可能會因特定工作、提示和所需的輸出樣式而有所不同。 根據所產生回應的評估,反覆測試和精簡這些設定。
  4. 工作特定的微調
    • 當您精簡效能時,請考慮微調 RAG 鏈結內特定子工作的較小模型,例如查詢瞭解。
    • 透過使用RAG鏈結來定型個別工作的特製化模型,相較於針對所有工作使用單一大型模型,您可以改善整體效能、降低延遲,以及降低推斷成本。
  5. 持續訓練前
    • 如果您的RAG應用程式處理特製化網域,或需要預先定型LLM中未充分表示的知識,請考慮在領域特定數據上繼續執行預先定型 (CPT)。
    • 持續預先定型可以改善模型對領域專屬的特定術語或概念的瞭解。 反過來,這可以減少大量提示工程或很少拍攝範例的需求。

後處理和護欄

LLM 產生響應之後,通常必須套用後處理技術或護欄,以確保輸出符合所需的格式、樣式和內容需求。 鏈結中的最後一個步驟(或多個步驟)可協助維護所產生回應的一致性和品質。 如果您要實作後處理和護欄,請考慮下列一些事項:

  1. 強制執行輸出格式
    • 根據您的使用案例,您可能需要產生的回應遵守特定格式,例如結構化範本或特定檔類型(例如 JSON、HTML、Markdown 等等)。
    • 如果需要結構化輸出,InstructorOutlines 等連結庫會提供良好的起點來實作這類驗證步驟。
    • 開發時,請花時間確保後續處理步驟具有足夠的彈性,以處理所產生回應中的變化,同時維持所需的格式。
  2. 維護樣式一致性
    • 如果您的RAG應用程式具有特定的樣式指導方針或語氣需求(例如正式與休閒、簡潔與詳細),後續處理步驟可以檢查並強制執行產生的回應中的這些樣式屬性。
  3. 內容篩選和安全護欄
  4. 處理幻覺
    • 防禦幻覺也可以實作為後處理步驟。 這可能牽涉到使用擷取的檔來交叉參考產生的輸出,或使用其他 LLM 來驗證回應的事實精確度。
    • 開發後援機制來處理 where 產生的響應無法符合事實正確性需求的情況,例如產生替代回應或為使用者提供免責聲明。
  5. 錯誤處理
    • 透過任何後續處理步驟,實作機制以正常處理 where 步驟發生問題或無法 generate 令人滿意的回應。 這可能牽涉到產生預設回應,或將問題呈報給人工操作員以進行手動檢閱。

< 上一頁:改善數據管線品質

下一步:評估RAG應用程式品質 >