阿里雲PAI大模型RAG對話系統最佳實踐

去年4月至9月,阿里雲人工智能平臺 PAI 團隊與大數據基礎工程技術團隊合作,構建了基於知識庫檢索增強的大模型答疑對話機器人,並在阿里雲官方答疑鏈路、研發小蜜、釘釘大數據技術服務助手等多個線上場景上線,顯著提升答疑效率。相關文檔:【萬字長文】基於阿里雲PAI搭建知識庫向量檢索增強的大模型對話系統

上線幾個月來,隨着 RAG 技術日趨火熱,我們保持對線上鏈路的迭代,不斷加入學界業界最新的 RAG 優化技術(eg: advanced RAG),改進了包括知識入庫 query 改寫多路檢索召回融合結果重排序prompt 工程等在內的多個 RAG 模塊,線上提效顯著。

目前本輪優化已上線阿里雲官網最佳實踐,並開源在 PAI-RAG 代碼庫中。隨着 RAG 技術迅猛發展,我們在不斷跟進最新優化技術,並迭代加入代碼庫與最佳實踐中。

本文爲大模型RAG對話系統最佳實踐,旨在指引AI開發人員如何有效地結合LLM大語言模型的推理能力和外部知識庫檢索增強技術,從而顯著提升對話系統的性能,使其能更加靈活地返回用戶查詢的內容。適用於問答、摘要生成和其他依賴外部知識的自然語言處理任務。通過該實踐,您可以掌握構建一個大模型RAG對話系統的完整開發鏈路。

1. 背景信息

大語言模型(LLM)在生成準確和實時的回覆方面存在侷限性,不適合直接用於需要精確信息的客服或問答等場景。當前業界普遍採用基於檢索增強的RAG技術來改善LLM的表現。該方法通過結合LLM的歸納生成能力和向量檢索庫的檢索能力,增強對用戶查詢的理解,併產生更加可靠的回覆。

檢索增強生成(Retrieval-Augmented Generation, RAG)技術結合了大語言模型(LLM),如通義千問,與信息檢索系統,以提高文本生成的準確性和豐富度。在響應用戶查詢時,RAG首先利用檢索系統從知識庫中檢索相關內容,然後將檢索到的內容與原始查詢一同輸入大語言模型(LLM),從而讓語言模型不用重新訓練就能夠獲取最新的信息,併產生可靠的輸出。RAG特別適用於問答、摘要生成和其他依賴外部知識的自然語言處理任務,同時還支持定製化提示(Prompt)和基於檢索的多輪對話管理,類似於LangChain,從而進一步優化用戶交互體驗和答案質量。

1.1 方案架構

本方案包括以下功能模塊:

  • 向量檢索庫準備:根據場景需求選擇開通Hologres、AnalyticDB PostgreSQL或ElasticSearch,或使用Faiss作爲向量檢索庫供後續RAG對話系統鏈路使用。
  • 對話模型推理服務在線部署:您可以在EAS中將對話模型部署爲在線服務,以供後續RAG對話系統鏈路中調用模型服務。
  • RAG服務在線部署:您可以在EAS中部署LangChain的WebUI服務。
  • 在WebUI界面進行知識問答:打開RAG服務的WebUI應用,然後串聯自定義的業務數據進行知識問答,驗證對話系統的效果。

2. 前提條件

說明

● 僅在華北6(烏蘭察布)地域支持購買靈駿資源,且需要開通白名單。
● 當前靈駿智算資源僅供白名單用戶受限申請使用,如果您希望使用靈駿智算資源,您可先提交工單,申請添加靈駿智算使用白名單。

3. 步驟一:準備向量檢索庫

具體步驟一,請參見文檔

您可以選擇以下任意一種產品構建本地向量庫:

  • Faiss(Facebook AI Similarity Search)
  • Hologres
  • AnalyticDB PostgreSQL
  • Elasticsearch

其中,Faiss無需開通或購買即可使用,Hologres、AnalyticDB PostgreSQL和ElasticSearch需要開通並準備相應的WebUI界面配置參數。後續您可以使用準備好的參數連接向量檢索庫。

3.1 Hologres

  1. 開通Hologres實例並創建數據庫。具體操作,請參見購買Hologres。您需要將已創建的數據庫名稱保存到本地。
  2. 在實例詳情頁面查看調用信息。
    1. 單擊實例名稱,進入實例詳情頁面。
    2. 網絡信息區域,單擊指定VPC後的複製,將域名:80前面的內容保存到本地。
  3. 切換到賬號管理Tab頁,創建自定義用戶。並將賬號和密碼保存到本地,後續用於連接Hologres實例。具體操作,請參見創建自定義用戶。

其中:選擇成員角色選擇實例超級管理員(SuperUser)

3.2 AnalyticDB for PostgreSQL

  1. 在AnalyticDB for PostgreSQL版控制檯上創建實例。具體操作,請參見創建實例。其中:向量引擎優化選擇開啓
  2. 單擊實例名稱,進入基本信息頁面,在該頁面中的數據庫連接信息區域,複製內網地址和外網地址並保存到本地。

說明

● 如果沒有外網地址,您需要單擊申請外網地址來獲取。具體操作,請參見管理外網地址。
● 如果在同一個VPC內連接實例,只需使用內網地址。
● 創建數據庫賬號,並將數據庫賬號和密碼保存到本地,後續用於連接數據庫。具體操作,請參見創建數據庫賬號。
● 配置白名單爲0.0.0.0/0。具體操作,請參見設置白名單。

3.3 ElasticSearch

1.創建阿里雲Elasticsearch實例。具體操作,請參見創建阿里雲Elasticsearch實例。其中:

    • 選擇服務選擇通用商業版
    • 場景初始化配置選擇通用場景
    • 您需要將在網絡及系統配置嚮導頁面配置的登錄名登錄密碼保存到本地。

2.單擊實例名稱,進入實例基本信息頁面。在該頁面獲取私網地址私網端口並保存到本地。

3.4 Faiss

使用Faiss構建本地向量庫,無需購買線上向量庫產品,免去了線上開通向量庫產品的複雜流程,更輕量易用。

4. 步驟二:部署模型服務

具體步驟二,請參見文檔

在本方案的RAG對話系統鏈路中,需要部署對話模型推理服務和RAG服務,分別作爲與用戶交互的對話模型和知識文檔預處理步驟的QA提取模型。具體操作步驟如下:

4.1 部署對話模型推理服務

您可以使用自定義的數據微調訓練對話模型並部署爲推理服務,具體操作,請參見靈駿分佈式訓練和部署模型。本方案以預置鏡像爲例,介紹如何部署對話模型推理服務:

  1. 進入PAI-EAS 模型在線服務頁面。
    1. 登錄PAI控制檯。
    2. 在左側導航欄單擊工作空間列表,在工作空間列表頁面中單擊待操作的工作空間名稱,進入對應工作空間內。
    3. 在工作空間頁面的左側導航欄選擇模型部署>模型在線服務(EAS),進入PAI-EAS 模型在線服務頁面。

2.在PAI-EAS 模型在線服務頁面,單擊部署服務,在彈出對話框中,選擇自定義部署,然後單擊確定

3.在部署服務頁面,配置以下關鍵參數。

參數 描述
服務名稱 自定義服務名稱。
部署方式 選擇鏡像部署AI-Web應用。
鏡像選擇 在PAI平臺鏡像列表中選擇chat-llm-webui;鏡像版本選擇2.0。說明 由於版本迭代迅速,部署時鏡像版本選擇最高版本即可。
運行命令 不同的模型類型對應的運行命令如下:
使用chatglm2-6b模型進行部署:python webui/webui_server.py --port=8000 --model-path=THUDM/chatglm2-6b
使用通義千問-7b模型進行部署:python webui/webui_server.py --port=8000 --model-path=Qwen/Qwen-7B-Chat
使用llama2-7b模型進行部署:python webui/webui_server.py --port=8000 --model-path=meta-llama/Llama-2-7b-chat-hf
使用Llama2-13b模型進行部署:python webui/webui_server.py --port=8000 --model-path=meta-llama/Llama-2-13b-chat-hf --precision=fp16端口號配置爲:8000。
資源組種類 選擇公共資源組。
資源配置方法 選擇常規資源配置。
資源配置選擇 必須選擇GPU類型,實例規格推薦使用ml.gu7i.c16m60.1-gu30(性價比最高)。
專有網絡配置 當選擇Hologres、AnalyticDB for PostgreSQL或ElasticSearch作爲向量檢索庫時,請確保所配置的專有網絡與選定的向量檢索庫保持一致。
當選擇Faiss作爲向量檢索庫時,請隨意選擇一個專有網絡。

4.單擊部署,等待一段時間即可完成模型部署。當服務狀態運行中時,表明服務部署成功。

5.獲取VPC地址調用的服務訪問地址和Token。

    1. 單擊服務名稱,進入服務詳情頁面。
    2. 基本信息區域,單擊查看調用信息
    3. 調用信息對話框的VPC地址調用頁籤,獲取服務訪問地址和Token,並保存到本地。

4.2 部署RAG服務並啓動WebUI

PAI提供了最方便快捷的部署方式,您可以直接在EAS中選擇指定的鏡像即可部署RAG的WebUI服務,具體操作步驟如下。更多關於RAG鏈路的詳細內容,請參見GitHub開源代碼。
https://github.com/aigc-apps/PAI-RAG

  1. PAI-EAS 模型在線服務頁面,單擊部署服務,在彈出對話框中,選擇自定義部署,然後單擊確定
  2. 部署服務頁面,配置以下關鍵參數。
參數 描述
服務名稱 自定義服務名稱。本案例使用的示例值爲:chatbot_langchain_vpc。
部署方式 選擇鏡像部署AI-Web應用。
鏡像選擇 在PAI平臺鏡像列表中選擇chatbot-langchain,鏡像版本選擇1.0。由於版本迭代迅速,部署時鏡像版本選擇最高版本即可。
運行命令 服務運行命令:uvicorn webui:app --host 0.0.0.0 --port 8000
端口號輸入:8000。
資源組種類 選擇公共資源組。
資源配置方法 必須選擇GPU類型,實例規格推薦使用ml.gu7i.c16m60.1-gu30(性價比最高)。
額外系統盤:70G。
專有網絡配置 當選擇Hologres、AnalyticDB for PostgreSQL或ElasticSearch作爲向量檢索庫時,請確保所配置的專有網絡與選定的向量檢索庫保持一致。
當選擇Faiss作爲向量檢索庫時,與對話模型推理服務配置的專有網絡保持一致。

3.單擊部署,等待一段時間即可完成模型部署。當服務狀態運行中時,表明服務部署成功。

4.服務部署成功後,單擊服務方式列下的查看Web應用,進入WebUI頁面。

5. 步驟三:在WebUI頁面進行知識問答

具體步驟三,請參見文檔

目前RAG對話系統支持集成兩類知識庫文檔類型:HTML和TEXT。以下內容爲您介紹兩種文檔類型支持的產品能力。

5.1 場景一:面向HTML文檔的檢索增強大模型對話系統

1、自定義配置參數

如下圖所示,您可以在RAG服務WebUI界面的Settings選項卡中,配置本系統的參數,並測試連接是否正常。

具體參數配置詳情如下:

  • Emebdding Model:支持選擇5種embedding model和對應的維度(Emebdding Dimension)。推薦使用SGPT-125M-weightedmean-nli-bitfit。
  • Emebdding Dimension:選擇Emebdding Model後,系統會自動進行配置,無需手動操作。
  • EAS Url:配置爲步驟二中獲取的服務訪問地址。
  • EAS Token:配置爲步驟二中獲取的服務Token。
  • 配置Vector Store。不同的向量檢索庫對應的參數配置詳情如下:

Hologres

  • Host:配置爲步驟一中查詢到的Hologres調用信息。
  • Database:配置爲步驟一中創建的數據庫名稱。
  • User:配置爲步驟一中創建的自定義用戶的賬號。
  • Password:配置爲步驟一中創建的自定義用戶的密碼。
  • Table:配置數據庫表名稱,例如test_table。

以上參數配置完成後,單擊Connect Hologres,驗證Hologres實例是否連接正常。

AnalyticDB

  • Host:配置爲步驟一中獲取的數據庫連接外網地址。

說明

如果在同一個VPC內連接實例,只需使用內網地址。

  • User:配置爲步驟一中創建的數據庫賬號。
  • Database:配置爲數據庫名稱。您可以登錄數據庫後進行查看,如何登錄數據庫,請參見登錄數據庫。

  • Password:配置爲步驟一中創建的數據庫密碼。
  • CollectionName:用戶自定義的數據庫表名稱。例如langchain_document
  • Pre_delete:是否刪除已存在的Database。取值爲:True(刪除)、False(不刪除)。

ElasticSearch

  • URL:配置爲步驟一中獲取的私網地址和端口,格式爲:http://私網地址:端口
  • Index:用戶自定義的索引名稱。
  • User:配置爲步驟一中創建ElasticSearch實例時配置的登錄名。
  • Password:配置爲步驟一中創建ElasticSearch實例時配置的登錄密碼。

以上參數配置完成後,單擊Connect ElasticSearch,驗證ElasticSearch實例是否連接正常。

Faiss

  • Path:用戶自定義的數據庫文件夾名稱。例如faiss_path
  • Index:用戶自定義的索引文件夾名稱。例如faiss_index

此外,您還可以在Settings選項卡中上傳JSON配置文件,並單擊Parse config來解析配置文件。解析成功後,WebUI頁面將自動根據配置文件內容填寫相應配置。不同的向量檢索庫對應的配置文件內容如下:

Hologres

{
  "embedding": {
    "model_dir": "embedding_model/",
    "embedding_model": "SGPT-125M-weightedmean-nli-bitfit",
    "embedding_dimension": 768
  },

  "EASCfg": {
    "url": "http://xx.vpc.pai-eas.aliyuncs.com/api/predict/chatllm_demo_glm2",
    "token": "xxxxxxx=="
  },

  "vector_store": "Hologres",

  "HOLOCfg": {
    "PG_HOST": "hgpostcn-cn.xxxxxx.vpc.hologres.aliyuncs.com",
    "PG_PORT": "80",
    "PG_DATABASE": "langchain",
    "PG_USER": "user",
    "PG_PASSWORD": "password"
  }
}

AnalyticDB

{
  "embedding": {
    "model_dir": "embedding_model/",
    "embedding_model": "SGPT-125M-weightedmean-nli-bitfit",
    "embedding_dimension": 768
  },

  "EASCfg": {
    "url": "http://xx.pai-eas.aliyuncs.com/api/predict/chatllm_demo_glm2",
    "token": "xxxxxxx=="
  },

  "vector_store": "AnalyticDB",

  "ADBCfg": {
    "PG_HOST": "gp.xxxxx.rds.aliyuncs.com",
    "PG_USER": "xxxxxxx", 
    "PG_DATABASE": "xxxxxxx", 
    "PG_COLLECTION_NAME": "xxxxxxx",
    "PG_PASSWORD": "passwordxxxx"
  }
}

ElasticSearch

{
  "embedding": {
    "model_dir": "embedding_model/",
    "embedding_model": "SGPT-125M-weightedmean-nli-bitfit",
    "embedding_dimension": 768
  },

  "EASCfg": {
    "url": "http://xx.pai-eas.aliyuncs.com/api/predict/chatllm_demo_glm2",
    "token": "xxxxxxx=="
  },

  "vector_store": "ElasticSearch",

  "ElasticSearchCfg": {
    "ES_URL": "http://es-cn-xxx.elasticsearch.aliyuncs.com:9200",
    "ES_USER": "elastic",
    "ES_PASSWORD": "password",
    "ES_INDEX": "test_index"
  }
}

Faiss

{
  "embedding": {
    "model_dir": "embedding_model/",
    "embedding_model": "SGPT-125M-weightedmean-nli-bitfit",
    "embedding_dimension": 768
  },

  "EASCfg": {
    "url": "http://xx.vpc.pai-eas.aliyuncs.com/api/predict/chatllm_demo_glm2",
    "token": "xxxxxxx=="
  },

  "vector_store": "FAISS",

  "FAISS": {
    "index_path": "faiss_index",
    "index_name": "faiss_file"
  }
}

其中:EASCfg即爲在步驟二中獲取的對話模型推理服務的訪問地址和Token。HOLOCfg即爲Hologres的相關配置。您可以參考WebUI界面參數說明進行配置。

2、上傳HTML文件

在RAG服務的WebUI頁面中,切換到Upload選項卡中,在該頁面配置以下參數,並上傳HTML類型的用戶知識庫文檔。

其中:

  • Which type of files do you want to upload?:選擇html
  • Files:參考界面操作指引上傳知識庫文檔,然後單擊Upload。支持多文件上傳,文件格式爲:HTML。
  • Directory:參考界面操作指引上傳包含知識庫文檔的目錄,然後單擊Upload

您可以使用PAI提供的rag_chatbot_test_doc.html知識庫文檔進行Mock測試。

3、文檔清洗與切分

在構建向量檢索庫前,系統會對您所上傳的HTML源碼文件進行文本處理。包括數據清洗(文本提取、超鏈替換等)和語義切塊(chunk)。

您可以通過設置rank label參數,來控制語義切塊的粒度大小,默認爲h2。

4、QA提取

將原始的知識文檔輸入LLM,輸出針對該文檔的若干QA對,並在後續構建數據庫時,用生成的問題Q作爲檢索index,答案A作爲文檔內容返回。該方法對知識文檔進行語義級別的細粒度劃分,使得檢索到的文檔與用戶Query相關度更高,提高信噪比。但QA提取方法依賴於LLM的能力,因此會帶來更高的計算開銷和時間開銷。常用的QA提取方法包括 RefGPT等。

Tricks:對於高信息量、長上下文的知識文檔,適合採用QA Extraction方法,將文檔劃分爲更細粒度、信噪比更高的QA子文檔。

本方案支持針對官方文檔自動提取QA對,以獲得更好的檢索和回答效果。


以阿里雲官方技術文檔爲例,爲您展示提取得到的QA數據。系統會根據您上傳的知識庫文檔自動提取QA對,示例如下:

Q1: 授予OSS和DLF權限 前提條件 如何添加AliyunOSSFullAccess和AliyunDLFFullAccess權限以使用DLF服務?

A1: 要添加AliyunOSSFullAccess和AliyunDLFFullAccess權限,請按照以下步驟操作: 1. 訪問阿里雲控制檯,登錄您的賬號。 2. 進入“安全管理”模塊,點擊“權限管理”。 3. 選擇“用戶”,點擊“添加權限”。 4. 選擇“阿里雲OSS”,選擇“OSS訪問控制”,然後點擊“添加權限”。 5. 在“授權策略”中,添加“阿里雲DLF服務”的授權策略,並設置爲“FullAccess”。 6. 完成上述步驟後,您的阿里雲OSS和DLF服務將獲得AliyunOSSFullAccess和AliyunDLFFullAccess權限。 Q2: 授予OSS和DLF權限 操作步驟 在集羣信息頁面,如何找到Worker RAM角色? A2: 在集羣信息頁面,您需要單擊集羣資源頁籤,然後找到Worker RAM角色所在行的鏈接。
系統提取的QA對會自動寫入向量檢索庫中。以Hologres爲例,您可以在Hologres中查看寫入的數據和向量等信息。具體操作,請參見表。

5、向量數據庫召回

在RAG服務的WebUI頁面的Chat選項卡中,選擇Vector Store問答策略,即爲直接從向量數據庫中召回Top-K條相似結果。

支持在界面Parameters of Vector Retrieval中設置向量檢索庫返回的相似結果條數,默認爲3。

6、關鍵詞檢索召回

儘管在大多數複雜場景下,向量檢索都能有較好的表現,但在某些語料稀缺的垂直領域,或要求準確匹配的場景,向量檢索方法可能不如傳統的稀疏檢索方法。稀疏檢索方法通過對用戶Query與知識文檔的關鍵詞重疊度來進行排序,因此檢索過程更爲簡單和高效。常見的稀疏檢索方法有BM25、TF-IDF等。

Tricks: 在語料稀缺的私有垂直領域(如內部產品文檔),或要求準確匹配的場景,建議使用稀疏檢索算法。

在本步驟,PAI提供了BM25等關鍵詞檢索召回算法來完成稀疏檢索召回操作。您可以在頁面中選擇是否使用關鍵詞檢索召回。

7、多路召回融合

向量數據庫召回和關鍵詞檢索召回具有各自的優勢和不足,因此綜合二者的召回結果能夠提高整體的檢索準確性和效率。倒數排序融合(Reciprocal Rank Fusion, RRF)算法將使用不同相關性指標得到的多個排名結果集組合成單個結果集。其基本原則是,在不同搜索策略中始終出現在頂部位置的文檔,可能與用戶Query相關性更高,因此應該在合併結果中排名更高。RRF算法的具體計算過程詳見Cormack, et al.。

Tricks: 一般場景下,建議使用RRF方法組合稀疏檢索和向量檢索的結果,以得到相關性指標更多維的綜合結果。

當您選擇使用關鍵詞檢索召回,即Keyword Retrieval選擇Keyword Ensembled時,PAI將默認使用RRF算法對向量數據庫召回結果和關鍵詞檢索召回結果進行多路召回融合。

8、檢索結果Re-Rank

大多數向量數據庫單獨使用向量模型作爲檢索模型。向量模型通常爲Bi-Encoder模型,它生成給定文本的embedding向量,通過計算兩個文本的embedding向量之間的餘弦距離可以得到這兩個文本的語義相似度。向量模型計算效率高,但準確度較低,有時會爲了計算效率會犧牲一定程度的準確性。

因此我們可以對向量模型第一次召回的Top-K結果進行精度更高的Re-Rank操作,以得到相關度更高、更準確的知識文檔。Re-Rank模型是Cross-Encoder模型,它同時接受兩個文本句子作爲輸入,並輸出句子對的相似度分數。Cross-Encoder模型精度高,但不適合大規模數據,因此可以採用先試用向量模型粗排得到Top-100相關文檔,再使用Re-Rank模型精排的方式,得到與用戶Query最相關的文檔。常用的開源Re-Rank模型有Cohere-rerank、BAAI/bge-reranker-base、BAAI/bge-reranker-large等。

Tricks: 在計算資源充足的情況下,一般都建議使用向量檢索與Re-Rank重排相結合的檢索方式。通常第一次向量檢索取Top-100,最終精排取Top-3(視具體需求調整)

在本步驟中,PAI提供了BAAI/bge-reranker-base、BAAI/bge-reranker-large等開源模型來完成Re-Rank操作。您可以在頁面中選擇是否對檢索結果進行Re-Rank,以及具體使用的Re-Rank模型。

9、問答Prompt構建

Liu, et al.的研究表明,在長上下文輸入中,LLM更容易關注輸入首部和尾部的信息,而遺漏位於輸入中部的信息。因此,爲了提高RAG對話的準確度,可以對知識文檔與用戶 Query 進行重排序,使LLM更關注與用戶Query相關度更高的文檔。

Tricks: 建議以「參考文檔」-「Prompt模板」-「用戶Query」的順序構建LLM輸入,建議在「Prompt模板」中說明「答案中不允許包含編造內容」等 instruction。

本步驟中,PAI 基於上述研究對檢索到的知識文檔與用戶 Query 進行了排序整理,並形成了最終輸入大模型前的 Prompt 。在RAG服務的WebUI頁面的Chat選項卡中,PAI 提供了多種不同的Prompt策略,上述策略被置爲默認策略(Simple),您可以選擇合適的預定義Prompt模板或輸入自定義的Prompt模板以獲得更好的推理效果。

10、LLM知識問答

本方案支持以下三種不同的問答方式,輸入您的問題後,具體推理效果如下:

VectorStore

直接從向量數據庫中檢索並返回TopK條相似結果。

LLM

直接與EAS-LLM對話,返回大模型的回答。

Vector Store + LLM

將檢索返回的結果與用戶的問題組裝成可自定義的Prompt,送入EAS-LLM服務,從中獲取問答結果。

5.2 場景二:面向TEXT文檔的檢索增強大模型對話系統

1、參數自定義配置

如下圖所示,您可以在RAG服務WebUI界面的Settings選項卡中,配置本系統的參數,並測試連接是否正常。

具體參數配置詳情,請參見1、自定義配置參數。

2、上傳TEXT文件

在RAG服務的WebUI頁面中,切換到Upload選項卡中,在該頁面配置以下參數,並上傳TXT類型的用戶知識庫文檔。

其中:

  • Which type of files do you want to upload?:選擇text
  • Files:參考界面操作指引上傳知識庫文檔,然後單擊Upload。支持多文件上傳,文件格式爲:txt、doc、docx、pdf和md等。
  • Directory:參考界面操作指引上傳包含知識庫文檔的目錄,然後單擊Upload

您可以使用PAI提供的rag_chatbot_test_doc.txt知識庫文檔進行Mock測試。

3、文檔清洗與切分

在構建向量檢索庫前,系統會對您所上傳的知識文檔進行預處理。包括數據清洗(文本提取、超鏈替換等)和切塊(chunk)。

您可以通過設置以下兩個參數來控制文檔切塊粒度的大小:

  • Chunk Size:指定每個分塊的大小,單位爲字節,默認爲200。
  • Chunk Overlap:表示相鄰分塊之間的重疊量,默認爲0。

4、向量數據庫召回

在RAG服務的WebUI頁面的Chat選項卡中,選擇Vector Store問答策略,即爲直接從向量數據庫中召回Top-K條相似結果。

支持在界面Parameters of Vector Retrieval中設置向量檢索庫返回的相似結果條數,默認爲3。

5、關鍵詞檢索召回

儘管在大多數複雜場景下,向量檢索都能有較好的表現,但在某些語料稀缺的垂直領域,或要求準確匹配的場景,向量檢索方法可能不如傳統的稀疏檢索方法。稀疏檢索方法通過對用戶Query與知識文檔的關鍵詞重疊度來進行排序,因此檢索過程更爲簡單和高效。常見的稀疏檢索方法有BM25、TF-IDF等。

Tricks: 在語料稀缺的私有垂直領域(如內部產品文檔),或要求準確匹配的場景,建議使用稀疏檢索算法。

在本步驟,PAI提供了BM25等關鍵詞檢索召回算法來完成稀疏檢索召回操作。您可以在頁面中選擇是否使用關鍵詞檢索召回。

6、多路召回融合

向量數據庫召回和關鍵詞檢索召回具有各自的優勢和不足,因此綜合二者的召回結果能夠提高整體的檢索準確性和效率。倒數排序融合(Reciprocal Rank Fusion, RRF)算法將使用不同相關性指標得到的多個排名結果集組合成單個結果集。其基本原則是,在不同搜索策略中始終出現在頂部位置的文檔,可能與用戶Query相關性更高,因此應該在合併結果中排名更高。RRF算法的具體計算過程詳見Cormack, et al.。

Tricks: 一般場景下,建議使用RRF方法組合稀疏檢索和向量檢索的結果,以得到相關性指標更多維的綜合結果。

當您選擇使用關鍵詞檢索召回,即Keyword Retrieval選擇Keyword Ensembled時,PAI將默認使用RRF算法對向量數據庫召回結果和關鍵詞檢索召回結果進行多路召回融合。

7、檢索結果Re-Rank

大多數向量數據庫單獨使用向量模型作爲檢索模型。向量模型通常爲Bi-Encoder模型,它生成給定文本的embedding向量,通過計算兩個文本的embedding向量之間的餘弦距離可以得到這兩個文本的語義相似度。向量模型計算效率高,但準確度較低,有時會爲了計算效率會犧牲一定程度的準確性。
因此我們可以對向量模型第一次召回的Top-K結果進行精度更高的Re-Rank操作,以得到相關度更高、更準確的知識文檔。Re-Rank模型是Cross-Encoder模型,它同時接受兩個文本句子作爲輸入,並輸出句子對的相似度分數。Cross-Encoder模型精度高,但不適合大規模數據,因此可以採用先試用向量模型粗排得到Top-100相關文檔,再使用Re-Rank模型精排的方式,得到與用戶Query最相關的文檔。常用的開源Re-Rank模型有Cohere-rerank、BAAI/bge-reranker-base、BAAI/bge-reranker-large等。

Tricks: 在計算資源充足的情況下,一般都建議使用向量檢索與Re-Rank重排相結合的檢索方式。通常第一次向量檢索取Top-100,最終精排取Top-3(視具體需求調整)

在本步驟中,PAI提供了BAAI/bge-reranker-base、BAAI/bge-reranker-large等開源模型來完成Re-Rank操作。您可以在頁面中選擇是否對檢索結果進行Re-Rank,以及具體使用的Re-Rank模型。

8、問答Prompt構建

Liu, et al.的研究表明,在長上下文輸入中,LLM更容易關注輸入首部和尾部的信息,而遺漏位於輸入中部的信息。因此,爲了提高RAG對話的準確度,可以對知識文檔與用戶 Query 進行重排序,使LLM更關注與用戶Query相關度更高的文檔。

Tricks: 建議以「參考文檔」-「Prompt模板」-「用戶Query」的順序構建LLM輸入,建議在「Prompt模板」中說明「答案中不允許包含編造內容」等 instruction。

本步驟中,PAI 基於上述研究對檢索到的知識文檔與用戶 Query 進行了排序整理,並形成了最終輸入大模型前的 Prompt 。在RAG服務的WebUI頁面的Chat選項卡中,PAI 提供了多種不同的Prompt策略,上述策略被置爲默認策略(Simple),您可以選擇合適的預定義Prompt模板或輸入自定義的Prompt模板以獲得更好的推理效果。

9、LLM知識問答

本方案支持以下三種不同的問答方式,輸入您的問題後,具體推理效果如下:

VectorStore

直接從向量數據庫中檢索並返回TopK條相似結果。

LLM

直接與EAS-LLM對話,返回大模型的回答。

Vector Store + LLM

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

原文鏈接

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章