使用 Amazon Bedrock 代理和知识库开发基于聊天的全自动助手 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon Bedrock 代理和知识库开发基于聊天的全自动助手

由乔俊东 ()、Kara Yang (AWS)、Kiowa Jackson (AWS)、Noah Hamilton (AWS)、Praveen Kumar Jeyarajan (AWS) 和曹帅创作 () AWS AWS

摘要

许多组织在创建能够协调各种数据源以提供全面答案的基于聊天的助手时面临挑战。这种模式为开发基于聊天的助手提供了一种解决方案,该助手能够回答来自文档和数据库的查询,并且部署简单。

从 A mazon Bedrock 开始,这项完全托管的生成式人工智能 (AI) 服务提供了各种高级基础模型 (FMs)。这有助于高效创建生成式 AI 应用程序,重点关注隐私和安全。在文档检索的背景下,检索增强生成 (RAG) 是一项关键功能。它使用知识库使用来自外部来源的上下文相关信息来扩充调频提示。A mazon OpenSearch Serverless 索引充当 Amazon Bedrock 知识库背后的矢量数据库。通过仔细的及时工程来增强这种集成,以最大限度地减少不准确之处,并确保答复以事实文档为基础。对于数据库查询,Amazon Bedrock 将文本查询转换为包含特定参数的结构化SQL查询。FMs这样可以从由 AWSG lue 数据库管理的数据库中精确检索数据。这些@@ 查询使用亚马逊 A thena。

要处理更复杂的查询,要获得全面的答案,就需要来自文档和数据库的信息。Amazon Bedrock 代理是一项生成式 AI 功能,可帮助您构建能够理解复杂任务的自主代理,并将其分解为更简单的任务进行编排。在 Amazon Bedrock 自主代理的推动下,将从简化任务中检索到的见解相结合,增强了信息的合成,从而得出了更全面和详尽的答案。此模式演示了如何使用 Amazon Bedrock 以及自动解决方案中的相关生成人工智能服务和功能来构建基于聊天的助手。

先决条件和限制

先决条件

限制

  • 此解决方案部署到单个AWS账户。

  • 此解决方案只能部署在支持 Amazon Bedrock 和 Amazon OpenSearch Serverless 的AWS区域。有关更多信息,请参阅 Amazon B edrock 和 Amazon OpenSearch Serverless 的文档。

产品版本

  • llama-Index 版本 0.10.6 或更高版本

  • Sqlalchemy 版本 2.0.23 或更高版本

  • openSearch-py 版本 2.4.2 或更高版本

  • requests_aws4Auth 版本 1.2.3 或更高版本

  • AWSSDK适用于 Python (Boto3) 版本 1.34.57 或更高版本

架构

目标技术堆栈

AWSCloud Development Kit (AWSCDK) 是一个开源软件开发框架,用于在代码中定义云基础架构并通过它进行配置AWS CloudFormation。此模式中使用的AWSCDK堆栈部署以下AWS资源: 

  • AWS密钥管理服务 (AWSKMS)

  • Amazon Simple Storage Service(Amazon S3)

  • AWSGlue 数据目录,用于 AWS Glue 数据库组件

  • AWS Lambda

  • AWSIdentity and Access Management (IAM)

  • Amazon OpenSearch 无服务器

  • 亚马逊弹性容器注册表(亚马逊ECR) 

  • 亚马逊弹性容器服务(亚马逊ECS)

  • AWS Fargate

  • 亚马逊 Virtual Private Cloud(亚马逊VPC)

  • 应用程序负载均衡器

目标架构

使用 Amazon Bedrock 知识库和代理的架构图

该图显示了在单个AWS区域内使用多种AWS服务的全面AWS云原生设置。基于聊天的助手的主要界面是托管在亚马逊集群上的 Streamlit 应用程序。ECSApp lication Load Balancer 管理可访问性。通过此接口进行的查询会激活 Invocation Lambda 函数,然后该函数与 Amazon Bedrock 的代理进行交互。该代理通过查阅 Amazon Bedrock 的知识库或调用 Lambda 函数Agent executor来回应用户的询问。此函数按照预定义的API架构触发一组与代理关联的操作。Amazon Bedrock 的知识库使用 OpenSearch 无服务器索引作为其矢量数据库的基础。此外,该Agent executor函数还会生成通过 Amazon Athena 对 AWS Glue 数据库执行的SQL查询。

工具

AWS 服务

  • Amazon Athena 是一项交互式查询服务,可帮助您使用标准直接分析亚马逊简单存储服务 (Amazon S3) 中的数据。SQL

  • Amazon Bedrock 是一项完全托管的服务,可通过统一的方式提供来自领先的人工智能初创公司和亚马逊的高性能基础模型 (FMs) 供您使用。API

  • AWSCloud Development Kit (AWSCDK) 是一个软件开发框架,可帮助您在代码中定义和配置AWS云基础架构。

  • AWSCommand Line Interface (AWSCLI) 是一个开源工具,可帮助您通过命令行外壳中的命令与AWS服务进行交互。

  • Amazon 弹性容器服务 (AmazonECS) 是一项快速且可扩展的容器管理服务,可帮助您在集群上运行、停止和管理容器。

  • Elastic Load Balancing (ELB) 将传入的应用程序或网络流量分布到多个目标。例如,您可以跨亚马逊弹性计算云 (AmazonEC2) 实例、容器以及一个或多个可用区中的 IP 地址分配流量。

  • AWSGlu e 是一项完全托管的提取、转换和加载 (ETL) 服务。它可以帮助您在数据存储和数据流之间对数据进行可靠地分类、清理、扩充和移动。此模式使用 AWS Glue 爬虫和 AWS Glue 数据目录表。

  • AWSLambda 是一项计算服务,可帮助您运行代码,而无需预置或管理服务器。它仅在需要时运行您的代码,并且能自动扩缩,因此您只需为使用的计算时间付费。

  • Amazon OpenSearch Server less 是亚马逊 OpenSearch 服务的按需无服务器配置。在这种模式下, OpenSearch 无服务器索引充当 Amazon Bedrock 知识库的矢量数据库。

  • Amazon Simple Storage Service (Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。

其他工具

  • Streamlit 是一个用于创建数据应用程序的开源 Python 框架。

代码存储库

此模式的代码可在 GitHub genai-bedrock-agent-chatbot存储库中找到。代码存储库包含以下文件和文件夹:

  • assets文件夹-静态资产,例如架构图和公共数据集。

  • code/lambdas/action-lambda文件夹 — 用作 Amazon Bedrock 代理操作的 Lambda 函数的 Python 代码。

  • code/lambdas/create-index-lambda文件夹 — 用于创建 OpenSearch 无服务器索引的 Lambda 函数的 Python 代码。

  • code/lambdas/invoke-lambda文件夹 — 调用 Amazon Bedrock 代理的 Lambda 函数的 Python 代码,该代理直接从 Streamlit 应用程序调用。

  • code/lambdas/update-lambda文件夹 — Lambda 函数的 Python 代码,用于在通过部署资源后更新或删除AWS资源。AWS CDK

  • code/layers/boto3_layer文件夹 — 用于创建所有 Lambda 函数共享的 Boto3 层的AWSCDK堆栈。

  • code/layers/opensearch_layerfolder — 创建 OpenSearch 无服务器层的AWSCDK堆栈,该层安装所有依赖项以创建索引。

  • code/streamlit-app文件夹 — 在亚马逊中作为容器镜像运行的 Python 代码 ECS

  • code/code_stack.py— AWS CDK 构造用于创建AWS资源的 Python 文件。

  • app.py— 在目标AWS账户中部署AWS资源的AWSCDK堆栈 Python 文件。

  • requirements.txt— 必须为安装的所有 Python 依赖项的列表AWSCDK。

  • cdk.json— 用于提供创建资源所需的值的输入文件。此外,在context/config字段中,您可以相应地自定义解决方案。有关自定义的更多信息,请参阅 “其他信息” 部分。

最佳实践

操作说明

任务描述所需技能

导出账户和地区的变量。

要使用环境变AWSCDK量为提供AWS凭证,请运行以下命令。

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

设置已AWSCLI命名的个人资料。

要为账户设置AWSCLI指定个人资料,请按照配置和凭据文件设置中的说明进行操作。

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

设置AWSCDK环境。

要将代码转换为AWS CloudFormation 模板,请运行命令cdk synth

AWS DevOps, DevOps 工程师
任务描述所需技能

在账户中部署资源。

要使用在AWS账户中部署资源 AWSCDK,请执行以下操作:

  1. 在克隆存储库的根目录中,在cdk.json文件中,提供日志参数的输入。示例值为INFODEBUGWARN、和ERROR

    这些值定义了 Lambda 函数和 Streamlit 应用程序的日志级别消息。

  2. 克隆存储库根目录中的cdk.json文件包含用于部署的AWS CloudFormation 堆栈名称。默认堆栈名称为chatbot-stack。默认 Amazon Bedrock 代理名称为ChatbotBedrockAgent,默认 Amazon Bedrock 代理别名为。Chatbot_Agent

  3. 要部署资源,请运行命令 cdk deploy

    cdk deploy命令使用第 3 层结构创建多个 Lambda 函数,用于将文档和CSV数据集文件复制到 S3 存储桶。它还为亚马逊 Bedrock 代理部署了 Amazon Bedrock 代理、知识库Action group和 Lambda 函数。

  4. 登录到AWS管理控制台,然后在上打开 CloudFormation 控制台https://console.aws.amazon.com/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、JSONORC、和 Parquet)放入这个新创建的子文件夹。

  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通过加入与您的数据集对应的新 text-to-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文件中,解释您的 Lambd Action group a 函数的新功能。

一般更新

cdk.json文件中,考虑到新整合的数据,在该context/configure/bedrock_instructions/agent_instruction部分中,全面描述了Amazon Bedrock代理的预期功能和设计目的。