大模型RAG對(duì)話(huà)系統(tǒng)
EAS提供了場(chǎng)景化部署方式,通過(guò)簡(jiǎn)單配置幾個(gè)參數(shù),您便可以一鍵部署集成了大語(yǔ)言模型(LLM)和檢索增強(qiáng)生成(RAG)技術(shù)的對(duì)話(huà)系統(tǒng)服務(wù),顯著縮短服務(wù)部署時(shí)間。在使用該服務(wù)進(jìn)行推理驗(yàn)證時(shí),它能夠有效地從知識(shí)庫(kù)中檢索相關(guān)信息,并與大語(yǔ)言模型的回答相結(jié)合,以產(chǎn)生準(zhǔn)確且信息豐富的答案,從而大幅提高問(wèn)答的質(zhì)量和整體性能。該服務(wù)適用于問(wèn)答、摘要生成和依賴(lài)外部知識(shí)的自然語(yǔ)言處理任務(wù)。本文為您介紹如何部署RAG對(duì)話(huà)系統(tǒng)服務(wù)以及如何進(jìn)行模型推理驗(yàn)證。
背景信息
大語(yǔ)言模型(LLM)在生成準(zhǔn)確性和實(shí)時(shí)性回復(fù)方面存在局限,因此并不適合直接用于需要精確信息的客服或問(wèn)答等場(chǎng)景。為了解決這一問(wèn)題,當(dāng)前業(yè)界廣泛采用的方法是利用檢索增強(qiáng)生成(Retrieval-Augmented Generation, RAG)技術(shù)來(lái)增強(qiáng)LLM的性能,這一技術(shù)可以顯著提升問(wèn)答、摘要生成以及其他需要引用外部知識(shí)的自然語(yǔ)言處理(NLP)任務(wù)的質(zhì)量。
RAG通過(guò)將大語(yǔ)言模型(如通義千問(wèn))和信息檢索組件結(jié)合在一起,增強(qiáng)了模型生成答案的準(zhǔn)確性和信息量。在處理用戶(hù)查詢(xún)時(shí),RAG通過(guò)信息檢索組件在知識(shí)庫(kù)中尋找與查詢(xún)相關(guān)的文檔或信息片段,將這些檢索到的內(nèi)容與原始查詢(xún)一同輸入大語(yǔ)言模型之后,模型能夠利用現(xiàn)有的歸納生成能力產(chǎn)生基于最新信息的、符合事實(shí)的回復(fù),而無(wú)需對(duì)模型進(jìn)行重新訓(xùn)練。
使用EAS部署的對(duì)話(huà)系統(tǒng)服務(wù),通過(guò)集成大語(yǔ)言模型(LLM)和檢索增強(qiáng)生成(RAG)技術(shù),克服了LLM在準(zhǔn)確性和實(shí)時(shí)性方面的局限,為多種問(wèn)答場(chǎng)景提供了準(zhǔn)確且信息豐富的響應(yīng),從而提升了自然語(yǔ)言處理任務(wù)的整體效能和用戶(hù)體驗(yàn)。
前提條件
已創(chuàng)建一個(gè)專(zhuān)有網(wǎng)絡(luò)(VPC)、交換機(jī)和安全組。詳情請(qǐng)參見(jiàn)創(chuàng)建和管理專(zhuān)有網(wǎng)絡(luò)和創(chuàng)建安全組。
說(shuō)明使用Faiss作為向量檢索庫(kù)時(shí),不需要?jiǎng)?chuàng)建VPC、交換機(jī)和安全組。
當(dāng)使用微調(diào)模型部署服務(wù)時(shí),您需要準(zhǔn)備OSS存儲(chǔ)空間(Bucket)或NAS文件系統(tǒng),用來(lái)存放微調(diào)的模型文件。具體操作,請(qǐng)參見(jiàn)控制臺(tái)快速入門(mén)或創(chuàng)建文件系統(tǒng)。
說(shuō)明如果使用Faiss作為向量檢索庫(kù),您需要準(zhǔn)備OSS存儲(chǔ)空間(Bucket),用來(lái)存儲(chǔ)上傳的知識(shí)庫(kù)文件。
注意事項(xiàng)
本實(shí)踐受制于LLM服務(wù)的最大Token數(shù)量限制,旨在幫助您體驗(yàn)RAG對(duì)話(huà)系統(tǒng)的基本檢索功能:
該對(duì)話(huà)系統(tǒng)受制于LLM服務(wù)的服務(wù)器資源大小以及默認(rèn)Token數(shù)量限制,能支持的對(duì)話(huà)長(zhǎng)度有限。
如果無(wú)需進(jìn)行多輪對(duì)話(huà),建議您在RAG服務(wù)的WebUI頁(yè)面關(guān)閉with chat history功能,這樣能有效減少達(dá)到限制的可能性。詳情請(qǐng)參見(jiàn)如何關(guān)閉RAG服務(wù)的with chat history功能。
步驟一:部署RAG服務(wù)
部署大模型RAG對(duì)話(huà)系統(tǒng),并綁定向量檢索庫(kù),具體操作步驟如下:
登錄PAI控制臺(tái),在頁(yè)面上方選擇目標(biāo)地域,并在右側(cè)選擇目標(biāo)工作空間,然后單擊進(jìn)入EAS。
在模型在線(xiàn)服務(wù)(EAS)頁(yè)面,單擊部署服務(wù),然后在場(chǎng)景化模型部署區(qū)域,單擊大模型RAG對(duì)話(huà)系統(tǒng)部署。
在部署大模型RAG對(duì)話(huà)系統(tǒng)頁(yè)面,配置以下關(guān)鍵參數(shù)。
基本信息
參數(shù)
描述
模型來(lái)源
支持以下兩種模型來(lái)源:
開(kāi)源公共模型:PAI預(yù)置了多種開(kāi)源公共模型供您選擇,包括Qwen、Llama、ChatGLM、Baichuan、Falcon、Yi、Mistral、Gemma、DeepSpeek等。您可以直接部署相應(yīng)參數(shù)量的模型。
自持微調(diào)模型:PAI也支持部署您自行微調(diào)后的模型,來(lái)滿(mǎn)足特定的場(chǎng)景。
模型類(lèi)別
當(dāng)使用開(kāi)源公共模型時(shí),您可以根據(jù)具體使用場(chǎng)景選擇相應(yīng)參數(shù)量的開(kāi)源模型。
使用自持微調(diào)模型時(shí),您需要根據(jù)您微調(diào)的模型,選擇相應(yīng)的模型類(lèi)別、參數(shù)量以及精度。
模型配置
使用自持微調(diào)模型時(shí),您需配置微調(diào)模型的文件路徑。后續(xù)部署服務(wù)時(shí),系統(tǒng)將從該路徑讀取模型配置文件。支持以下兩種配置類(lèi)型:
說(shuō)明建議您在Huggingface的Transformers下運(yùn)行微調(diào)后的模型,確認(rèn)其輸出結(jié)果符合預(yù)期后,再考慮將其部署為EAS服務(wù)。
對(duì)象存儲(chǔ)(OSS):請(qǐng)選擇微調(diào)模型文件所在的OSS存儲(chǔ)路徑。
文件存儲(chǔ)(NAS):請(qǐng)選擇微調(diào)模型文件所在的NAS文件系統(tǒng)、NAS掛載點(diǎn)和NAS源路徑。
資源配置
參數(shù)
描述
資源配置選擇
在選擇模型類(lèi)別后,系統(tǒng)將自動(dòng)匹配適合的資源規(guī)格。更換至其他資源規(guī)格,可能會(huì)導(dǎo)致模型服務(wù)啟動(dòng)失敗。
推理加速
目前,部署在A10或GU30系列機(jī)型上的Qwen、Llama2、ChatGLM或Baichuan2等系列模型服務(wù),支持啟用推理加速功能。支持以下兩種加速類(lèi)型:
PAI-BladeLLM自動(dòng)推理加速:BladeLLM提供超高性?xún)r(jià)比的大模型推理加速能力,可幫助您一鍵享受高并發(fā)和低延時(shí)的技術(shù)優(yōu)勢(shì)。
開(kāi)源框架vllm推理加速
向量檢索庫(kù)設(shè)置
RAG支持通過(guò)Faiss(Facebook AI Similarity Search)、Elasticsearch、Milvus、Hologres、OpenSearch或RDS PostgreSQL構(gòu)建向量檢索庫(kù)。根據(jù)您的場(chǎng)景需要,任意選擇一種版本類(lèi)型,作為向量檢索庫(kù)。
FAISS
使用Faiss構(gòu)建本地向量庫(kù),無(wú)需購(gòu)買(mǎi)線(xiàn)上向量庫(kù)產(chǎn)品,免去了線(xiàn)上開(kāi)通向量庫(kù)產(chǎn)品的復(fù)雜流程,更輕量易用。
參數(shù)
描述
版本類(lèi)型
選擇FAISS。
OSS地址
選擇當(dāng)前地域下已創(chuàng)建的OSS存儲(chǔ)路徑,用來(lái)存儲(chǔ)上傳的知識(shí)庫(kù)文件。如果沒(méi)有可選的存儲(chǔ)路徑,您可以參考控制臺(tái)快速入門(mén)進(jìn)行創(chuàng)建。
說(shuō)明如果您選擇使用自持微調(diào)模型部署服務(wù),請(qǐng)確保所選的OSS存儲(chǔ)路徑不與自持微調(diào)模型所在的路徑重復(fù),以避免造成沖突。
ElasticSearch
配置阿里云ElasticSearch實(shí)例的連接信息。關(guān)于如何創(chuàng)建ElasticSearch實(shí)例及準(zhǔn)備配置項(xiàng),請(qǐng)參見(jiàn)準(zhǔn)備向量檢索庫(kù)Elasticsearch。
參數(shù)
描述
版本類(lèi)型
選擇Elasticsearch。
私網(wǎng)地址/端口
配置Elasticsearch實(shí)例的私網(wǎng)地址和端口,格式為
http://<私網(wǎng)地址>:<私網(wǎng)端口>
。如何獲取Elasticsearch實(shí)例的私網(wǎng)地址和端口號(hào),請(qǐng)參見(jiàn)查看實(shí)例的基本信息。索引名稱(chēng)
輸入新的索引名稱(chēng)或已存在的索引名稱(chēng)。對(duì)于已存在的索引名稱(chēng),索引結(jié)構(gòu)應(yīng)符合PAI-RAG要求,例如您可以填寫(xiě)之前通過(guò)EAS部署RAG服務(wù)時(shí)自動(dòng)創(chuàng)建的索引。
賬號(hào)
配置創(chuàng)建Elasticsearch實(shí)例時(shí)配置的登錄名,默認(rèn)為elastic。
密碼
配置創(chuàng)建Elasticsearch實(shí)例時(shí)配置的登錄密碼。如果您忘記了登錄密碼,可重置實(shí)例訪問(wèn)密碼。
Milvus
配置Milvus實(shí)例的連接信息。關(guān)于如何創(chuàng)建Milvus實(shí)例及準(zhǔn)備配置項(xiàng),請(qǐng)參見(jiàn)準(zhǔn)備向量檢索庫(kù)Milvus。
參數(shù)
描述
版本類(lèi)型
選擇Milvus。
訪問(wèn)地址
配置為Milvus實(shí)例內(nèi)網(wǎng)地址。您可以前往阿里云Milvus控制臺(tái)的實(shí)例詳情頁(yè)面的訪問(wèn)地址區(qū)域進(jìn)行查看。
代理端口
配置為Milvus實(shí)例的Proxy Port,默認(rèn)為19530。您可以前往阿里云Milvus控制臺(tái)的實(shí)例詳情頁(yè)面的訪問(wèn)地址區(qū)域進(jìn)行查看。
賬號(hào)
配置為root。
密碼
配置為創(chuàng)建Milvus實(shí)例時(shí),您自定義的root用戶(hù)的密碼。
數(shù)據(jù)庫(kù)名稱(chēng)
配置為數(shù)據(jù)庫(kù)名稱(chēng),例如default。創(chuàng)建Milvus實(shí)例時(shí),系統(tǒng)會(huì)默認(rèn)創(chuàng)建數(shù)據(jù)庫(kù)default,您也可以手動(dòng)創(chuàng)建新的數(shù)據(jù)庫(kù),具體操作,請(qǐng)參見(jiàn)管理Databases。
Collection名稱(chēng)
輸入新的Collection名稱(chēng)或已存在的Collection名稱(chēng)。對(duì)于已存在的Collection,Collection結(jié)構(gòu)應(yīng)符合PAI-RAG要求,例如您可以填寫(xiě)之前通過(guò)EAS部署RAG服務(wù)時(shí)自動(dòng)創(chuàng)建的Collection。
Hologres
配置為Hologres實(shí)例的連接信息。如果未開(kāi)通Hologres實(shí)例,可參考購(gòu)買(mǎi)Hologres進(jìn)行操作。
參數(shù)
描述
版本類(lèi)型
選擇Hologres。
調(diào)用信息
配置為指定VPC的host信息。進(jìn)入Hologres管理控制臺(tái)的實(shí)例詳情頁(yè),在網(wǎng)絡(luò)信息區(qū)域單擊指定VPC后的復(fù)制,獲取域名
:80
前的host信息。數(shù)據(jù)庫(kù)名稱(chēng)
配置為Hologres實(shí)例的數(shù)據(jù)庫(kù)名稱(chēng)。如何創(chuàng)建數(shù)據(jù)庫(kù),詳情請(qǐng)參見(jiàn)創(chuàng)建數(shù)據(jù)庫(kù)。
賬號(hào)
配置為已創(chuàng)建的自定義用戶(hù)賬號(hào)。具體操作,請(qǐng)參見(jiàn)創(chuàng)建自定義用戶(hù),其中選擇成員角色選擇實(shí)例超級(jí)管理員(SuperUser)。
密碼
配置為已創(chuàng)建的自定義用戶(hù)的密碼。
表名稱(chēng)
輸入新的表名稱(chēng)或已存在的表名稱(chēng)。對(duì)于已存在的表名稱(chēng),表結(jié)構(gòu)應(yīng)符合PAI-RAG要求,例如可以填寫(xiě)之前通過(guò)EAS部署RAG服務(wù)自動(dòng)創(chuàng)建的Hologres表。
OpenSearch
配置為OpenSearch向量檢索版實(shí)例的連接信息。關(guān)于如何創(chuàng)建OpenSearch實(shí)例及準(zhǔn)備配置項(xiàng),請(qǐng)參見(jiàn)準(zhǔn)備向量檢索庫(kù)OpenSearch。
參數(shù)
描述
版本類(lèi)型
選擇OpenSearch。
訪問(wèn)地址
配置為OpenSearch向量檢索版實(shí)例的公網(wǎng)訪問(wèn)地址。您需要為OpenSearch向量檢索版實(shí)例開(kāi)通公網(wǎng)訪問(wèn)功能,具體操作,請(qǐng)參見(jiàn)準(zhǔn)備向量檢索庫(kù)OpenSearch。
實(shí)例id
在OpenSearch向量檢索版實(shí)例列表中獲取實(shí)例ID。
用戶(hù)名
配置為創(chuàng)建OpenSearch向量檢索版實(shí)例時(shí),輸入的用戶(hù)名和密碼。
密碼
表名稱(chēng)
配置為準(zhǔn)備OpenSearch向量檢索版實(shí)例時(shí)創(chuàng)建的索引表名稱(chēng)。如何準(zhǔn)備索引表,請(qǐng)參見(jiàn)準(zhǔn)備向量檢索庫(kù)OpenSearch。
RDS PostgreSQL
配置為RDS PostgreSQL實(shí)例數(shù)據(jù)庫(kù)的連接信息。關(guān)于如何創(chuàng)建RDS PostgreSQL實(shí)例及準(zhǔn)備配置項(xiàng),請(qǐng)參見(jiàn)準(zhǔn)備向量檢索庫(kù)RDS PostgreSQL。
參數(shù)
描述
版本類(lèi)型
選擇RDS PostgreSQL。
主機(jī)地址
配置為RDS PostgreSQL實(shí)例的內(nèi)網(wǎng)地址,您可以前往云數(shù)據(jù)庫(kù)RDS PostgreSQL控制臺(tái)頁(yè)面,在RDS PostgreSQL實(shí)例的數(shù)據(jù)庫(kù)連接頁(yè)面進(jìn)行查看。
端口
默認(rèn)為5432,請(qǐng)根據(jù)實(shí)際情況填寫(xiě)。
數(shù)據(jù)庫(kù)
配置為已創(chuàng)建的數(shù)據(jù)庫(kù)名稱(chēng)。如何創(chuàng)建數(shù)據(jù)庫(kù)和賬號(hào),請(qǐng)參見(jiàn)創(chuàng)建賬號(hào)和數(shù)據(jù)庫(kù),其中:
創(chuàng)建賬號(hào)時(shí),賬號(hào)類(lèi)型選擇高權(quán)限賬號(hào)。
創(chuàng)建數(shù)據(jù)庫(kù)時(shí),授權(quán)賬號(hào)選擇已創(chuàng)建的高權(quán)限賬號(hào)。
表名稱(chēng)
自定義配置數(shù)據(jù)庫(kù)表名稱(chēng)。
賬號(hào)
配置為已創(chuàng)建的高權(quán)限賬號(hào)和密碼。如何創(chuàng)建高權(quán)限賬號(hào),請(qǐng)參見(jiàn)創(chuàng)建賬號(hào)和數(shù)據(jù)庫(kù),其中賬號(hào)類(lèi)型選擇高權(quán)限賬號(hào)。
密碼
專(zhuān)有網(wǎng)絡(luò)配置
參數(shù)
描述
VPC
當(dāng)選擇Hologres、ElasticSearch、Milvus、OpenSearch或RDS PostgreSQL作為向量檢索庫(kù)時(shí),請(qǐng)確保所配置的專(zhuān)有網(wǎng)絡(luò)與選定的向量檢索庫(kù)保持一致。
說(shuō)明使用OpenSearch作為向量檢索庫(kù)時(shí),此處可以使用其他專(zhuān)有網(wǎng)絡(luò),但需要確保該專(zhuān)有網(wǎng)絡(luò)具有公網(wǎng)訪問(wèn)能力,并將綁定的彈性公網(wǎng)IP添加為OpenSearch實(shí)例的公網(wǎng)訪問(wèn)白名單。具體操作,請(qǐng)參見(jiàn)使用公網(wǎng)NAT網(wǎng)關(guān)SNAT功能訪問(wèn)互聯(lián)網(wǎng)和公網(wǎng)白名單配置。
當(dāng)選擇Faiss作為向量檢索庫(kù)時(shí),無(wú)需配置專(zhuān)有網(wǎng)絡(luò)。
交換機(jī)
安全組名稱(chēng)
單擊部署。
當(dāng)服務(wù)狀態(tài)變?yōu)?b data-tag="uicontrol" id="47d3bcb00aviu" class="uicontrol">運(yùn)行中時(shí),表示服務(wù)部署成功。
步驟二:通過(guò)WebUI頁(yè)面進(jìn)行調(diào)試
請(qǐng)按照以下操作步驟,在WebUI頁(yè)面上傳企業(yè)知識(shí)庫(kù)文件并對(duì)問(wèn)答效果進(jìn)行調(diào)試。
1、連接向量檢索庫(kù)
RAG服務(wù)部署成功后,單擊服務(wù)方式列下的查看Web應(yīng)用,啟動(dòng)WebUI頁(yè)面。
配置Embedding模型。系統(tǒng)將通過(guò)該模型將文本分塊轉(zhuǎn)換為Embedding向量。
Embedding Model Name:系統(tǒng)內(nèi)置四種模型供您選擇,將自動(dòng)為您配置最合適的模型。
Embedding Dimension:設(shè)置Embedding維度,維度的設(shè)置對(duì)模型的性能有直接影響。在您選擇Embedding模型后,系統(tǒng)將自動(dòng)配置Embedding維度,無(wú)需手動(dòng)操作。
測(cè)試向量檢索庫(kù)連接是否正常。
系統(tǒng)已自動(dòng)識(shí)別并應(yīng)用了部署服務(wù)時(shí)配置的向量檢索庫(kù)設(shè)置。以Hologres為例,您可以單擊Connect Hologres,來(lái)驗(yàn)證Hologres連接是否正常。如果連接失敗,請(qǐng)檢查步驟一中向量檢索庫(kù)配置是否正確,修改對(duì)應(yīng)配置項(xiàng)為正確配置,然后重新連接實(shí)例。
2、上傳企業(yè)知識(shí)庫(kù)文件
您可以按照以下流程上傳您的企業(yè)知識(shí)庫(kù)文件,系統(tǒng)會(huì)自動(dòng)按照PAI-RAG格式將知識(shí)庫(kù)存儲(chǔ)到向量檢索庫(kù)中,以方便您進(jìn)行后續(xù)的知識(shí)檢索。您也可以利用向量檢索庫(kù)中已有的知識(shí)庫(kù),但必須符合PAI-RAG格式要求,否則可能會(huì)導(dǎo)致檢索報(bào)錯(cuò)。
在Upload頁(yè)簽,設(shè)置語(yǔ)義分塊參數(shù)。
通過(guò)配置以下參數(shù)來(lái)控制文檔分塊粒度的大小和進(jìn)行QA信息提?。?/p>
參數(shù)
描述
Chunk Size
指定每個(gè)文本分塊的大小,單位為字節(jié),默認(rèn)為500。
Chunk Overlap
表示相鄰分塊之間的重疊量,默認(rèn)為10。
Process with QA Extraction Model
通過(guò)選中Yes復(fù)選框啟動(dòng)QA信息提取功能,系統(tǒng)將在您上傳企業(yè)知識(shí)庫(kù)文件后自動(dòng)抽取出QA對(duì),以獲得更好的檢索和回答效果。
在Files或Directory頁(yè)簽下上傳企業(yè)知識(shí)庫(kù)文件(支持多文件上傳)或?qū)?yīng)目錄。支持的文件類(lèi)型為.txt、.pdf、Excel(.xlsx或.xls)、.csv、Word(.docx或.doc)、Markdown或.html,例如rag_chatbot_test_doc.txt。
單擊Upload,系統(tǒng)會(huì)先對(duì)上傳的文件進(jìn)行數(shù)據(jù)清洗(包括文本提取、超鏈接替換等)和語(yǔ)義切塊,然后進(jìn)行上傳。
3、配置模型推理參數(shù)
在Chat頁(yè)簽配置問(wèn)答策略:
配置Retrieval問(wèn)答策略
參數(shù) | 說(shuō)明 |
Streaming Output | 選中Streaming Output后,系統(tǒng)將以流式方式輸出結(jié)果。 |
Retrieval Mode | 支持以下三種檢索方式:
說(shuō)明 在大多數(shù)復(fù)雜場(chǎng)景下,向量數(shù)據(jù)庫(kù)檢索召回都能有較好的表現(xiàn)。但在某些語(yǔ)料稀缺的垂直領(lǐng)域,或要求準(zhǔn)確匹配的場(chǎng)景,向量數(shù)據(jù)庫(kù)檢索召回方式可能不如傳統(tǒng)的稀疏檢索召回方式。稀疏檢索召回方法通過(guò)計(jì)算用戶(hù)查詢(xún)與知識(shí)文檔的關(guān)鍵詞重疊度來(lái)進(jìn)行檢索,因此更為簡(jiǎn)單和高效。 PAI提供了BM25等關(guān)鍵詞檢索召回算法來(lái)完成稀疏檢索召回操作。向量數(shù)據(jù)庫(kù)檢索召回和關(guān)鍵詞檢索召回具有各自的優(yōu)勢(shì)和不足,因此綜合二者的召回結(jié)果能夠提高整體的檢索準(zhǔn)確性和效率。 倒數(shù)排序融合(Reciprocal Rank Fusion, RRF)算法通過(guò)對(duì)每個(gè)文檔在不同召回方法中的排名進(jìn)行加權(quán)求和,以此計(jì)算融合后的總分?jǐn)?shù)。當(dāng)Retrieval選擇Hybrid時(shí),PAI將默認(rèn)使用RRF算法對(duì)向量數(shù)據(jù)庫(kù)召回結(jié)果和關(guān)鍵詞檢索召回結(jié)果進(jìn)行多路召回融合。 |
Reranker Type | 大多數(shù)向量數(shù)據(jù)庫(kù)為了計(jì)算效率會(huì)犧牲一定程度的準(zhǔn)確性,這使其檢索結(jié)果存在一定隨機(jī)性,原始返回的Top K不一定最相關(guān)。您可以選擇以下兩種排序類(lèi)型,對(duì)向量數(shù)據(jù)庫(kù)第一次召回的Top K結(jié)果進(jìn)行精度更高的Re-Rank操作,以得到相關(guān)度更高、更準(zhǔn)確的知識(shí)文檔。
|
Top K | 向量檢索庫(kù)返回的相似結(jié)果數(shù),即從向量數(shù)據(jù)庫(kù)中召回Top K條相似結(jié)果。 |
配置RAG(Retrieval + LLM)問(wèn)答策略
PAI提供多種不同的Prompt策略,您可以選擇合適的預(yù)定義Prompt模板或輸入自定義的Prompt模板以獲得更好的推理效果。RAG系統(tǒng)會(huì)將檢索返回的結(jié)果與用戶(hù)問(wèn)題填充到提示詞模板中,隨后一并提交至大型語(yǔ)言模型進(jìn)行處理。
此外RAG(Retrieval + LLM)問(wèn)答方式還支持配置Streaming Output、Retrieval Mode和Reranker Type等參數(shù)。關(guān)于這些參數(shù)的配置說(shuō)明,請(qǐng)參見(jiàn)配置Retrieval問(wèn)答策略。
4、模型推理驗(yàn)證
Retrieval
直接從向量數(shù)據(jù)庫(kù)中檢索并返回Top K條相似結(jié)果。
LLM
直接與EAS-LLM對(duì)話(huà),返回大模型的回答。
RAG(Retrieval + LLM)
將檢索返回的結(jié)果與用戶(hù)問(wèn)題填充至已選擇的Prompt模板中,一并送入EAS-LLM服務(wù)進(jìn)行處理,從中獲取問(wèn)答結(jié)果。
調(diào)試完成后,您可以基于PAI提供的API將其應(yīng)用到您自己的業(yè)務(wù)系統(tǒng)中,詳情請(qǐng)參見(jiàn)步驟三:通過(guò)API調(diào)用進(jìn)行模型推理。
步驟三:通過(guò)API調(diào)用進(jìn)行模型推理
獲取RAG服務(wù)的調(diào)用信息。
單擊RAG服務(wù)名稱(chēng),進(jìn)入服務(wù)詳情頁(yè)面。
在基本信息區(qū)域,單擊查看調(diào)用信息。
在調(diào)用信息對(duì)話(huà)框的公網(wǎng)地址調(diào)用頁(yè)簽,獲取服務(wù)訪問(wèn)地址和Token。
通過(guò)WebUI頁(yè)面連接向量檢索庫(kù),并上傳企業(yè)知識(shí)庫(kù)文件。
您還可以根據(jù)已生成的符合PAI-RAG格式的表結(jié)構(gòu),將企業(yè)知識(shí)庫(kù)自行上傳到向量檢索庫(kù)中。
通過(guò)API調(diào)用服務(wù)。
PAI提供了三種調(diào)用API的對(duì)話(huà)方式:
service/query/retrieval
(Retrieval)、service/query/llm
(LLM)和service/query
(RAG)。具體調(diào)用方法如下:cURL 命令
發(fā)送單輪對(duì)話(huà)請(qǐng)求
方式一:
service/query/retrieval
(Retrieval)curl -X 'POST' '<service_url>service/query/retrieval' -H 'Authorization: <service_token>' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{"question": "什么是人工智能平臺(tái)PAI?"}' # <service_url>替換為步驟1獲取的服務(wù)訪問(wèn)地址;<service_token>替換為步驟1獲取的服務(wù)Token。
方式二:
/service/query/llm
(LLM)curl -X 'POST' '<service_url>service/query/llm' -H 'Authorization: <service_token>' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{"question": "什么是人工智能平臺(tái)PAI?"}' # <service_url>替換為步驟1獲取的服務(wù)訪問(wèn)地址;<service_token>替換為步驟1獲取的服務(wù)Token。
支持添加其他可調(diào)推理參數(shù),例如
{"question":"什么是人工智能平臺(tái)PAI?", "temperature": 0.9}
。方式三:
service/query
(RAG)curl -X 'POST' '<service_url>service/query' -H 'Authorization: <service_token>' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{"question": "什么是人工智能平臺(tái)PAI?"}' # <service_url>替換為步驟1獲取的服務(wù)訪問(wèn)地址;<service_token>替換為步驟1獲取的服務(wù)Token。
支持添加其他可調(diào)推理參數(shù),例如
{"question":"什么是人工智能平臺(tái)PAI?", "temperature": 0.9}
。
發(fā)送多輪對(duì)話(huà)請(qǐng)求
其中對(duì)話(huà)方式RAG和LLM支持發(fā)送多輪對(duì)話(huà)請(qǐng)求,以RAG對(duì)話(huà)為例,具體配置方法如下:
# 發(fā)送請(qǐng)求。 curl -X 'POST' '<service_url>service/query' -H 'Authorization: <service_token>' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{"question": "什么是人工智能平臺(tái)PAI?"}' # 傳入上述請(qǐng)求返回的session_id(對(duì)話(huà)歷史會(huì)話(huà)唯一標(biāo)識(shí)),傳入session_id后,將對(duì)話(huà)歷史進(jìn)行記錄,調(diào)用大模型將自動(dòng)攜帶存儲(chǔ)的對(duì)話(huà)歷史。 curl -X 'POST' '<service_url>service/query' -H 'Authorization: <service_token>' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{"question": "它有什么優(yōu)勢(shì)?","session_id": "ed7a80e2e20442eab****"}' # 傳入chat_history(用戶(hù)與模型的對(duì)話(huà)歷史),list中的每個(gè)元素是形式為{"user":"用戶(hù)輸入","bot":"模型輸出"}的一輪對(duì)話(huà),多輪對(duì)話(huà)按時(shí)間順序排列。 curl -X 'POST' '<service_url>service/query' -H 'Authorization: <service_token>' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{"question":"它有哪些功能?", "chat_history": [{"user":"PAI是什么?", "bot":"PAI是阿里云的人工智能平臺(tái)......"}]}' # 同時(shí)傳入session_id和chat_history,會(huì)用chat_history對(duì)存儲(chǔ)的session_id所對(duì)應(yīng)的對(duì)話(huà)歷史進(jìn)行追加更新。 curl -X 'POST' '<service_url>service/query' -H 'Authorization: <service_token>' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{"question":"它有哪些功能?", "chat_history": [{"user":"PAI是什么?", "bot":"PAI是阿里云的人工智能平臺(tái)......"}], "session_id": "1702ffxxad3xxx6fxxx97daf7c"}'
Python腳本
發(fā)送單輪對(duì)話(huà)請(qǐng)求,代碼示例如下:
import requests EAS_URL = 'http://xxxx.****.cn-beijing.pai-eas.aliyuncs.com' headers = { 'accept': 'application/json', 'Content-Type': 'application/json', 'Authorization': 'MDA5NmJkNzkyMGM1Zj****YzM4M2YwMDUzZTdiZmI5YzljYjZmNA==', } def test_post_api_query_llm(): url = EAS_URL + '/service/query/llm' data = { "question":"什么是人工智能平臺(tái)PAI?" } response = requests.post(url, headers=headers, json=data) if response.status_code != 200: raise ValueError(f'Error post to {url}, code: {response.status_code}') ans = dict(response.json()) print(f"======= Question =======\n {data['question']}") print(f"======= Answer =======\n {ans['answer']} \n\n") def test_post_api_query_retrieval(): url = EAS_URL + '/service/query/retrieval' data = { "question":"什么是人工智能平臺(tái)PAI?" } response = requests.post(url, headers=headers, json=data) if response.status_code != 200: raise ValueError(f'Error post to {url}, code: {response.status_code}') ans = dict(response.json()) print(f"======= Question =======\n {data['question']}") print(f"======= Answer =======\n {ans['docs']}\n\n") def test_post_api_query_rag(): url = EAS_URL + '/service/query' data = { "question":"什么是人工智能平臺(tái)PAI?" } response = requests.post(url, headers=headers, json=data) if response.status_code != 200: raise ValueError(f'Error post to {url}, code: {response.status_code}') ans = dict(response.json()) print(f"======= Question =======\n {data['question']}") print(f"======= Answer =======\n {ans['answer']}") print(f"======= Retrieved Docs =======\n {ans['docs']}\n\n") # LLM test_post_api_query_llm() # Retrieval test_post_api_query_retrieval() # RAG(Retrieval+LLM) test_post_api_query_rag()
其中:EAS_URL配置為RAG服務(wù)的訪問(wèn)地址,您需要將訪問(wèn)地址末尾的
/
刪除;Authorization配置為RAG服務(wù)的Token。發(fā)送多輪對(duì)話(huà)請(qǐng)求
LLM和RAG(Retrieval+LLM)支持發(fā)送多輪對(duì)話(huà)請(qǐng)求,代碼示例如下:
import requests EAS_URL = 'http://xxxx.****.cn-beijing.pai-eas.aliyuncs.com' headers = { 'accept': 'application/json', 'Content-Type': 'application/json', 'Authorization': 'MDA5NmJkN****jNlMDgzYzM4M2YwMDUzZTdiZmI5YzljYjZmNA==', } def test_post_api_query_llm_with_chat_history(): url = EAS_URL + '/service/query/llm' # Round 1 query data = { "question":"什么是人工智能平臺(tái)PAI?" } response = requests.post(url, headers=headers, json=data) if response.status_code != 200: raise ValueError(f'Error post to {url}, code: {response.status_code}') ans = dict(response.json()) print(f"=======Round 1: Question =======\n {data['question']}") print(f"=======Round 1: Answer =======\n {ans['answer']} session_id: {ans['session_id']} \n") # Round 2 query data_2 = { "question": "它有什么優(yōu)勢(shì)?", "session_id": ans['session_id'] } response_2 = requests.post(url, headers=headers, json=data_2) if response.status_code != 200: raise ValueError(f'Error post to {url}, code: {response.status_code}') ans_2 = dict(response_2.json()) print(f"=======Round 2: Question =======\n {data_2['question']}") print(f"=======Round 2: Answer =======\n {ans_2['answer']} session_id: {ans_2['session_id']} \n\n") def test_post_api_query_rag_with_chat_history(): url = EAS_URL + '/service/query' # Round 1 query data = { "question":"什么是人工智能平臺(tái)PAI?" } response = requests.post(url, headers=headers, json=data) if response.status_code != 200: raise ValueError(f'Error post to {url}, code: {response.status_code}') ans = dict(response.json()) print(f"=======Round 1: Question =======\n {data['question']}") print(f"=======Round 1: Answer =======\n {ans['answer']} session_id: {ans['session_id']}") print(f"=======Round 1: Retrieved Docs =======\n {ans['docs']}\n") # Round 2 query data = { "question":"它可以做什么?", "session_id": ans['session_id'] } response = requests.post(url, headers=headers, json=data) if response.status_code != 200: raise ValueError(f'Error post to {url}, code: {response.status_code}') ans = dict(response.json()) print(f"=======Round 2: Question =======\n {data['question']}") print(f"=======Round 2: Answer =======\n {ans['answer']} session_id: {ans['session_id']}") print(f"=======Round 2: Retrieved Docs =======\n {ans['docs']}") # LLM test_post_api_query_llm_with_chat_history() # RAG(Retrieval+LLM) test_post_api_query_rag_with_chat_history()
其中:EAS_URL配置為RAG服務(wù)的訪問(wèn)地址,您需要將訪問(wèn)地址末尾的
/
刪除;Authorization配置為RAG服務(wù)的Token。
相關(guān)文檔
通過(guò)EAS,您還可以完成以下場(chǎng)景化部署:
部署支持WebUI和API調(diào)用的LLM大語(yǔ)言模型,并在部署LLM應(yīng)用后,利用LangChain框架集成企業(yè)知識(shí)庫(kù),實(shí)現(xiàn)智能問(wèn)答和自動(dòng)化功能。詳情請(qǐng)參見(jiàn)5分鐘使用EAS一鍵部署LLM大語(yǔ)言模型應(yīng)用。
部署基于ComfyUI和Stable Video Diffusion模型的AI視頻生成服務(wù),幫助您完成社交平臺(tái)短視頻內(nèi)容生成、動(dòng)畫(huà)制作等任務(wù)。詳情請(qǐng)參見(jiàn)AI視頻生成-ComfyUI部署。
一鍵部署基于Stable Diffusion WebUI的服務(wù)。詳情請(qǐng)參見(jiàn)AI繪畫(huà)-SDWebUI部署。
常見(jiàn)問(wèn)題
如何關(guān)閉RAG服務(wù)的with chat history功能
在RAG服務(wù)的WebUI頁(yè)面中,去勾選Chat history復(fù)選框。