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