使用 RAG 和提示,開發先進的生成式 AI 聊天助理 ReAct - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 RAG 和提示,開發先進的生成式 AI 聊天助理 ReAct

創建者:庫馬爾傑亞拉揚(AWS),橋俊東(AWS),卡拉楊(AWS),基奧瓦·傑克遜(AWS),諾亞·漢密爾頓(AWS)和曹操(AWS)

代碼存儲庫:genai-bedrock-chatbot

環境:PoC 或試點

技術:機器學習和人工智能; 數據庫 DevOps; 無服務器

AWS 服務:Amazon 基岩;Amazon ECS;Amazon Kendra;AWS Lambda

Summary

一家典型的公司有 70% 的數據被困在孤立的系統中。您可以使用生成式人工智慧型聊天助理,透過自然語言互動,獲得這些資料孤島之間的洞察和關係。為了充分利用生成式 AI,輸出必須值得信賴、準確且包含可用的企業資料。以聊天為基礎的助理成功取決於下列因素:

  • 生成 AI 模型(例如人為克勞德 2)

  • 資料來源向量化

  • 用於提示模型的進階推理技巧,例如ReAct 框架

此模式提供資料擷取方法,例如 Amazon Simple Storage Service (Amazon S3) 貯體、AWS Glue 和 Amazon Relational Database Service 服務 (Amazon RDS) 等資料來源。值是通過交錯檢索增強生成(RAG)與 chain-of-thought 方法從該數據中獲得的。結果支援複雜的聊天型助理對話,這些對話會利用您公司儲存的整個資料。

此模式使用 Amazon SageMaker 手冊和定價資料表做為範例,探索生成式 AI 聊天型助理的功能。您將建立聊天型助理,透過回答有關定價和 SageMaker 服務功能的問題,協助客戶評估服務。該解決方案使用 Streamlit 庫來構建前端應用程序,並使用 LangChain 框架來開發由大型語言模型(LLM)提供支持的應用程序後端。

對聊天型助理進行查詢時,系統會以初始意圖分類來傳送至三種可能的工作流程之一。最複雜的工作流程結合了一般諮詢指導和複雜的定價分析。您可以調整模式以適應企業、企業和工業使用案例。

先決條件和限制

先決條件

限制

  • LangChain 不支持每個 LLM 進行流媒體。支持人工克勞德模型,但來自 AI21 實驗室的模型不是。

  • 此解決方案部署到單一 AWS 帳戶。

  • 此解決方案只能部署在提供 Amazon 基岩和 Amazon Kendra 的 AWS 區域。如需可用性的相關資訊,請參閱 Amazon 基岩和 Amazon Kendra 的文件。

產品版本

  • Python 版本 3.11 或更高版本

  • 流媒體版本 1.30.0 或更高版本

  • 串流聊天版本 0.1.1 或更新版本

  • LangChain 版本 0.1.12 或更新版本

  • AWS CDK 版本 2.132.1 或更新版本

架構

目標技術堆疊

  • Amazon Athena

  • Amazon Bedrock

  • Amazon Elastic Container Service (Amazon ECS)

  • AWS Glue

  • AWS Lambda

  • Amazon S3

  • Amazon Kendra

  • Elastic Load Balancing

目標架構

AWS CDK 程式碼會部署在 AWS 帳戶中設定聊天型助理應用程式所需的所有資源。下圖中顯示的基於聊天的助理應用程序旨在回答用戶的 SageMaker 相關查詢。使用者透過應用程式負載平衡器連線到包含託管 Streamlit 應用程式之 Amazon ECS 叢集的 VPC。協調流程 Lambda 函數會連接至應用程式。S3 儲存貯體資料來源會透過 Amazon Kendra 和 AWS Glue 將資料提供給 Lambda 函數。Lambda 函數連接至 Amazon 基岩,以回答聊天型助理使用者的查詢 (問題)。

架構圖。
  1. 協調流程 Lambda 函數會將 LLM 提示請求傳送至 Amazon 基岩模型 (克勞德 2)。

  2. Amazon 基岩將 LLM 響應發送回協調流程 Lambda 函數。

協調流程 Lambda 函數內的邏輯流程

當使用者透過 Streamlit 應用程式提出問題時,會直接叫用協調流程 Lambda 函數。下圖顯示叫用 Lambda 函數時的邏輯流程。

架構圖。
  • 步驟 1-輸入query(問題)被分為三個意圖之一:

    • 一般 SageMaker 指引問題

    • 一般 SageMaker 定價 (訓練/推論) 問題

    • 與定價相關的 SageMaker 複雜問題

  • 第 2 步-輸入query啟動三個服務之一:

    • RAG Retrieval service,從 Amazon Kendra 向量資料庫擷取相關內容,並透過 Amazon 基岩呼叫 LLM,將擷取的內容匯總為回應。

    • Database Query service,它使用-LLM,數據庫元數據和相關表中的示例行將輸query入轉換為 SQL 查詢。資料庫查詢服務會透過 Amazon Athena 針對 SageMaker 定價資料庫執行 SQL 查詢,並將查詢結果摘要為回應。

    • In-context ReACT Agent service,在提供響應之前query將輸入分解為多個步驟。代理在推理過程中使用RAG Retrieval serviceDatabase Query service作為工具來檢索相關信息。推理和操作過程完成後,代理程序生成最終答案作為響應。

  • 步驟 3 — 來自協調流程 Lambda 函數的回應會傳送至 Streamlit 應用程式做為輸出。

工具

AWS 服務

  • Amazon Athena 是一種互動式查詢服務,可協助您使用標準 SQL 直接在亞馬遜簡單儲存服務 (Amazon S3) 中分析資料。

  • Amazon 基岩是一項全受管服務,可透過統一的 API,讓領先的 AI 新創公司和 Amazon 提供的高效能基礎模型 (FM) 供您使用。

  • AWS Cloud Development Kit (AWS CDK) 是一種軟體開發架構,可協助您在程式碼中定義和佈建 AWS 雲端基礎設施。

  • AWS Command Line Interface (AWS CLI) (AWS CLI) 是一種開放原始碼工具,可協助您透過命令列殼層中的命令與 AWS 服務互動。

  • Amazon Elastic Container Service (Amazon ECS) 是快速、可擴展的容器管理服務,可協助您執行、停止和管理叢集上的容器。

  • AWS Glue 是全受管的擷取、轉換和載入 (ETL) 服務。它可協助您在資料存放區和資料串流之間可靠地分類、清理、擴充和移動資料。此模式使用 AWS Glue 爬行程式和 AWS Glue 資料型錄表格。

  • Amazon Kendra 是一種智慧型搜尋服務,它使用自然語言處理和進階機器學習演算法,傳回資料中搜尋問題的特定答案。

  • AWS Lambda 是一種運算服務,可協助您執行程式碼,而不需要佈建或管理伺服器。它只會在需要時執行程式碼並自動調整規模,因此您只需為使用的運算時間付費。

  • Amazon Simple Storage Service (Amazon S3) 是一種雲端型物件儲存服務,可協助您儲存、保護和擷取任何數量的資料。

  • E@@ lastic Load Balancing (ELB) 可將傳入的應用程式或網路流量分散到多個目標。例如,您可以將流量分配到一或多個可用區域中的 Amazon 彈性運算雲端 (Amazon EC2) 執行個體、容器和 IP 地址。

代碼存儲庫

此模式的代碼可在 GitHub genai-bedrock-chatbot存儲庫中找到。

代碼存儲庫包含以下文件和文件夾:

  • assets文件夾-靜態資產架構圖和公共數據集

  • code/lambda-container資料夾 — 在 Lambda 函數中執行的 Python 程式碼

  • code/streamlit-app資料夾 — 在 Amazon ECS 中作為容器映像執行的 Python 程式碼

  • tests資料夾 — 為了單元測試 AWS CDK 建構而執行的 Python 檔案

  • code/code_stack.py-AWS CDK 構建用於創建 AWS 資源的 Python 文件

  • app.py— 用於在目標 AWS 帳戶中部署 AWS 資源的 AWS CDK 堆疊 Python 檔案

  • requirements.txt— 必須為 AWS CDK 安裝的所有 Python 相依性清單

  • requirements-dev.txt— 必須為 AWS CDK 安裝的所有 Python 相依性清單,才能執行單元測試套件

  • cdk.json— 用於提供旋轉資源所需的值的輸入文件

注意:AWS CDK 程式碼使用 AWS 管理的 L3 (第 3 層) 建構AWS Identity and Access Management (IAM) 政策來部署解決方案。

最佳實務

史诗

任務描述所需技能

將部署堆疊的帳戶和 AWS 區域匯出變數。

若要使用環境變數為 AWS CDK 提供 AWS 登入資料,請執行下列命令。

export CDK_DEFAULT_ACCOUNT=<12 Digit AWS Account Number> export CDK_DEFAULT_REGION=<region>
DevOps 工程師, AWS DevOps

設定 AWS CLI 設定檔。

若要為帳戶設定 AWS CLI 設定檔,請遵循 AWS 文件中的指示。

DevOps 工程師, AWS DevOps
任務描述所需技能

克隆本地計算機上的存儲庫。

要克隆存儲庫,請在終端中運行以下命令。

git clone https://github.com/awslabs/genai-bedrock-chatbot.git
DevOps 工程師, AWS DevOps

設定 Python 虛擬環境並安裝必要的相依性。

若要設定 Python 虛擬環境,請執行下列命令。

cd genai-bedrock-chatbot python3 -m venv .venv source .venv/bin/activate

若要設定所需的相依性,請執行下列命令。

pip3 install -r requirements.txt
DevOps 工程師, AWS DevOps

設定 AWS CDK 環境並合成 AWS CDK 程式碼。

  1. 若要在您的 AWS 帳戶中設定 AWS CDK 環境,請執行下列命令。

    cdk bootstrap aws://ACCOUNT-NUMBER/REGION
  2. 若要將程式碼轉換為 AWS CloudFormation 堆疊組態,請執行命令cdk synth

DevOps 工程師, AWS DevOps
任務描述所需技能

提供克勞德模型存取權限。

若要為您的 AWS 帳戶啟用人性克勞德模型存取權限,請按照 Amazon 基岩文件中的說明進行操作。

AWS DevOps

在帳戶中部署資源。

若要使用 AWS CDK 在 AWS 帳戶中部署資源,請執行下列動作:

  1. 在複製存放庫的根目錄中,在cdk.json檔案中提供logging參數的輸入。範例值為INFODEBUGWARN、和ERROR

    這些值定義 Lambda 函數和流光應用程式的記錄層級訊息。

  2. 複製儲存庫根目錄中的app.py檔案包含用於部署的 AWS CloudFormation 堆疊名稱。預設堆疊名稱為chatbot-stack

  3. 若要部署資源,請執行命令cdk deploy

    此命cdk deploy令使用 L3 建構建立多個 Lambda 函數,將文件和 CSV 資料集檔案複製到 S3 儲存貯體。

  4. 命令完成後,登入 AWS 管理主控台、開啟主控 CloudFormation 台,然後檢閱堆疊是否成功部署

成功部署後,您可以使用 [ CloudFormation 輸出] 區段中提供的 URL 存取以聊天為基礎的助理應用程式。

AWS DevOps、 DevOps 工程師

執行 AWS Glue 爬行者程式並建立資料目錄表格。

AWS Glue 爬行程式是用來維持資料結構描述的動態。此解決方案會視需求執行爬蟲,在 AWS Glue 資料型錄表格中建立和更新分割區。將 CSV 資料集檔案複製到 S3 儲存貯體之後,執行 AWS Glue 爬蟲程式並建立資料目錄表格結構描述以進行測試:

  1. 瀏覽至 AWS Glue 主控台。

  2. 在導覽窗格的 [資料目錄] 下,選擇 [爬行者程式]。

  3. 選取具有尾碼sagemaker-pricing-crawler的爬行者程式。

  4. 執行爬行者程式。

  5. 爬行者程式成功執行之後,便會建立 AWS Glue 資料型錄表格。

注意:AWS CDK 程式碼會設定 AWS Glue 爬行程式視需求執行,但您也可以排程定期執行。

DevOps 工程師, AWS DevOps

啟動文件索引。

將檔案複製到 S3 儲存貯體之後,請使用 Amazon Kendra 對其進行編目並編製索引:

  1. 瀏覽至 Amazon Kendra 主控台。

  2. 選取帶有尾碼的索引chatbot-index

  3. 在導覽窗格中,選擇 [資料來源],然後選取具有尾碼的資料來源連接器chatbot-index

  4. 選擇「立即同步」以啟動索引程序。

注意:AWS CDK 程式碼會將 Amazon Kendra 索引同步設定為隨需執行,但您也可以使用排程參數定期執行。

AWS DevOps、 DevOps 工程師
任務描述所需技能

移除 AWS 資源。

測試解決方案之後,請清理資源:

  1. 若要移除解決方案部署的 AWS 資源,請執行命令cdk destroy

  2. 刪除兩個 S3 儲存貯體中的所有物件,然後移除值區。

    如需詳細資訊,請參閱刪除值區

DevOps 工程師, AWS DevOps

故障診斷

問題解決方案

AWS CDK 會傳回錯誤。

如需 AWS CDK 問題的相關說明,請參閱疑難排解常見 AWS CDK 問題。

相關資源

其他資訊

AWS CDK 命令

使用 AWS CDK 時,請記住下列有用的命令:

  • 列出應用程式中的所有堆疊

    cdk ls
  • 發出合成的 AWS 範本 CloudFormation

    cdk synth
  • 將堆疊部署到您的預設 AWS 帳戶和區域

    cdk deploy
  • 將已部署的堆疊與目前狀態進行比較

    cdk diff
  • 開啟 AWS CDK 文件

    cdk docs
  • 刪除 CloudFormation 堆疊並移除 AWS 部署的資源

    cdk destroy