為了使計算機能夠理解和處理非結構化資料(如文字,圖片,影片),通常使用嵌入模型(Embedding)將非結構化資料編碼為向量 [6]。可以理解為,向量就是非結構化資料的壓縮。因此,在對非結構化資料進行相似性搜尋、最近鄰搜尋(NNS, Nearest Neighbor Search)時,可以使用向量的近似度來表徵非結構化資料的語意近似度。
RAG應用組成
1、匯入知識庫檔案,檔案做向量化儲存
2、使用者提問,向量資料庫檢索,有三種檢索模式:
- 全文檢索:索引文件中的所有詞彙,從而允許使用者查詢任意詞彙,並返回包含這些詞彙的文字片段
- 向量檢索:透過生成查詢嵌入並查詢與其向量表示最相似的文字分段
- 混合檢索:同時執行全文檢索和向量檢索,並應用重排序步驟,從兩類查詢結果中選擇匹配使用者問題的最佳結果
- 重排序模型將根據候選文件列表與使用者問題語義匹配度進行重新排序,從而改進語義排序的結果
3、檢索結果給LLM處理(識別使用者意圖,丟掉非使用者問題的答案),給出回答
-
- 流程一般有以下幾步
-
- 知識文件的準備、嵌入模型(embedding model)、向量資料庫、查詢檢索和生產回答。
-
- 各步驟功能簡介
步驟 | 關鍵點 | 功能簡介 | 最佳化方向 |
---|---|---|---|
知識文件 | 文件載入器、文件切片 | 使用專門的文件載入器(例如PDF提取器)或模型(如OCR技術),將知識源轉換為大語言模型可理解的純文字資料 | 進行資料切塊的話,一般可以考慮內容分塊、遞迴分塊 對資料塊生成假設性問題 |
嵌入模型 | m3e、bge-large-zh | 將文字轉換為向量形式 | |
向量資料庫 | Faiss、Milvus、ES | 用於儲存和檢索向量資料的資料庫系統 | 儲存時可增加後設資料,比如日期、分層索引 |
查詢檢索 | 語句視窗檢索、父文件搜尋 | 在向量資料庫中搜尋與該問題向量語義上相似的知識文字或歷史對話記錄並返回。 | 查詢轉換, 即生成多個相似query分別進行向量檢索, 重排、過濾(召回多個文件啦) |
問答生成 | prompt、llm | 將使用者提問和上一步中檢索到的資訊結合,構建出一個提示模版,輸入到大語言模型中,獲得答案 | 檢索到的上下文和快取區的聊天記錄壓縮一起提供給llm |
以下為RAG的具體優勢:
1.外部知識的利用: RAG模型可以有效地利用外部知識庫,它可以引用大量的資訊,以提供更深入、準確且有價值的答案,這提高了生成文字的可靠性。
2.資料更新及時性: RAG模型具備檢索庫的更新機制,可以實現知識的即時更新,無需重新訓練模型。說明RAG模型可以提供與最新資訊相關的回答,高度適配要求及時性的應用。
3.回覆具有解釋性: 由於RAG模型的答案直接來自檢索庫,它的回覆具有很強的可解釋性,減少大模型的幻覺。使用者可以核實答案的準確性,從資訊來源中獲取支援。
4.高度定製能力: RAG模型可以根據特定領域的知識庫和prompt進行定製,使其快速具備該領域的能力。說明RAG模型廣泛適用於的領域和應用,比如虛擬伴侶、虛擬寵物等應用。
5.安全和隱私管理: RAG模型可以透過限制知識庫的許可權來實現安全控制,確保敏感資訊不被洩露,提高了資料安全性。
6.減少訓練成本: RAG模型在資料上具有很強的可擴充性,可以將大量資料直接更新到知識庫,以實現模型的知識更新。這一過程的實現不需要重新訓練模型,更經濟實惠。
RAG應用技術痛點
在實際應用中,RAG技術經常遇到以下幾個痛點:
- 入門容易,表現不夠好:
- RAG系統的基本搭建相對簡單,但實際應用中效果往往不盡如人意,難以達到預期的效能水平
- 改進方向不明確!
- 在面對效能不佳的RAG系統時,缺乏明確的改進方向和方法,不知道該選擇哪種技術來最佳化系統。
- 缺乏有效的評估體系:
- 系統建成後,透過簡單測試看似效果不錯,但缺乏系統化的評估手段來判斷其實際效能和應用價值。
對RAG(Retrieval-Augmented Generation)的最佳實踐中,通常會涉及以下關鍵問題和最佳化策略:
1. 資料如何處理的?
- 清洗和預處理:在使用資料之前,確保資料是乾淨和結構化的。這可能包括去除噪音、處理缺失值、標準化格式等。
- 分段和標註:將長文件分成較小的段落(chunks),併為每個段落新增相關標籤或後設資料,以便更好地進行檢索和生成。
2. chunk-size如何設定的?
- 最佳化長度:chunk-size的設定需要平衡資訊量和檢索效率。一般來說,較短的chunk可以提高檢索的準確性,但可能會丟失上下文資訊;較長的chunk可以保留更多的上下文,但可能會增加冗餘資訊。常見的chunk大小在100到300個詞之間,根據具體應用場景進行調整。
3. Embedding模型使用的什麼?
- 選擇合適的模型:常用的embedding模型包括BERT、RoBERTa、Sentence-BERT等。選擇時需要考慮模型的效能、訓練資料和計算資源。
4. Prompt如何設計?
- Prompt設計:設計有效的prompt以引導生成模型產生所需的回答。Prompt應儘量清晰、具體,避免模糊或開放性太強。
5. 檢索的topN如何設定?
- 檢索的topN設定:topN設定決定了在生成過程中使用多少個最相關的文件段落。常見的topN值在3到10之間,根據檢索效果和生成質量進行調整。
6. LLM模型選擇的什麼?
- 選擇合適的生成模型:常用的大語言模型(LLM)包括GPT-3.5、GPT-4、4o等。選擇時需要考慮模型的生成能力、推理速度和計算資源。
- 混合使用模型:在一些場景下,可以同時使用多個模型來提高生成效果,例如結合檢索模型和生成模型的優勢。
7. RAG檢索生成效果最佳化策略
-
選擇更大的模型:如果現有模型的生成效果不理想,可以嘗試使用更大的預訓練模型,這通常會帶來更好的生成質量和上下文理解能力。
-
使用不同的embedding模型:根據實際應用場景和資料特點,嘗試使用不同的embedding模型,以找到最適合的模型來提高檢索精度。
-
調整chunk-size:重新評估和調整chunk的大小,以找到資訊量和檢索效率之間的最佳平衡點。
透過不斷地實驗和最佳化,可以找到最適合特定應用場景的RAG配置,從而實現更好的檢索和生成效果。
解決這些痛點的關鍵在於建立一個完善的RAG評估系統,如果您也遇到了上述問題,說明您沒有建立起一個有效的RAG評估系統。評估系統的建立至關重要,因為它能夠幫助我們系統性地分析和最佳化RAG的各個環節,確保其在實際應用中的可靠性和有效性,以下是構建RAG評估系統的一些建議:
- 定義評估指標:
明確評價標準,例如準確性、召回率、生成質量、響應時間等。 - 測試資料集的準備
準備包含多樣化問題和答案的測試資料集,涵蓋不同場景和難度, - 自動化評估工具:
使用自動化工具對RAG系統進行持續評估,生成詳細報告,幫助發現系統弱點和改進方向。 - 使用者反饋和A/B測試:
收集真實使用者的反饋,結合A/B測試進行實驗,驗證不同最佳化方案的效果。