檢索增強生成(RAG)模式是一種業界標準的方法,用於建構應用程式,利用語言模型處理模型尚未知道的特定或專有資料。 此架構很簡單,但在設計、實驗和評估適合此架構的RAG解決方案時,涉及許多需要嚴謹科學方法來處理的複雜考量。
本文是一系列簡介。 本系列中的每個文章都涵蓋RAG解決方案設計中的特定階段。
本系列中的其他文章涵蓋下列考慮:
- 如何決定評估時應使用哪些測試媒介與查詢
- 如何選擇區塊化策略
- 如何判斷您應該擴充哪些區塊以及如何擴充它們
- 如何選擇正確的內嵌模型
- 如何設定搜尋索引
- 如何判斷哪些搜索方式,例如向量搜索、全文搜索、混合搜索和多次手動搜索,您應該執行
- 如何評估每個步驟
RAG 架構
RAG 應用程式流程
下列工作流程描述 RAG 應用程式的高階流程。
- 使用者會在智慧型手機應用程式使用者介面中發出查詢。
- 智慧型應用程式會進行 API 呼叫到協調器。 您可以使用 Microsoft 代理程式架構、語意核心、Azure AI 代理程式服務或 LangChain 等工具或平臺來實作協調器。
- 協調器會決定在 Azure AI 搜尋上執行的搜尋,併發出查詢。
- 協調器會將查詢的前 個 結果進行封裝。 它會將頂端結果和查詢封裝為提示內的內容,並將提示傳送至語言模型。 協調器會將回應傳回給智慧型應用程式,供用戶讀取。
RAG 數據管道流程
下列工作流程描述一個數據管線的高層次流程,為 RAG 應用程式提供基礎數據。
- 文件或其他媒體會被推送或拉入資料管線。
- 資料管線會透過以下步驟逐一處理每個媒體檔案:
- 分塊:將媒體檔案拆解成語意相關的部分,使每個部分理想情況下表達單一想法或概念。
- 擴充區塊:新增管線根據區塊中的內容所建立的元數據欄位。 數據管線會將元數據分類為離散欄位,例如標題、摘要和關鍵詞。
- 內嵌區塊:使用內嵌模型來向量化區塊,以及用於向量搜尋的任何其他元數據欄位。
- 永久保存區塊:將區塊儲存在搜索索引中。
RAG 設計和評估考慮因素
設計RAG解決方案時,您必須做出各種實作決策。 下圖說明您在做出這些決策時應詢問的一些問題。
下列清單簡要說明您在 RAG 解決方案開發的每一個階段應該做什麼。
在 準備階段期間,您應該:
- 確定解決方案的領域。 清楚定義RAG解決方案的商務需求。
- 蒐集具代表性的測試媒體。 收集能代表你整體收藏的RAG解決方案測試媒體檔案。
- 收集測試查詢。 蒐集資訊、測試查詢,並產生合成查詢和媒體檔案未涵蓋的查詢。
在 區塊化階段期間,您應該:
- 瞭解分塊經濟學。 了解在評估您的媒體集合分塊解決方案整體成本時應考慮哪些因素。
- 進行媒體分析。 在分析媒體檔案類型時,請提出以下問題,幫助你做出決策:
- 你想忽略或排除媒體檔案中的哪些內容?
- 您想要以區塊擷取哪些內容?
- 您要如何將內容區塊化?
- 瞭解分塊處理方法。 瞭解區塊化的不同方法,包括句子型、固定大小和自定義方法,或使用語言模型增強、檔版面配置分析和機器學習模型。
- 了解檔案結構如何影響分區。 根據媒體檔案的結構程度,選擇分區方法。
在 區塊擴充階段期間,您應該:
- 清除區塊。 實施清潔方法,消除不影響內容意義的差異。 這個方法支援近似匹配。
- 擴大區塊。 請考慮使用一般元數據欄位來增強區塊數據,並瞭解其在搜尋中的潛在用途。 瞭解用來產生元數據內容的常用工具或技術。
在 內嵌階段期間,您應該:
- 瞭解內嵌模型的重要性。 內嵌模型可大幅影響向量搜尋結果的相關性。
- 為您的使用案例選擇正確的內嵌模型。
- 評估內嵌模型。 藉由可視化內嵌和計算內嵌距離,評估內嵌模型。
在 資訊擷取階段期間,您應該:
- 建立搜尋索引。 將適當的向量搜尋組態套用至向量欄位。
- 了解搜尋選項。 請考慮不同類型的搜尋,包括向量、全文檢索、混合式和手動多個搜尋。 瞭解如何將查詢分割成子查詢和篩選查詢。
- 評估搜尋。 使用擷取評估方法來評估您的搜尋解決方案。
在 語言模型端對端評估階段期間,您應該:
- 了解語言模型評估指標。 有數個計量,包括基礎性、完整性、使用率和相關性,可用來評估語言模型的回應。
- 瞭解相似度和評估指標。 您可以使用相似度和評估指標來評估 RAG 解決方案。
- 瞭解文件、報告和匯總的重要性。 記錄超參數和評估結果。 匯總多個查詢的結果,並將結果可視化。
- 使用RAG實驗加速器。 使用 RAG實驗加速器 GitHub 存放庫 ,藉由執行多個實驗、保存及評估結果,協助小組找出RAG實作的最佳策略。
結構化方法
由於步驟和變數的數目,請務必遵循RAG解決方案的結構化評估程式。 評估每個步驟的結果,並根據需求進行變更。 您應該獨立評估每個步驟以進行優化,但請記住,最終結果就是您的客戶體驗。 在您決定每個步驟的接受準則之前,請務必先瞭解此程式中的所有步驟。
貢獻者
本文由 Microsoft 維護。 下列參與者撰寫本文。
主要作者:
- Raouf Aliouat |軟體工程師II
- Rob Bagby |主要內容開發人員 - Azure 模式和實務
- Prabal Deb|首席軟體工程師
- 查德·基特爾 |主要軟體工程師 - Azure 模式和實務
- Ritesh Modi |首席工程師
- 里安·普法爾茨 |資深技術計劃經理
- 蘭迪·瑟曼 |首席 AI 雲端解決方案架構師
若要查看非公開LinkedIn個人檔案,請登入LinkedIn。