本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon Bedrock 代理程式和知識庫,開發全自動聊天式助理
由 Jundong Qiao (AWS)、Kara Yang (AWS)、Kiowa Jackson (AWS)、Noah Hamilton (AWS)、Praveen Kumar Jeyarajan (AWS) 和 Shuai Cao (AWS) 建立
Summary
許多組織在建立能夠協調各種資料來源以提供完整答案的聊天式助理時,會面臨挑戰。此模式提供一種解決方案,用於開發聊天式助理,能夠以直接的部署來回應文件和資料庫的查詢。
從 Amazon Bedrock 開始,這項全受管的生成式人工智慧 (AI) 服務提供廣泛的進階基礎模型 (FMs)。這有助於高效建立生成式 AI 應用程式,並高度重視隱私權和安全性。在文件擷取的情況下,擷取增強產生 (RAG) 是一項樞紐功能。它使用知識庫,透過來自外部來源的內容相關資訊來增強 FM 提示。Amazon OpenSearch Serverless 索引做為 Amazon Bedrock 知識庫後方的向量資料庫。透過謹慎的提示工程來增強此整合,以將不正確的情況降至最低,並確保回應錨定在實際文件中。對於資料庫查詢,Amazon Bedrock FMs 會將文字查詢轉換為結構化 SQL 查詢,並結合特定參數。這可讓您從 AWS Glue 資料庫管理的資料庫精確擷取資料。Amazon Athena 用於這些查詢。
為了處理更複雜的查詢,達成完整的答案需要來自文件和資料庫的資訊。Amazon Bedrock 的代理程式是一項生成式 AI 功能,可協助您建置自主代理程式,了解複雜的任務,並將其分解為更簡單的協調任務。Amazon Bedrock 自主代理程式所協助的簡化任務擷取的洞見組合可增強資訊的合成,進而產生更完整且詳盡的答案。此模式示範如何在自動化解決方案中使用 Amazon Bedrock 和相關的生成式 AI 服務和功能來建置聊天式助理。
先決條件和限制
先決條件
限制
此解決方案會部署到單一 AWS 帳戶。
此解決方案只能在支援 Amazon Bedrock 和 Amazon OpenSearch Serverless 的 AWS 區域中部署。如需詳細資訊,請參閱 Amazon Bedrock 和 Amazon OpenSearch Serverless 的文件。
產品版本
Llama-index 0.10.6 版或更新版本
Sqlalchemy 2.0.23 版或更新版本
Opensearch-py 2.4.2 版或更新版本
Requests_aws4auth 1.2.3 版或更新版本
適用於 Python 的 AWS SDK (Boto3) 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 Data Catalog,適用於 AWS Glue 資料庫元件
AWS Lambda
AWS Identity and Access Management (IAM)
Amazon OpenSearch Serverless
Amazon Elastic Container Registry (Amazon ECR)
Amazon Elastic Container Service (Amazon ECS)
AWS Fargate
Amazon Virtual Private Cloud (Amazon VPC)
目標架構

圖表顯示單一 AWS 區域內使用多個 AWS 服務的全方位 AWS 雲端原生設定。聊天式助理的主要界面是託管在 Amazon ECS 叢集上的 StreamlitInvocation
Lambda 函數,然後與 Amazon Bedrock 的代理程式進行界面。此代理程式會透過諮詢 Amazon Bedrock 的知識庫或叫用 Agent executor
Lambda 函數來回應使用者查詢。此函數會依照預先定義的 API 結構描述,觸發與代理程式相關聯的一組動作。Amazon Bedrock 的知識庫使用 OpenSearch Serverless 索引作為向量資料庫基礎。此外,Agent executor
函數會產生 SQL 查詢,這些查詢會透過 Amazon Athena 針對 AWS Glue 資料庫執行。
工具
AWS 服務
Amazon Athena 是一種互動式查詢服務,可協助您使用標準 SQL,直接在 Amazon Simple Storage Service (Amazon S3) 中分析資料。
Amazon Bedrock 是一項全受管服務,可讓您透過統一 API 使用來自領導 AI 新創公司的高效能基礎模型 (FMs)。
AWS Cloud Development Kit (AWS CDK) 是一種軟體開發架構,可協助您在程式碼中定義和佈建 AWS Cloud 基礎設施。
AWS Command Line Interface (AWS CLI) 是一種開放原始碼工具,可協助您透過命令列 shell 中的命令與 AWS 服務互動。
Amazon Elastic Container Service (Amazon ECS) 是快速、可擴展的容器管理服務,可協助您執行、停止和管理叢集上的容器。
Elastic Load Balancing (ELB) 會將傳入的應用程式或網路流量分散到多個目標。例如,您可以在一或多個可用區域中將流量分散到 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體、容器和 IP 地址。
AWS Glue 是全受管擷取、轉換和載入 (ETL) 服務。它可協助您在資料存放區和資料串流之間可靠地分類、清理、擴充和移動資料。此模式使用 AWS Glue 爬蟲程式和 AWS Glue Data Catalog 資料表。
AWS Lambda 是一種運算服務,可協助您執行程式碼,而不需要佈建或管理伺服器。它只會在需要時執行程式碼並自動擴展,因此您只需支付您使用的運算時間。
Amazon OpenSearch Serverless 是 Amazon OpenSearch Service 的隨需無伺服器組態。在此模式中,OpenSearch Serverless 索引可做為 Amazon Bedrock 知識庫的向量資料庫。
Amazon Simple Storage Service (Amazon S3) 是一種雲端型物件儲存服務,可協助您儲存、保護和擷取任何數量的資料。
其他工具
Streamlit
是一種開放原始碼 Python 架構,可用來建立資料應用程式。
程式碼儲存庫
此模式的程式碼可在 GitHub genai-bedrock-agent-chatbot
assets
資料夾 – 靜態資產,例如架構圖表和公有資料集。code/lambdas/action-lambda
資料夾 – Lambda 函數的 Python 程式碼,可做為 Amazon Bedrock 代理程式的動作。code/lambdas/create-index-lambda
資料夾 – 建立 OpenSearch Serverless 索引之 Lambda 函數的 Python 程式碼。code/lambdas/invoke-lambda
資料夾 – 呼叫 Amazon Bedrock 代理程式的 Lambda 函數的 Python 程式碼,該代理程式直接從 Streamlit 應用程式呼叫。code/lambdas/update-lambda
資料夾 – Lambda 函數的 Python 程式碼,會在透過 AWS CDK 部署 AWS 資源後更新或刪除資源。code/layers/boto3_layer
資料夾 – AWS CDK 堆疊,可建立在所有 Lambda 函數之間共用的 Boto3 層。code/layers/opensearch_layer
資料夾 – 建立 OpenSearch Serverless layer 的 AWS CDK 堆疊,會安裝所有相依性來建立索引。code/streamlit-app
資料夾 – 在 Amazon ECS 中作為容器映像執行的 Python 程式碼code/code_stack.py
– 建立 AWS 資源的 AWS CDK 建構 Python 檔案。app.py
– 在目標 AWS 帳戶中部署 AWS 資源的 AWS CDK 堆疊 Python 檔案。requirements.txt
– 必須為 AWS CDK 安裝的所有 Python 相依性清單。cdk.json
– 輸入檔案,提供建立資源所需的值。此外,您可以在context/config
欄位中相應地自訂解決方案。如需自訂的詳細資訊,請參閱其他資訊一節。
最佳實務
此處提供的程式碼範例僅用於proof-of-concept(PoC) 或試驗目的。如果您想要將程式碼帶入生產環境,請務必使用下列最佳實務:
啟用 VPC 流程日誌
設定 Lambda 函數的監控和提醒。如需詳細資訊,請參閱監控和故障診斷 Lambda 函數。如需最佳實務,請參閱使用 AWS Lambda 函數的最佳實務。
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
匯出帳戶和區域的變數。 | 若要使用環境變數提供 AWS CDK 的 AWS 登入資料,請執行下列命令。
| AWS DevOps,DevOps 工程師 |
設定名為 的 AWS CLI 設定檔。 | 若要為帳戶設定名為 AWS CLI 的設定檔,請遵循組態和登入資料檔案設定中的指示。 | AWS DevOps,DevOps 工程師 |
任務 | 描述 | 所需的技能 |
---|---|---|
將儲存庫複製到本機工作站。 | 若要複製儲存庫,請在終端機中執行下列命令。
| DevOps 工程師,AWS DevOps |
設定 Python 虛擬環境。 | 若要設定 Python 虛擬環境,請執行下列命令。
若要設定所需的相依性,請執行下列命令。
| DevOps 工程師,AWS DevOps |
設定 AWS CDK 環境。 | 若要將程式碼轉換為 AWS CloudFormation 範本,請執行命令 | AWS DevOps,DevOps 工程師 |
任務 | 描述 | 所需的技能 |
---|---|---|
在 帳戶中部署資源。 | 若要使用 AWS CDK 在 AWS 帳戶中部署資源,請執行下列動作:
成功部署後,您可以使用 CloudFormation 主控台的輸出索引標籤上提供的 URL 來存取聊天式助理應用程式。 | DevOps 工程師,AWS DevOps |
任務 | 描述 | 所需的技能 |
---|---|---|
移除 AWS 資源。 | 測試解決方案後,若要清除資源,請執行 命令 | AWS DevOps,DevOps 工程師 |
相關資源
AWS 文件
Amazon Bedrock 資源:
AWS CDK 資源:
其他 AWS 資源
其他資源
其他資訊
使用您自己的資料自訂聊天式助理
若要整合自訂資料以部署解決方案,請遵循這些結構化準則。這些步驟旨在確保無縫且高效的整合程序,讓您能夠使用自訂資料有效地部署解決方案。
用於知識庫資料整合
資料準備
找到
assets/knowledgebase_data_source/
目錄。將資料集放在此資料夾中。
組態調整
開啟
cdk.json
檔案。導覽至
context/configure/paths/knowledgebase_file_name
欄位,然後相應地更新。導覽至
bedrock_instructions/knowledgebase_instruction
欄位,然後更新它,以準確反映新資料集的細微差別和內容。
用於結構資料整合
資料組織
在
assets/data_query_data_source/
目錄中,建立子目錄,例如tabular_data
。將您的結構化資料集 (可接受的格式包括 CSV、JSON、ORC 和 Parquet) 放入此新建立的子資料夾。
如果您要連線至現有的資料庫,請在
create_sql_engine()
中更新 函數code/lambda/action-lambda/build_query_engine.py
以連線至您的資料庫。
組態和程式碼更新
在
cdk.json
檔案中,更新context/configure/paths/athena_table_data_prefix
欄位以與新的資料路徑保持一致。透過整合與資料集對應的新text-to-SQL範例
code/lambda/action-lambda/dynamic_examples.csv
進行修訂。修訂
code/lambda/action-lambda/prompt_templates.py
以鏡像結構化資料集的屬性。在
cdk.json
檔案中,更新context/configure/bedrock_instructions/action_group_description
欄位以說明Action group
Lambda 函數的目的和功能。在
assets/agent_api_schema/artifacts_schema.json
檔案中,說明Action group
Lambda 函數的新功能。
一般更新
在 cdk.json
檔案中,在 context/configure/bedrock_instructions/agent_instruction
區段中,提供 Amazon Bedrock 代理程式預期功能和設計用途的完整描述,並考量新整合的資料。