本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 RAG和 ReAct 提示,開發進階生成式 AI 聊天式助理
由 Praveen Kumar Jeyarajan (AWS)、Jundong Qiao (AWS)、Kara Yang (AWS)、Kiowa Jackson ()AWS、Noah Hamilton (AWS) 和 Shuai Cao (AWS) 建立
程式碼儲存庫: genai-bedrock-chatbot | 環境:PoC 或試行 | 技術:機器學習和 AI;資料庫; DevOps;無伺服器 |
AWS 服務:Amazon Bedrock、AmazonECS、Amazon Kendra、AWSLambda |
Summary
典型的公司有 70% 的資料被困在孤立系統中。您可以使用生成式 AI 驅動的聊天式助理,透過自然語言互動來解鎖這些資料孤島之間的洞見和關係。為了充分利用生成式 AI,輸出必須值得信任、準確且包含可用的公司資料。成功的聊天式助理取決於下列各項:
生成式 AI 模型 (例如 Anthropic Claude 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。
聊天式助理的查詢會符合初始意圖分類,以路由至三個可能工作流程之一。最複雜的工作流程結合了一般諮詢指南與複雜的定價分析。您可以調整模式以符合企業、企業和工業使用案例。
先決條件和限制
先決條件
已安裝和設定的AWS命令列介面 (AWS CLI)
對 Python 和 的基本熟悉程度 AWS CDK
已安裝 Git
已安裝 Docker
Python 3.11 或更新版本
已安裝和設定 (如需詳細資訊,請參閱工具章節) 在 Amazon Bedrock 服務中啟用 Amazon Titan 和 Anthropic Claude 模型存取
AWS 安全憑證,包括
AWS_ACCESS_KEY_ID
,在您的終端環境中正確設定
限制
LangChain 不支援每個LLM串流。支援 Anthropic Claude 模型,但不支援AI21來自 Labs 的模型。
此解決方案已部署至單一 AWS 帳戶。
此解決方案只能在 Amazon Bedrock 和 Amazon Kendra 可用的AWS區域中部署。如需可用性的詳細資訊,請參閱 Amazon Bedrock 和 Amazon Kendra 的文件。
產品版本
Python 3.11 版或更新版本
Streamlit 1.30.0 版或更新版本
Streamlit-chat 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 的相關查詢。使用者透過 Application Load Balancer 連線至VPC包含託管 Streamlit 應用程式之 Amazon ECS叢集的 。協調 Lambda 函數會連線至應用程式。S3 儲存貯體資料來源透過 Amazon Kendra 和 Glue 將資料提供給 Lambda AWS 函數。Lambda 函數會連線至 Amazon Bedrock,以回應聊天式助理使用者的查詢 (問題)。
協調 Lambda 函數會將LLM提示請求傳送至 Amazon Bedrock 模型 (Claude 2)。
Amazon Bedrock 會將LLM回應傳回協調 Lambda 函數。
協調 Lambda 函數中的邏輯流程
當使用者透過 Streamlit 應用程式提出問題時,它會直接叫用協調 Lambda 函數。下圖顯示叫用 Lambda 函數時的邏輯流程。
步驟 1 – 輸入
query
(問題) 被分類為三個意圖之一:一般 SageMaker 指引問題
一般 SageMaker 定價 (訓練/推論) 問題
與 SageMaker 和 定價相關的複雜問題
步驟 2 – 輸入會
query
啟動三個服務之一:RAG Retrieval service
,從 Amazon Kendra向量資料庫擷取相關內容,並透過 Amazon Bedrock LLM 呼叫 ,以摘要擷取的內容作為回應。 Database Query service
,它使用 - 相關資料表中的 LLM、資料庫中繼資料和範例資料列,將輸入轉換為query
SQL查詢。資料庫查詢服務會透過 Amazon Athena對 SageMaker 定價資料庫執行SQL查詢,並將查詢結果摘要為回應。 In-context ReACT Agent service
,其會在提供回應之前將輸入分解query
為多個步驟。客服人員使用RAG Retrieval service
和Database Query service
作為工具,在推理過程中擷取相關資訊。完成推理和動作程序後,客服人員會產生最終答案作為回應。
步驟 3 – 協調 Lambda 函數的回應會以輸出形式傳送至 Streamlit 應用程式。
工具
AWS 服務
Amazon Athena 是一種互動式查詢服務,可協助您使用標準 直接在 Amazon Simple Storage Service (Amazon S3) 中分析資料SQL。
Amazon Bedrock 是一項完全受管的服務,可讓來自領導 AI 新創公司的高效能基礎模型 (FMs) 和 Amazon 透過統一 供您使用API。
AWS Cloud Development Kit (AWS CDK) 是一種軟體開發架構,可協助您在程式碼中定義和佈建 AWS Cloud 基礎設施。
AWS Command Line Interface (AWS CLI) 是開放原始碼工具,可協助您透過命令列 Shell 中的命令與 AWS服務互動。
Amazon Elastic Container Service (Amazon ECS) 是一種快速且可擴展的容器管理服務,可協助您執行、停止和管理叢集上的容器。
AWS Glue 是完全受管的擷取、轉換和載入 (ETL) 服務。它可協助您在資料存放區和資料串流之間可靠地分類、清除、擴充和移動資料。此模式使用 AWS Glue 爬蟲程式和 AWS Glue Data Catalog 資料表。
Amazon Kendra 是一項智慧型搜尋服務,使用自然語言處理和進階機器學習演算法,傳回從資料搜尋問題的特定答案。
AWS Lambda 是一種運算服務,可協助您執行程式碼,而不需要佈建或管理伺服器。它只會在需要時執行程式碼並自動擴展,因此您只需支付您使用的運算時間。
Amazon Simple Storage Service (Amazon S3) 是一種雲端型物件儲存服務,可協助您儲存、保護和擷取任何數量的資料。
Elastic Load Balancing (ELB) 會將傳入的應用程式或網路流量分散到多個目標。例如,您可以在一或多個可用區域中跨 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體、容器和 IP 地址分配流量。
程式碼儲存庫
此模式的程式碼可在 儲存庫中使用 GitHub genai-bedrock-chatbot
程式碼儲存庫包含下列檔案和資料夾:
assets
資料夾 – 架構圖表和公有資料集的靜態資產code/lambda-container
資料夾 – 在 Lambda 函數中執行的 Python 程式碼code/streamlit-app
資料夾 – 在 Amazon 中作為容器映像執行的 Python 程式碼 ECStests
資料夾 – 執行以測試AWSCDK建構的 Python 檔案code/code_stack.py
– AWS CDK 用來建立AWS資源的建構 Python 檔案app.py
– 用於在目標AWS帳戶中部署AWS資源的AWSCDK堆疊 Python 檔案requirements.txt
– 必須安裝的所有 Python 相依性清單 AWS CDKrequirements-dev.txt
– 必須安裝 AWSCDK才能執行單位測試套件的所有 Python 相依性清單cdk.json
– 輸入檔案,提供提取資源所需的值
注意:AWSCDK程式碼使用由 管理的 L3 (第 3 層) 建構和 Identity and Access Management () 政策來部署解決方案。 AWS IAM AWS |
最佳實務
此處提供的程式碼範例僅適用於 proof-of-concept(PoC ) 或試行示範。如果您想要將程式碼帶入生產,請務必使用下列最佳實務:
設定 Lambda 函數的監控和警示。如需詳細資訊,請參閱監控和疑難排解 Lambda 函數 。如需使用 Lambda 函數的一般最佳實務,請參閱 AWS 文件 。
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
匯出要部署堆疊之帳戶和AWS區域的變數。 | 若要使用環境變數提供 AWS CDK 的AWS憑證,請執行下列命令。
| DevOps 工程師、 AWS DevOps |
設定AWSCLI設定檔。 | 若要設定 帳戶的AWSCLI設定檔,請遵循AWS文件 中的指示。 | DevOps 工程師、 AWS DevOps |
任務 | 描述 | 所需的技能 |
---|---|---|
在本機機器上複製儲存庫。 | 若要複製儲存庫,請在您的終端機中執行下列命令。
| DevOps 工程師、 AWS DevOps |
設定 Python 虛擬環境並安裝必要的相依性。 | 若要設定 Python 虛擬環境,請執行下列命令。
若要設定所需的相依性,請執行下列命令。
| DevOps 工程師、 AWS DevOps |
設定AWSCDK環境並合成AWSCDK程式碼。 |
| DevOps 工程師、 AWS DevOps |
任務 | 描述 | 所需的技能 |
---|---|---|
佈建 Claude 模型存取權。 | 若要為AWS您的帳戶啟用 Anthropic Claude 模型存取,請遵循 Amazon Bedrock 文件 中的指示。 | AWS DevOps |
在 帳戶中部署資源。 | 若要使用 部署AWS帳戶中的資源AWSCDK,請執行下列動作:
成功部署後,您可以使用 CloudFormation 輸出區段中URL提供的 來存取聊天式助理應用程式。 | AWS DevOps, DevOps engineer |
執行 AWS Glue 爬蟲程式並建立資料目錄資料表。 | AWS Glue 爬蟲程式用於保持資料結構描述動態。解決方案會視需要執行爬蟲程式,在 AWSGlue Data Catalog 資料表中建立和更新分割區。將CSV資料集檔案複製到 S3 儲存貯體後,執行 AWS Glue 爬蟲程式並建立 Data Catalog 資料表結構描述進行測試:
注意:AWSCDK程式碼會將 AWS Glue 爬蟲程式設定為隨需執行,但您也可以排定它定期執行。 | DevOps 工程師、 AWS DevOps |
啟動文件索引。 | 將檔案複製到 S3 儲存貯體後,請使用 Amazon Kendra 來爬取並編製索引:
注意:AWSCDK程式碼會將 Amazon Kendra 索引同步設定為隨需執行,但您也可以使用排程參數 定期執行。 | AWS DevOps, DevOps engineer |
任務 | 描述 | 所需的技能 |
---|---|---|
移除 AWS 資源。 | 測試解決方案後,請清除資源:
| DevOps 工程師、 AWS DevOps |
故障診斷
問題 | 解決方案 |
---|---|
AWS CDK 傳回錯誤。 | 如需AWSCDK問題的協助,請參閱疑難排解AWSCDK常見問題 。 |
相關資源
其他資訊
AWS CDK 命令
使用 AWS 時CDK,請記住下列有用的命令:
列出應用程式中的所有堆疊
cdk ls
發出合成AWS CloudFormation 範本
cdk synth
將堆疊部署到您的預設AWS帳戶和區域
cdk deploy
比較已部署堆疊與目前狀態
cdk diff
開啟AWSCDK文件
cdk docs
刪除 CloudFormation 堆疊並移除AWS部署的資源
cdk destroy