全部產品
Search
文件中心

Platform For AI:基於EAS&OpenSearch搭建RAG檢索增強對話系統

更新時間:Sep 07, 2024

為了增強模型產生答案的準確性和資訊豐富度,您可以在大模型RAG服務中整合OpenSearch向量檢索版產品。該產品支援多種向量檢索演算法,高效能支援多種典型情境,並提供圖形化介面,可以查看索引資訊並實現簡單的資料管理功能。通過整合OpenSearch向量檢索版產品,可以提升RAG對話系統的檢索效率和使用者體驗。本文將介紹如何在部署RAG服務時關聯OpenSearch向量檢索版產品,以及對RAG對話系統的基礎功能和OpenSearch向量檢索版的特色功能進行說明。

背景資訊

EAS簡介

EAS(Elastic Algorithm Service)是PAI的模型線上服務平台,支援將模型部署為線上推理服務和AI-Web應用。EAS提供了彈性擴縮容和藍綠部署等功能,可以支撐您以較低的資源成本擷取高並發且穩定的線上演算法模型服務。此外,EAS具備資源群組管理和版本控制等功能,並且有完整營運監控體系等能力。更詳細的內容介紹,請參見EAS模型服務概述

RAG簡介

隨著AI技術的飛速發展,產生式人工智慧在文本產生、映像⽣成等領域展現出了令人矚目的成就。然而,在廣泛應用大語⾔模型(LLM)的過程中,⼀些固有局限性逐漸顯現:

  • 領域知識局限:大語言模型通常基於大規模通用資料集訓練而成,難以針對專業垂直領域提供深入和針對性處理。

  • 資訊更新滯後:由於模型訓練所依賴的資料集具有靜態特性,大模型無法即時擷取和學習最新的資訊與知識進展。

  • 模型誤導性輸出:受制於資料偏差、模型內在缺陷等因素,大語言模型可能會出現看似合理實則錯誤的輸出,即所謂的“大模型幻覺”。

為克服這些挑戰,並進一步強化大模型的功能性和準確性,檢索增強產生技術RAG(Retrieval-Augmented Generation)應運而生。這一技術通過整合外部知識庫,能夠顯著減少大模型虛構的問題,並提升其擷取及應用最新知識的能力,從而實現更個人化和精準化的LLM定製。

OpenSearch簡介

阿里雲OpenSearch向量檢索版,是一款全託管的大規模分布式向量檢索產品,支援多種向量檢索演算法,高精度下效能表現優異,能完成海量資料下的高性價比向量索引構建和相似性檢索服務,支援索引水平拓展與合并、索引流式構建,資料能夠做到即時動態更新,即增即查。

阿里雲OpenSearch向量檢索版可以高效能支援多種向量檢索典型情境,如:RAG檢索增強產生、多模態檢索、個人化搜推等。更詳細的內容介紹,請參見OpenSearch向量檢索版介紹

使用流程

EAS自建了RAG系統化解決方案,提供了靈活可調的參數配置,您可以通過WebUI或者API調用RAG服務,定製自己專屬的對話系統。RAG技術架構的核心為檢索和產生:

  • 在檢索方面,EAS支援多種向量資料庫,包括開源的Faiss和阿里雲的產品Milvus、Elasticsearch、Hologres、OpenSearch以及AnalyticDB for PostgreSQL。

  • 在產生方面,EAS支援豐富的開源模型,如通義千問、Llama、Mistral、百川等,同時支援ChatGPT調用。

本方案以OpenSearch為例,為您介紹如何使用EAS與阿里雲OpenSearch向量檢索版構建一個大模型RAG對話系統。整體流程大約花費20分鐘,具體流程如下:

  1. 準備向量檢索庫OpenSearch

    首先建立OpenSearch向量檢索版執行個體,並準備部署RAG服務關聯該執行個體時依賴的配置項。

  2. 部署RAG服務並關聯OpenSearch

    在EAS模型線上服務平台部署RAG服務,並關聯OpenSearch向量檢索版執行個體。

  3. 使用RAG對話系統

    您可以在RAG對話系統中串連OpenSearch,上傳業務資料檔案,並進行知識問答。同時,OpenSearch還支援索引表管理和資料管理等特色功能。

前提條件

已建立Virtual Private Cloud、交換器和安全性群組。具體操作,請參見搭建IPv4專用網路建立安全性群組

注意事項

本實踐受制於LLM服務的最大Token數量限制,旨在協助您體驗RAG對話系統的基本檢索功能:

  • 該對話系統受制於LLM服務的伺服器資源大小以及預設Token數量限制,能支援的對話長度有限。

  • 如果無需進行多輪對話,建議您關閉RAG服務的with chat history功能,這樣能有效減少達到限制的可能性。詳情請參見如何關閉RAG服務的with chat history功能

準備向量檢索庫OpenSearch

步驟一:建立OpenSearch向量檢索版執行個體

  1. 進入OpenSearch控制台,在左上方切換到OpenSearch-向量檢索版

    image

  2. 進入向量檢索版控制台後,在執行個體列表頁面,單擊建立執行個體

  3. OpenSearch隨用隨付頁面,配置以下關鍵參數。參數配置完成後,單擊立即購買

    參數

    描述

    商品版本

    選擇向量檢索版

    專用網路

    選擇已建立的專用網路和交換器。

    虛擬交換器

    使用者名稱

    OpenSearch向量檢索執行個體的使用者名稱。

    使用者密碼

    OpenSearch向量檢索執行個體的密碼。

步驟二:準備配置項

1.準備執行個體ID。

執行個體列表頁面,查看OpenSearch向量檢索版的執行個體ID,並儲存到本地。

image

2.準備索引表。

執行個體建立成功後,會進入待配置狀態。您需要為該執行個體配置表基礎資訊>資料同步>欄位配置>索引結構,之後等待索引重建完成即可正常搜尋。具體操作步驟如下:

  1. 進入表管理建立頁面。

    1. 執行個體列表頁面,單擊目標執行個體名稱,進入執行個體詳情頁面。

    2. 在左側導覽列,單擊表管理,然後單擊添加表

  2. 進行表基礎資訊配置,參數配置完成後,單擊下一步

    其中關鍵參數說明如下,其他參數配置說明,請參見通用版快速入門

    • 表名稱:自訂索引表名稱。

    • 資料分區:如果您購買了查詢節點,則在分區數設定時,可配置為不超過256的正整數, 用於提升全量構建速度、單次查詢效能。如果未購買查詢節點,則資料分區數只能配置為1。

    • 資料更新資源數:資料更新所用資源數,每個索引預設免費提供2個4核8G的更新資源,超出免費額度的資源將產生費用,詳情可參考向量檢索版國際站計費文檔

    • 情境模板:選擇通用模板

  3. 進行資料同步配置,參數配置完成後,單擊下一步

    其中全量資料來源支援三種資料來源方式,您可以根據具體業務情況進行選擇:

    • MaxCompute+API:使用MaxCompute進行資料全量寫入,即時資料通過API寫入。使用該方式時,具體參數配置說明,請參見MaxCompute + API 資料來源

    • Object Storage Service+API:使用OSS進行資料全量寫入,即時資料通過API寫入。使用該方式時,具體參數配置說明,請參見OSS + API 資料來源

    • API:全量與即時資料均通過API寫入。

  4. 進行欄位配置,參數配置完成後,單擊下一步

    將以下欄位設定檔樣本內容儲存為JSON檔案,然後單擊右上方的匯入欄位索引結構,並按控制台操作指引匯入索引檔案。匯入後,將基於檔案內容填寫欄位配置和索引結構。

    欄位設定檔

    {
    	"schema": {
    		"summarys": {
    			"parameter": {
    				"file_compressor": "zstd"
    			},
    			"summary_fields": [
    				"id",
    				"embedding",
    				"file_path",
    				"file_name",
    				"file_type",
    				"node_content",
    				"node_type",
    				"doc_id",
    				"text",
    				"source_type"
    			]
    		},
    		"file_compress": [
    			{
    				"name": "file_compressor",
    				"type": "zstd"
    			},
    			{
    				"name": "no_compressor",
    				"type": ""
    			}
    		],
    		"indexs": [
    			{
    				"index_fields": [
    					{
    						"boost": 1,
    						"field_name": "id"
    					},
    					{
    						"boost": 1,
    						"field_name": "embedding"
    					}
    				],
    				"indexer": "aitheta2_indexer",
    				"index_name": "embedding",
    				"parameters": {
    					"enable_rt_build": "true",
    					"min_scan_doc_cnt": "20000",
    					"vector_index_type": "Qc",
    					"major_order": "col",
    					"builder_name": "QcBuilder",
    					"distance_type": "SquaredEuclidean",
    					"embedding_delimiter": ",",
    					"enable_recall_report": "true",
    					"ignore_invalid_doc": "true",
    					"is_embedding_saved": "false",
    					"linear_build_threshold": "5000",
    					"dimension": "1536",
    					"rt_index_params": "{\"proxima.oswg.streamer.segment_size\":2048}",
    					"search_index_params": "{\"proxima.qc.searcher.scan_ratio\":0.01}",
    					"searcher_name": "QcSearcher",
    					"build_index_params": "{\"proxima.qc.builder.quantizer_class\":\"Int8QuantizerConverter\",\"proxima.qc.builder.quantize_by_centroid\":true,\"proxima.qc.builder.optimizer_class\":\"BruteForceBuilder\",\"proxima.qc.builder.thread_count\":10,\"proxima.qc.builder.optimizer_params\":{\"proxima.linear.builder.column_major_order\":true},\"proxima.qc.builder.store_original_features\":false,\"proxima.qc.builder.train_sample_count\":3000000,\"proxima.qc.builder.train_sample_ratio\":0.5}"
    				},
    				"index_type": "CUSTOMIZED"
    			},
    			{
    				"has_primary_key_attribute": true,
    				"index_fields": "id",
    				"is_primary_key_sorted": false,
    				"index_name": "id",
    				"index_type": "PRIMARYKEY64"
    			},
    			{
    				"index_fields": "file_path",
    				"index_name": "file_path",
    				"index_type": "STRING"
    			},
    			{
    				"index_fields": "file_name",
    				"index_name": "file_name",
    				"index_type": "STRING"
    			},
    			{
    				"index_fields": "file_type",
    				"index_name": "file_type",
    				"index_type": "STRING"
    			},
    			{
    				"index_fields": "node_content",
    				"index_name": "node_content",
    				"index_type": "STRING"
    			},
    			{
    				"index_fields": "node_type",
    				"index_name": "node_type",
    				"index_type": "STRING"
    			},
    			{
    				"index_fields": "doc_id",
    				"index_name": "doc_id",
    				"index_type": "STRING"
    			},
    			{
    				"index_fields": "text",
    				"index_name": "text",
    				"index_type": "STRING"
    			},
    			{
    				"index_fields": "source_type",
    				"index_name": "source_type",
    				"index_type": "STRING"
    			}
    		],
    		"attributes": [
    			{
    				"file_compress": "no_compressor",
    				"field_name": "id"
    			},
    			{
    				"file_compress": "no_compressor",
    				"field_name": "embedding"
    			},
    			{
    				"file_compress": "no_compressor",
    				"field_name": "file_path"
    			},
    			{
    				"file_compress": "no_compressor",
    				"field_name": "file_name"
    			},
    			{
    				"file_compress": "no_compressor",
    				"field_name": "file_type"
    			},
    			{
    				"file_compress": "no_compressor",
    				"field_name": "node_content"
    			},
    			{
    				"file_compress": "no_compressor",
    				"field_name": "node_type"
    			},
    			{
    				"file_compress": "no_compressor",
    				"field_name": "doc_id"
    			},
    			{
    				"file_compress": "no_compressor",
    				"field_name": "text"
    			},
    			{
    				"file_compress": "no_compressor",
    				"field_name": "source_type"
    			}
    		],
    		"fields": [
    			{
    				"compress_type": "uniq",
    				"field_type": "STRING",
    				"field_name": "id"
    			},
    			{
    				"user_defined_param": {
    					"multi_value_sep": ","
    				},
    				"multi_value": true,
    				"compress_type": "uniq",
    				"field_type": "FLOAT",
    				"field_name": "embedding"
    			},
    			{
    				"compress_type": "uniq",
    				"field_type": "STRING",
    				"field_name": "file_path"
    			},
    			{
    				"compress_type": "uniq",
    				"field_type": "STRING",
    				"field_name": "file_name"
    			},
    			{
    				"compress_type": "uniq",
    				"field_type": "STRING",
    				"field_name": "file_type"
    			},
    			{
    				"compress_type": "uniq",
    				"field_type": "STRING",
    				"field_name": "node_content"
    			},
    			{
    				"compress_type": "uniq",
    				"field_type": "STRING",
    				"field_name": "node_type"
    			},
    			{
    				"compress_type": "uniq",
    				"field_type": "STRING",
    				"field_name": "doc_id"
    			},
    			{
    				"compress_type": "uniq",
    				"field_type": "STRING",
    				"field_name": "text"
    			},
    			{
    				"compress_type": "uniq",
    				"field_type": "STRING",
    				"field_name": "source_type"
    			}
    		],
    		"table_name": "abc"
    	},
    	"extend": {
    		"description": [],
    		"vector": [
    			"embedding"
    		],
    		"embeding": []
    	}
    }
  5. 進行索引結構配置,參數配置完成後,單擊下一步

    其中關鍵配置說明如下,其他參數配置說明,請參見向量索引通用配置

    • 向量維度:設定為512。

    • 距離類型:建議選擇InnerProduct

  6. 確認建立設定精靈頁面,單擊確認建立

    系統將自動跳轉至表管理頁面,當狀態使用中時,表明索引表建立成功。

3.為OpenSearch向量檢索版執行個體開通公網訪問功能。

目前,EAS只能通過公網訪問OpenSearch,需要具備訪問公網的能力。因此,您需要為EAS添加VPC,並為該VPC綁定NAT Gateway和Elastic IP Address(EIP)。同時,為確保OpenSearch執行個體能夠接收來自EAS執行個體的公網請求,您需要為OpenSearch開通公網訪問,並將上述EIP地址加入白名單。以下內容為您介紹如何為EAS的VPC配置公網訪問OpenSearch功能,EAS可以使用與OpenSearch相同的VPC,也可以使用其他VPC。

  1. 為建立執行個體時綁定的Virtual Private Cloud配置公網訪問功能。具體操作,請參見使用公網NAT GatewaySNAT功能訪問互連網

  2. 查看已綁定的Elastic IP Address地址。

    1. 進入專用網路的資源管理頁面,具體操作,請參見查看專用網路

    2. 單擊已綁定的公網NAT Gateway,進入公網NAT Gateway頁面。image

    3. 單擊公網NAT Gateway執行個體ID,進入基本資料頁面。

    4. 單擊綁定的Elastic IP Address,查看已綁定的Elastic IP Address地址,並儲存到本地。image

  3. 在OpenSearch向量檢索版執行個體列表頁面,單擊目標執行個體名稱,進入執行個體詳情頁面。

  4. 網路資訊地區,開啟公網訪問開關,並在修改公網訪問白名單配置面板中,按照控制台操作指引,將上述步驟已查詢的Elastic IP Address配置為公網訪問白名單。

  5. 網路資訊地區,將公網網域名稱後的訪問地址儲存到本地。

4.查看執行個體使用者名稱和密碼

即在建立OpenSearch向量檢索版執行個體時,輸入的使用者名稱和密碼。您可以在執行個體詳情頁面的API入口地區查看。image

部署RAG服務並關聯OpenSearch

  1. 進入模型線上服務頁面。

    1. 登入PAI控制台

    2. 在左側導覽列單擊工作空間列表,在工作空間列表頁面中單擊待操作的工作空間名稱,進入對應工作空間內。

    3. 在工作空間頁面的左側導覽列選擇模型部署>模型線上服務(EAS),進入模型線上服務(EAS)頁面。image

  2. 模型線上服務頁面,單擊部署服務,在情境化模型部署地區,單擊大模型RAG對話系統部署6eea7736f88e6ec8b3b900e4d028bb48

  3. 部署大模型RAG對話系統頁面,配置以下關鍵參數,其他參數配置說明,請參見步驟二:部署RAG服務

    參數

    描述

    基本資料

    模型來源

    選擇開源公用模型

    模型類別

    選擇模型類別,本方案以大模型Qwen1.5-1.8b為例(因使用小模型做示範效果可能會更好,但小模型更容易給出誤導性答案)。

    資源配置

    執行個體數

    配置為1。

    資源配置選擇

    系統會根據已選擇的模型類別,自動推薦適合的資源規格。

    向量檢索庫設定

    版本類型

    選擇OpenSearch

    訪問地址

    配置為步驟二中已擷取的公網網域名稱,不帶http://或https://,例如ha-cn-****.public.ha.aliyuncs.com。

    執行個體id

    配置為步驟二中已擷取的OpenSearch向量檢索版執行個體的ID。

    使用者名稱

    配置為建立OpenSearch向量檢索版執行個體時設定的使用者名稱。

    密碼

    配置為建立OpenSearch向量檢索版執行個體時設定的密碼。

    表名稱

    配置為步驟二中已建立的索引表名稱。

    專用網路配置

    VPC

    • 您可以選擇與OpenSearch一致的專用網路和交換器。

    • 您也可以使用其他專用網路,但需要確保該專用網路具有公網訪問能力,並將綁定的Elastic IP Address添加為OpenSearch執行個體的公網訪問白名單。具體操作,請參見使用公網NAT GatewaySNAT功能訪問互連網公網白名單配置

    交換器

    安全性群組

    選擇安全性群組。

  4. 參數配置完成後,單擊部署

使用RAG對話系統

RAG對話系統基礎功能支援

RAG對話系統的基本使用方法如下,更多詳細介紹,請參見大模型RAG對話系統

配置RAG對話系統

  1. RAG服務部署成功後,單擊服務方式列下的查看Web應用,啟動WebUI頁面。

  2. 配置機器學習模型。

    • Embedding Model Name:系統內建了四種Embedding模型供您選擇,能夠將本文內容轉化為Embedding向量形式。您可以根據情境需要選擇更適合業務的Embedding模型。

    • Embedding Dimension:選擇Embedding Model Name後,系統將自動進行配置,無需您手動操作。

  3. 測試向量檢索庫OpenSearch串連是否正常。

    系統已自動識別並應用了部署服務時配置的向量檢索庫設定,您可以單擊Connect OpenSearch,來驗證OpenSearch向量檢索版執行個體是否串連正常。如果串連失敗,請參考步驟二:準備配置項,檢查向量檢索庫配置是否正確,修改對應配置項為正確配置,然後單擊Connect OpenSearch,重新串連OpenSearch執行個體。

上傳指定的業務資料檔案

Upload頁簽中,上傳指定的業務資料檔案,類型為.txt、.pdf、Excel(.xlsx或.xls)、.csv、Word(.docx或.doc)、Markdown或.html。

image

  1. 設定語義切塊參數。

    樣本

    說明

    rag_chatbot_test_doc.txt

    通過配置以下參數來控制文檔切塊粒度的大小和進行QA資訊提取:

    • Chunk Size:指定每個分塊的大小,單位為位元組,預設為500。

    • Chunk Overlap:表示相鄰分塊之間的重疊量,預設為10。

    • Process with QA Extraction Model:通過選中Yes複選框啟動QA資訊提取功能,系統將在您上傳業務資料檔案後自動抽取出QA對,以獲得更好的檢索和回答效果。

  2. FilesDirectory頁簽下上傳業務資料檔案(支援多檔案上傳)或對應目錄。

配置問答策略

Chat頁簽,支援以下三種向量檢索方式,您可以根據情境需要進行選擇:

  • Embedding Only:向量資料庫線索召回。

  • Keyword Only:關鍵詞檢索召回。

  • Hybrid:向量資料庫和關鍵詞檢索多路召回融合。

image

進行知識問答

將檢索返回的結果與使用者的問題輸入至已選擇的Prompt模板中,送入EAS-LLM服務,從中擷取問答結果。

image

OpenSearch特色功能支援

阿里雲OpenSearch向量檢索版為客戶提供了便捷的圖形化界⾯,可以高效管理索引表(Table)以及索引(Index),以下內容將為您介紹,如何使用OpenSearch向量檢索版控制台,查看索引資訊並實現簡單的資料管理。

索引表管理

  1. 進入阿里雲OpenSearch向量檢索版執行個體詳情頁面。

    1. 登入阿里雲OpenSearch向量檢索版控制台

    2. 單擊已建立的執行個體ID,進入執行個體詳情頁面。

  2. 進入表管理頁面,對索引表進行管理操作。

    1. 在左側導覽列,單擊表管理。

      頁面中展示當前執行個體下建立的所有表。image

    2. 在表管理頁面,對索引表進行管理操作,包括查看欄位及索引結構、編輯索引、索引重建以及刪除索引等。具體操作細節,請參見表管理

資料管理

  1. 進入阿里雲OpenSearch向量檢索版執行個體詳情頁面。

    1. 登入阿里雲OpenSearch向量檢索版控制台

    2. 單擊已建立的執行個體ID,進入執行個體詳情頁面。

  2. 添加資料。

    1. 在左側導覽列,單擊向量管理 > 添加資料

    2. 在頁面右側下拉式清單中,選擇表單模式開發人員模式image

    3. 選擇要添加資料的目標索引表(Table)名稱。

    4. 按欄位輸入資料內容或填寫資料寫入語句,然後單擊添加。具體操作請參見:添加資料

      當執行結果出現"message": "success"時,表示資料上傳成功,即可完成單條資料或多條資料的添加。

  3. 查看錶指標資料。

    1. 在左側導覽列,單擊指標監控 > 表指標

    2. 選擇要查看資料的目標索引表(Table)名稱,即可查看索引內文檔個數、每秒請求成功次數等指標。詳情請參見表指標

  4. 刪除資料。

    1. 在左側導覽列,選擇向量管理 > 刪除資料

    2. 在頁面右側下拉式清單中,選擇表單模式開發人員模式

    3. 選擇表名並輸入主鍵,然後單擊刪除。具體操作請參見:刪除資料

      當執行結果出現"message": "success"時,表示資料刪除成功。

相關文檔

  • 針對AIGC和LLM的典型前沿情境,EAS提供了簡化的部署方式。您可以很方便地一鍵拉起服務,包括ComfyUI部署、Stable Diffusion WebUI部署、ModelScope模型部署、HuggingFace模型部署、Triton部署以及TFserving部署等。詳情請參見EAS情境化部署說明

  • RAG服務WebUI介面提供了豐富的推理參數配置選項,以滿足多樣化需求。此外,RAG服務也支援通過API介面進行調用。具體實現細節以及參數配置說明,請參見大模型RAG對話系統