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