基于火山引擎云搜索服務(wù)和豆包模型搭建 RAG 推理任務(wù)
大語(yǔ)言模型(LLM,Large language model)作為新一輪科技產(chǎn)業(yè)革命的戰(zhàn)略性技術(shù),其核心能力在于深層語(yǔ)境解析與知識(shí)融合。在生成式人工智能方向主要用于圖像生成、書寫文稿、信息搜索等。當(dāng)下的 LLM 模型是基于大量數(shù)據(jù)訓(xùn)練的,目的是讓它們掌握廣泛的普遍知識(shí),這些知識(shí)被儲(chǔ)存在它們神經(jīng)網(wǎng)絡(luò)的權(quán)重(也就是參數(shù)記憶)里。但是,如果我們要求 LLM 生成的回答涉及到它訓(xùn)練數(shù)據(jù)之外的知識(shí),比如最新的、專有的或某個(gè)特定領(lǐng)域的信息,這時(shí)就可能出現(xiàn)事實(shí)上的錯(cuò)誤(我們稱之為“幻覺(jué)”)。
RAG (Retrieval-Augmented Generation,檢索增強(qiáng)生成)的核心思想是讓語(yǔ)言模型在生成回答或文本時(shí)能夠動(dòng)態(tài)地從外部知識(shí)庫(kù)中檢索相關(guān)信息。這種方法能夠提高模型生成內(nèi)容的準(zhǔn)確性、可靠性和透明度,同時(shí)減少“幻覺(jué)”。
本文將介紹如何基于火山引擎云搜索服務(wù)和方舟平臺(tái)來(lái)構(gòu)建專屬的 RAG 智能問(wèn)答系統(tǒng)。系統(tǒng)使用 OpenSearch 作為外部知識(shí)庫(kù),火山豆包作為大語(yǔ)言模型,全流程構(gòu)建在火山引擎平臺(tái)上。本次實(shí)踐采用的語(yǔ)料為火山引擎云搜索服務(wù)知識(shí)庫(kù),將語(yǔ)料處理后存入 OpenSearch 索引中,同時(shí)通過(guò)部署在云搜索服務(wù) ML 節(jié)點(diǎn)上的 Embedding 模型,將原始語(yǔ)料額外轉(zhuǎn)化為向量字段存儲(chǔ)在同一個(gè) OpenSearch 索引中,方便后續(xù)做混合查詢召回。
在查詢流程中,用戶通過(guò)對(duì)話框輸入問(wèn)題,RAG 應(yīng)用會(huì)將用戶輸入的問(wèn)題通過(guò) Embedding 模型轉(zhuǎn)化為向量,然后使用云搜索服務(wù) OpenSearch 的混合查詢功能查詢問(wèn)題向量和問(wèn)題文本召回 Top n 的文檔結(jié)果,再將文檔結(jié)果發(fā)送給豆包大模型,最后按照要求根據(jù)文檔內(nèi)容回答用戶的問(wèn)題。
準(zhǔn)備資源
創(chuàng)建云搜索 ML 服務(wù)
登陸火山引擎云搜索服務(wù)控制臺(tái)(https://console.volcengine.com/es),創(chuàng)建實(shí)例集群,版本選用 Opensearch 2.9.0。實(shí)例創(chuàng)建完成后可根據(jù)實(shí)際需求,開(kāi)通實(shí)例和 Dashboards 的公網(wǎng)訪問(wèn)。
- 進(jìn)入實(shí)例詳情頁(yè)->ML 服務(wù),配置 CPU /內(nèi)存比例后啟用。
- 進(jìn)入模型服務(wù)->公共模型,啟動(dòng)一個(gè)模型用于語(yǔ)義嵌入 Embedding,推薦使用 PEG,配置參數(shù)后啟動(dòng)。
開(kāi)通大模型服務(wù)
- 進(jìn)入火山引擎方舟控制臺(tái)(https://console.volcengine.com/ark),在模型推理下創(chuàng)建推理接入點(diǎn),接入模型建議選用 Doubao-pro-32k(或者Doubao-lite-32k),創(chuàng)建完成后可以獲取到接入點(diǎn) Endpoint。
- 在左側(cè)導(dǎo)航欄進(jìn)入 API Key 管理,創(chuàng)建 API Key 并記錄。
# 填充如下內(nèi)容,后續(xù)會(huì)用在rag模型中。
{
"model32k": {
"host": "https://ark.cn-beijing.volces.com/api/v3",
"endpoint": "ep-xxxx-xx",
"apikey": ""
}
}
配置 NAT 網(wǎng)關(guān)
通過(guò)配置 NAT 網(wǎng)關(guān)使私有網(wǎng)絡(luò)內(nèi)部的實(shí)例允許通過(guò) NAT 網(wǎng)關(guān)訪問(wèn)到公網(wǎng),用于連接大模型服務(wù)。
首先進(jìn)入火山引擎 NAT 網(wǎng)關(guān)控制臺(tái)(https://console.volcengine.com/nat),創(chuàng)建公網(wǎng) NAT 網(wǎng)關(guān)。這里需要注意私有網(wǎng)絡(luò)和子網(wǎng)一定要和云搜索服務(wù)實(shí)例所在的網(wǎng)絡(luò)保持一致,可選用自動(dòng)配置或手動(dòng)配置:
- 自動(dòng)配置會(huì)開(kāi)啟私網(wǎng)下所有 ECS 的公網(wǎng)訪問(wèn),需綁定 EIP(公網(wǎng) IP);
- 選擇手動(dòng)配置后需要自行配置公網(wǎng) IP 和訪問(wèn)規(guī)則。
搭建步驟
導(dǎo)入任務(wù)數(shù)據(jù)
- 這里演示為基于火山引擎云搜索服務(wù)文檔語(yǔ)料搭建的推理任務(wù),所以在創(chuàng)建任務(wù)時(shí)選擇模板代碼-云搜索文檔任務(wù),大家在具體使用中可以根據(jù)需求用其他語(yǔ)料庫(kù)進(jìn)行搭建。
- 增加 Config 參數(shù),參考如下模板填入。
'{
"task":"migrate",
"dim": 1024,
"opensearch": {
"username": "opensearch的用戶名",
"password": "opensearch的密碼",
"host": "云搜索接入點(diǎn)域名",
"port": 9200,
"schema": "https",
"index": "遷移的索引名稱"
}
}'
- 本文演示添加的依賴為云搜索文檔任務(wù)配置依賴,如果需要額外依賴可以自行在配置中添加。
運(yùn)行語(yǔ)義嵌入任務(wù)
- 選擇 xc_import_embed 模板任務(wù),Config 參數(shù)說(shuō)明:
'{
"opensearch": {
"username": "xxx",
"password": "xxx",
"host": "opensearch-o-xxxx.escloud.ivolces.com",
"port": 9200,
"schema": "https",
"index": "cloud_serach",
"target_index": "cloud_serach"
},
"embedding": {
調(diào)用信息復(fù)制過(guò)來(lái)
},
"field_dict": {
"full_title": "full_title_knn",
"summary": "summary_knn",
"content.summary": "content.summary_knn"
}
}'
- 文中實(shí)踐需要添加的依賴配置如下:
啟動(dòng) RAG 推理服務(wù)
- 在 TOS Bucket 中上傳 RAG 推理服務(wù)配置。
|-rag-demo
|--rag_config.json
|--config.json
config.json內(nèi)容
{}
rag_config.json 格式及代碼參考如下:
{
"type": "cloud_search_bot",
"opensearch": {
"username": "admin",
"password": "password",
"host": "opensearch-o-xxxxx.escloud.ivolces.com",
"port": 9200,
"schema": "https",
"index": "index_name"
},
"llm": {
"model32k": {
"host": "https://ark.cn-beijing.volces.com/api/v3",
"endpoint": "ep-xxxx-xx",
"apikey": ""
}
},
"embedding": {
"remote_config" : {
"method" : "POST",
"url" : "http://url:port/v1/embeddings",
"params" : {},
"headers" : {
"Content-Type" : "application/json"
},
"advance_request_body" : {
"model" : "TownsWu/PEG"
}
}
},
"generate":true
}
- 創(chuàng)建推理服務(wù)(打開(kāi)私網(wǎng)訪問(wèn))并啟動(dòng)
完成前面的所有配置操作后,已經(jīng)可以在相同 VPC 環(huán)境的 ECS 中,通過(guò) RAG 模型的調(diào)用信息驗(yàn)證云搜索服務(wù)文檔推理任務(wù)了??梢灾苯釉?ECS 命令行中運(yùn)行調(diào)用信息,查看到持續(xù)輸出 txt 文本內(nèi)容。
RAG 推理服務(wù)演示
為了更加直觀的演示云搜索服務(wù)文檔的 RAG 推理服務(wù),本文借助火山引擎 API 網(wǎng)關(guān)產(chǎn)品,為 RAG 推理服務(wù)配置一個(gè)固定的公網(wǎng)域名。通過(guò)直接在瀏覽器中的固定訪問(wèn)地址訪問(wèn) RAG 推理服務(wù),并在可視化頁(yè)面咨詢?cè)扑阉鞣?wù)產(chǎn)品的各種問(wèn)題。
配置公網(wǎng)訪問(wèn)
- 進(jìn)入 API 網(wǎng)關(guān)控制臺(tái)(https://console.volcengine.com/veapig)創(chuàng)建實(shí)例,為保證網(wǎng)絡(luò)暢通需要選擇和云搜索實(shí)例相同的私有網(wǎng)絡(luò)和子網(wǎng)。創(chuàng)建完成后進(jìn)入實(shí)例繼續(xù)創(chuàng)建服務(wù)。
- 接下來(lái)創(chuàng)建 Upstream,后端服務(wù)選用固定域名,域名和端口從剛剛啟用的 RAG 調(diào)用信息內(nèi)獲取。
- 并在服務(wù)內(nèi)創(chuàng)建路由,路徑選用前綴匹配;Upstream 選用固定域名,使用剛剛創(chuàng)建的 Upstream。
推理問(wèn)答
創(chuàng)建完成后進(jìn)入服務(wù)列表就可以獲取到公網(wǎng)訪問(wèn)域名,拼接 RAG 推理服務(wù)的完整訪問(wèn)地址,格式為 http://[url]/?model=[model_name],其中 url 替換為在 API 網(wǎng)關(guān)中獲取到的服務(wù)公網(wǎng)訪問(wèn)域名,model_name 替換為 RAG 模型的名稱后就可以在瀏覽器中通過(guò)剛才拼接好的固定域名訪問(wèn) RAG 推理服務(wù),并在可視化頁(yè)面中咨詢本文所用到的云搜素服務(wù)文檔庫(kù)的相關(guān)問(wèn)題。
以上就是以云搜索服務(wù)文檔庫(kù)為例,介紹通過(guò)火山引擎云搜索服務(wù)和方舟平臺(tái)構(gòu)建的專屬 RAG 智能問(wèn)答系統(tǒng),歡迎進(jìn)入體驗(yàn)館體驗(yàn)!
火山引擎云搜索服務(wù)兼容 OpenSearch、Elasticsearch、OpenSearch DashBoards、Kibana 等軟件及常用開(kāi)源插件,支持全文搜索、向量搜索、混合搜索、時(shí)空檢索等。提供結(jié)構(gòu)化、非結(jié)構(gòu)化文本的多條件檢索、統(tǒng)計(jì)、報(bào)表,可以實(shí)現(xiàn)一鍵部署、彈性擴(kuò)縮、簡(jiǎn)化運(yùn)維,快速構(gòu)建日志分析、信息檢索分析等業(yè)務(wù)能力。