大語言模型的知識缺少企業私有或實時的數據,通過檢索增強生成RAG(Retrieval-Augmented Generation)技術可以檢索私有知識庫,并以上下文的方式提供給大語言模型,從而增強大語言模型回答的準確性和相關性。本文將詳細介紹如何在LangStudio中開發和部署RAG應用。
背景信息
在現代信息檢索領域,RAG模型結合了信息檢索和生成式人工智能的優勢,能夠在特定應用場景中提供更為精準和相關的答案。例如在金融、醫療等專業領域,用戶通常需要精確且相關的信息來支持決策。傳統的生成模型雖然在自然語言理解和生成方面表現出色,但在專業知識的準確性上可能存在不足。RAG模型通過將檢索與生成技術相結合,有效提升了回答的準確性和上下文相關性。本文以人工智能平臺PAI為基礎產品,為您介紹面向金融、醫療場景的大模型RAG檢索增強解決方案。
前提條件
本文創建的向量數據庫連接基于Milvus數據庫,因此需要您先完成Milvus數據庫的創建,詳情請參見創建Milvus實例、實例管理。
已將RAG知識庫語料上傳至OSS中。本文針對金融、醫療場景提供以下示例語料:
1. 部署LLM和Embedding模型
本文以快速開始 > ModelGallery中部署的模型服務為例,后續創建連接時也會基于此處的模型服務進行創建。
前往快速開始 > ModelGallery,分別按場景選擇大語言模型及Embedding分類,并部署指定的模型。本文以通義千問2.5-7B-Instruct和bge-large-zh-v1.5 通用向量模型為例進行部署。請務必選擇使用指令微調的大語言模型(名稱中包含“Chat”或是“Instruct”的模型),Base模型無法正確遵循用戶指令回答問題。
更多部署詳情,請參見模型部署及訓練。
前往任務管理,單擊已部署的服務名稱,在服務詳情頁簽下單擊查看調用信息,分別獲取前面部署的LLM和Embedding模型服務的VPC訪問地址和Token,供后續創建連接時使用。
2. 創建連接
本文創建的LLM和Embedding模型服務連接基于快速開始 > ModelGallery中部署的模型服務。更多其他類型的連接及詳細說明,請參見連接管理。
2.1 創建LLM服務連接
進入LangStudio,選擇工作空間后,在連接管理頁簽下單擊新建連接,進入應用流創建頁面。
創建通用LLM模型服務連接。其中base_url和api_key分別對應1. 部署LLM和Embedding模型中LLM的VPC訪問地址和Token。
2.2 創建Embedding模型服務連接
同2.1 創建LLM服務連接,創建通用Embedding模型服務連接。其中base_url和api_key分別對應1. 部署LLM和Embedding模型中Embedding模型的VPC訪問地址和Token。
2.3 創建向量數據庫連接
同2.1 創建LLM服務連接,創建Milvus數據庫連接。
關鍵參數說明:
uri:Milvus實例的訪問地址,即
http://<Milvus內網訪問地址>
,Milvus內網訪問地址如下:則uri為
http://c-b1c5222fba****-internal.milvus.aliyuncs.com
。token:登錄Milvus實例的用戶名和密碼,即
<yourUsername>:<yourPassword>
。database:數據庫名稱,本文使用默認數據庫
default
。
3. 創建離線知識庫
通過PAI-Designer預置的RAG離線知識庫構建工作流模板,將語料經過解析、分塊、向量化后存儲到向量數據庫,從而構建知識庫。
進入PAI-Designer,選擇工作空間后,在預置模板 > LLM 大語言模型頁簽下創建并進入RAG離線知識庫構建工作流。
配置工作流,關鍵組件說明:
工作流中的其余配置保持默認或根據實際需求進行配置,關鍵組件配置如下:
讀OSS數據
OSS數據路徑:配置前提條件中RAG知識庫語料的OSS路徑。
RAG文本解析分塊
塊大小:本文部署的Embedding模型bge-large-zh-v1.5最大輸入為512,需要將文本分塊大小調整為512或者更小。
RAG文本向量生成
Embedding模型連接名稱:配置2.2 創建Embedding模型服務連接中創建的連接名稱。
RAG索引構建
向量數據庫連接:配置2.3 創建向量數據庫連接 中創建的連接。
集合/表名稱:配置前提條件中創建Milvus數據庫的Collection。
執行調優 > 專有網絡配置:配置Milvus實例所在的專有網絡。
運行工作流。
4. 創建并運行RAG應用流
進入LangStudio,選擇工作空間后,在應用流頁簽下單擊新建應用流,模板類型選擇RAG,創建RAG應用流。
啟動運行時:單擊右上角啟動運行時并進行配置。注:在進行Python節點解析或查看更多工具時,需要保證運行時已啟動。
關鍵參數說明:
專有網絡配置:選擇前提條件中創建Milvus實例時的專有網絡。
開發應用流。應用流中的其余配置保持默認或根據實際需求進行配置,關鍵節點配置如下:
rewrite_question:重寫用戶問題,將用戶的問題重寫為更具體、準確的表述。
connection:選擇2.1 創建LLM服務連接中創建的連接。
model:輸入default。如果connection選擇的是百煉大模型服務連接,則model需在下拉列表中選擇對應的模型名稱,百煉模型名稱可在百煉-模型廣場中查看。
retrieve:在知識庫中檢索與用戶問題相關的文本。
vector_store_conn:選擇2.3 創建向量數據庫連接中創建的連接。
index_name:輸入前提條件中創建Milvus數據庫的Collection。
embedding_model_conn:選擇2.2 創建Embedding模型服務連接中創建的連接。
embedding_model_name:置空。如果embedding_model_conn選擇的是百煉大模型服務連接,則embedding_model_name需在下拉列表中選擇對應的模型名稱,百煉模型名稱可在百煉-模型廣場中查看。
threshold_filter:根據向量索引查找組件返回的相似度分數過濾分數低于閾值的文檔。
generate_answer:使用過濾后的文檔作為上下文,與用戶問題一起發送給大語言模型,生成回答。
connection:選擇2.1 創建LLM服務連接中創建的連接。為了簡化流程,本文在generate_answer階段采用和rewrite_question階段相同的連接。在生產階段,您可以根據實際需求創建并選擇不同的連接。
model:輸入default。如果connection選擇的是百煉大模型服務連接,則model需在下拉列表中選擇對應的模型名稱,百煉模型名稱可在百煉-模型廣場中查看。
調試/運行:單擊右上角對話, 開始執行應用流。
查看鏈路:單擊生成答案下的查看鏈路,查看Trace詳情或拓撲視圖。
5. 部署應用流
在應用流開發頁面,單擊右上角部署,部署參數其余配置保持默認或根據實際需求進行配置,關鍵參數配置如下:
資源部署信息 > 實例數:配置服務實例數。本文部署僅供測試使用,因此實例數配置為1。在生產階段,建議配置多個服務實例,以降低單點故障的風險。
專有網絡配置 > VPC:配置Milvus實例所在的專有網絡。
更多部署詳情,請參見應用流部署。
6. 調用服務
部署成功后,跳轉到PAI-EAS,在在線調試頁簽下配置并發送請求。請求參數中的Key與應用流中輸入節點中的"Chat 輸入"字段一致,本文使用默認字段question
。
更多調用方式(如API調用)及詳細說明,請參見調用服務。
附錄:案例對比
在以下案例中,將對比金融和醫療領域中使用與不使用RAG技術來解決特定任務的效果。紅色部分表示大模型回答存在事實性錯誤或不夠具體精確,而綠色部分則展示了使用RAG技術后得到的正確回復。
金融領域
任務一:投資風險分析
問題:請根據最新的新聞報道,分析美國科技行業目前投資風險性如何,是否存在泡沫,給出是或否的具體回答。
通義千問2.5-7B-Instruct回復 | 通義千問2.5-7B-Instruct + RAG回復 |
任務二:行業趨勢分析
問題:請根據最新的新聞報道,給出房地產相關行業是否樂觀的判斷。
通義千問2.5-7B-Instruct回復 | 通義千問2.5-7B-Instruct + RAG回復 |
任務三:貿易情況分析
問題:我國近10個月來貨物貿易進出口情況如何?
通義千問2.5-7B-Instruct回復 | 通義千問2.5-7B-Instruct + RAG回復 |
醫療領域
任務一:疾病治療建議
問題:患者女,40歲,常年患有全身性紅斑狼瘡。請根據相關醫療知識,給出個性化的治療建議。
通義千問2.5-7B-Instruct回復 | 通義千問2.5-7B-Instruct + RAG回復 |
任務二:疾病輔助診斷
問題:患者男,30歲,近日發現右眼視力嚴重受損,視力模糊并且出現復視,并且有肢體無力、共濟失調現象。請根據相關醫療知識,判斷患者可能患有的疾病,并且推薦醫院相關科室進行治療。
通義千問2.5-7B-Instruct回復 | 通義千問2.5-7B-Instruct + RAG回復 |
任務三:疾病預警
問題:孕婦子癇前癥的發病病因有哪些。
通義千問2.5-7B-Instruct回復 | 通義千問2.5-7B-Instruct + RAG回復 |