使用 Amazon 基岩代理程式和知識庫,開發以聊天為基礎的全自動化助理 - AWS 方案指引

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

使用 Amazon 基岩代理程式和知識庫,開發以聊天為基礎的全自動化助理

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

代碼存儲庫:genai-bedrock-agent-chatbot

環境:PoC 或試點

技術:機器學習與 AI;無伺服器

AWS 服務:Amazon 基岩;AWS CDK;AWS Lambda

Summary

許多組織在建立能夠協調各種資料來源以提供全方位解答的聊天型助理時面臨挑戰。這種模式提供了一種解決方案,用於開發基於聊天的助理,該助理能夠通過簡單的部署來回答文檔和數據庫中的查詢。

Amazon Bdrock 開始,這項全受管的生成人工智慧 (AI) 服務提供各式各樣的進階基礎模型 (FMs)。這有助於高效地建立生成式 AI 應用程式,並專注於隱私權和安全性。在文件擷取的內容中,擷取增強一代 (RAG) 是一項關鍵功能。它使用知識庫來使用外部來源的上下文相關信息來增強 FM 提示。Amazon OpenSearch 無伺服器索引可作為 Amazon 基岩知識庫背後的向量資料庫。透過仔細迅速的工程來增強這項整合,以最大程度地減少不準確性,並確保回應已錨定在事實文件中。對於資料庫查詢,Amazon 基岩的 FM 會將文字查詢轉換為結構化 SQL 查詢,並納入特定參數。這可讓您從 AWS Glue 資料庫管理的資料庫精確擷取資料。Amazon Athena 用於這些查詢。

為了處理更複雜的查詢,獲得全面的答案需要來自文檔和數據庫的信息。Amazon Bedrock 的代理程式是一項生成式 AI 功能,可協助您建立自主代理程式,以了解複雜的任務,並將其分解為更簡單的協調任務。Amazon Bdrock 自主代理程式協助從簡化任務中擷取的洞察結合,可增強資訊的合成,從而獲得更全面和詳盡的答案。此模式示範如何使用 Amazon Bdrock 以及自動化解決方案中的相關生成 AI 服務和功能來建立聊天型助理。

先決條件和限制

先決條件

限制

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

  • 此解決方案只能部署在支援 Amazon 基岩和 Amazon OpenSearch 無伺服器的 AWS 區域。如需詳細資訊,請參閱 Amazon 基岩和 Amazon OpenSearch 無伺服器相關文件。

產品版本

  • 羅馬索引版本 0.10.6 或更新版本

  • 方塊煉金術版本 2.0.23 或更高版本

  • 開放搜索-PY 版本 2.4.2 或更高版本

  • 請求版本 1.2.3 或更新版本

  • 適用於蟒蛇的 AWS 開發套件 (博圖 3) 1.34.57 版或更新版本

架構

目標技術堆疊

AWS Cloud Development Kit (AWS CDK) 是一種開放原始碼軟體開發架構,可在程式碼中定義雲端基礎設施,並透過 AWS CloudFormation 佈建雲端基礎設施。此模式中使用的 AWS CDK 堆疊會部署下列 AWS 資源: 

  • AWS Key Management Service (AWS KMS)

  • Amazon Simple Storage Service (Amazon S3)

  • AWS Glue 資料型錄,適用於 AWS Glue 資料庫元件

  • AWS Lambda

  • AWS Identity and Access Management (IAM)

  • Amazon OpenSearch 無服務器

  • Amazon Elastic Container Registry (Amazon ECR) 

  • Amazon Elastic Container Service (Amazon ECS)

  • AWS Fargate

  • Amazon Virtual Private Cloud (Amazon VPC)

  • Application Load Balancer

目標架構

使用 Amazon 基岩知識庫和代理程式的架構圖

圖表顯示在單一 AWS 區域內使用多個 AWS 服務的全方位 AWS 雲端原生設定。聊天型助理的主要介面是 Amazon ECS 叢集上託管的 Streamlit 應用程式。應用程式負載平衡器管理可存取性 透過此介面進行的查詢會啟動 Invocation Lambda 函數,然後與 Amazon 基岩的代理程式進行介面。此代理程式透過諮詢 Amazon 基岩的知識庫或叫用 Lambda 函數來回應使用者查詢。Agent executor此函數會依照預先定義的 API 結構描述觸發一組與代理程式相關聯的動作。Amazon 基岩的知識庫使用 OpenSearch 無伺服器索引做為其向量資料庫基礎。此外,此Agent executor函數會產生 SQL 查詢,這些查詢會透過 Amazon Athena 針對 AWS Glue 資料庫執行。

工具

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) 是快速、可擴展的容器管理服務,可協助您執行、停止和管理叢集上的容器。

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

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

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

  • Amazon OpenSearch 無伺服器是 Amazon OpenSearch 服務的隨需無伺服器組態。在此模式中, OpenSearch 無伺服器索引可做為 Amazon 基岩知識庫的向量資料庫。

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

其他工具

  • 流光是一個用於創建數據應用程序的開源 Python 框架。

代碼存儲庫

此模式的代碼可在 GitHub genai-bedrock-agent-chatbot存儲庫中找到。代碼存儲庫包含以下文件和文件夾:

  • assetsfolder — 靜態資產,例如架構圖和公開資料集。

  • code/lambdas/action-lambda資料夾 — Lambda 函數的 Python 程式碼,可做為 Amazon 基岩代理程式的動作。

  • code/lambdas/create-index-lambda資料夾 — 建立 OpenSearch 無伺服器索引之 Lambda 函數的 Python 程式碼。

  • code/lambdas/invoke-lambda資料夾 — 叫用 Amazon 基岩代理程式的 Lambda 函數的 Python 程式碼,該代理程式會直接從流光應用程式呼叫。

  • code/lambdas/update-lambda資料夾 — Lambda 函數的 Python 程式碼,可在透過 AWS CDK 部署 AWS 資源後更新或刪除資源。

  • code/layers/boto3_layer資料夾 — 建立可在所有 Lambda 函數共用的 Boto3 層的 AWS CDK 堆疊。

  • code/layers/opensearch_layer資料夾 — 建立 OpenSearch 無伺服器層的 AWS CDK 堆疊,用於安裝所有相依性以建立索引。

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

  • code/code_stack.py— AWS CDK 會建構建建立 AWS 資源的 Python 檔案。

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

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

  • cdk.json— 用來提供建立資源所需值的輸入檔案。另外,在context/config字段中,您可以相應地自定義解決方案。如需有關自訂的詳細資訊,請參閱其他資訊一節。

最佳實務

史诗

任務描述所需技能

匯出帳戶和區域的變數。

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

export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number> export CDK_DEFAULT_REGION=<Region>
AWS DevOps、 DevOps 工程師

設定 AWS CLI 命名的設定檔。

若要為帳戶設定 AWS CLI 命名的設定檔,請按照組態和登入資料檔案設定中的指示進行操作。

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

將存放庫克隆到您的本地工作站。

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

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

設定虛 Python 環境。

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

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

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

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

設定 AWS CDK 環境。

若要將程式碼轉換為 AWS CloudFormation 範本,請執行命令cdk synth

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

在帳戶中部署資源。

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

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

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

  2. 複製儲存庫根目錄中的cdk.json檔案包含用於部署的 AWS CloudFormation 堆疊名稱。預設堆疊名稱為chatbot-stack。預設的 Amazon 基岩代理程式名稱為ChatbotBedrockAgent,預設的 Amazon 基岩代理程式別名為。Chatbot_Agent

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

    此命cdk deploy令使用第 3 層建構建立多個 Lambda 函數,將文件和 CSV 資料集檔案複製到 S3 儲存貯體。它還為 Amazon 基岩代理程式部署 Amazon 基岩代理程式、知識庫和 Action group Lambda 函數。

  4. 登入 AWS 管理主控台,然後在 https://console.aws.amazon.com/cloudformation/ 開啟 CloudFormation 主控台。

  5. 確認堆疊已成功部署。如需指示,請參閱在 AWS CloudFormation 主控台上檢閱您的堆疊

成功部署之後,您可以使用主控台中 [輸出] 索引標籤上提供的 URL,存取以聊天為基礎的助理應用程式 CloudFormation 。

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

移除 AWS 資源。

測試解決方案之後,若要清理資源,請執行命令cdk destroy

AWS DevOps、 DevOps 工程師

相關資源

AWS 文件

其他 AWS 資源

其他資源

其他資訊

使用您自己的資料自訂聊天型助理

若要整合您的自訂資料以部署解決方案,請遵循下列結構化準則。這些步驟旨在確保順暢且有效率的整合程序,讓您能夠使用自訂資料有效地部署解決方案。

用於知識庫資料整合

資料準備

  1. 找到assets/knowledgebase_data_source/目錄。

  2. 將資料集置於此資料夾中。

組態調整

  1. 開啟 cdk.json 檔案。

  2. 導覽至context/configure/paths/knowledgebase_file_name欄位,然後對其進行相應更新。

  3. 瀏覽至bedrock_instructions/knowledgebase_instruction欄位,然後更新欄位,以準確反映新資料集的細微差別和內容。

用於結構化資料整合

資料組織

  1. 在目assets/data_query_data_source/錄中,建立子目錄,例如tabular_data

  2. 將您的結構化數據集(可接受的格式包括 CSV,JSON,ORC 和實木複合地板)放入此新創建的子文件夾中。

  3. 如果您要連線至現有的資料庫,請更新create_sql_engine()中的函數code/lambda/action-lambda/build_query_engine.py以連線至您的資料庫。

組態和程式碼更新

  1. cdk.json檔案中,更新context/configure/paths/athena_table_data_prefix欄位以與新資料路徑對齊。

  2. code/lambda/action-lambda/dynamic_examples.csv透過整合與資料集對應的新文字轉 SQL 範例來進行修訂。

  3. 修改code/lambda/action-lambda/prompt_templates.py以鏡像結構化資料集的屬性。

  4. cdk.json檔案中,更新context/configure/bedrock_instructions/action_group_description欄位以說明 Action group Lambda 函數的用途和功能。

  5. assets/agent_api_schema/artifacts_schema.json檔案中,說明 L Action group ambda 函數的新功能。

一般更新

cdk.json檔案的本context/configure/bedrock_instructions/agent_instruction節中,考慮到新整合的資料,提供 Amazon Bdrock 代理程式預期功能和設計目的的的完整說明。