本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 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账户
AWSCloud Development Kit (AWSCDK),已安装并启动到或区域
us-east-1
us-west-2
AWSAWSCDK工具包版本 2.114.1 或更高版本,已安装
在 Amazon Bedrock 中,允许访问 Claude 2、Claude 2.1、Claude Instant 和 Titan Embeddings G1 — 文本
限制
此解决方案部署到单个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)
目标架构
该图显示了在单个AWS区域内使用多种AWS服务的全面AWS云原生设置。基于聊天的助手的主要界面是托管在亚马逊集群上的 StreamlitInvocation
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 CDKcode/layers/boto3_layer
文件夹 — 用于创建所有 Lambda 函数共享的 Boto3 层的AWSCDK堆栈。code/layers/opensearch_layer
folder — 创建 OpenSearch 无服务器层的AWSCDK堆栈,该层安装所有依赖项以创建索引。code/streamlit-app
文件夹 — 在亚马逊中作为容器镜像运行的 Python 代码 ECScode/code_stack.py
— AWS CDK 构造用于创建AWS资源的 Python 文件。app.py
— 在目标AWS账户中部署AWS资源的AWSCDK堆栈 Python 文件。requirements.txt
— 必须为安装的所有 Python 依赖项的列表AWSCDK。cdk.json
— 用于提供创建资源所需的值的输入文件。此外,在context/config
字段中,您可以相应地自定义解决方案。有关自定义的更多信息,请参阅 “其他信息” 部分。
最佳实践
此处提供的代码示例仅用于 proof-of-concept (PoC) 或试运行目的。如果您想将代码投入生产,请务必使用以下最佳实践:
启用VPC流日志
为 Lambda 函数设置监控和警报。有关更多信息,请参阅 Lambda 函数监控和故障排除。有关最佳实践,请参阅使用 AWS Lambda 函数的最佳实践。
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
导出账户和地区的变量。 | 要使用环境变AWSCDK量为提供AWS凭证,请运行以下命令。
| AWS DevOps, DevOps 工程师 |
设置已AWSCLI命名的个人资料。 | 要为账户设置AWSCLI指定个人资料,请按照配置和凭据文件设置中的说明进行操作。 | AWS DevOps, DevOps 工程师 |
任务 | 描述 | 所需技能 |
---|---|---|
将存储库克隆到您的本地工作站。 | 要克隆存储库,请在终端中运行以下命令。
| DevOps 工程师,AWS DevOps |
设置 Python 虚拟环境。 | 要设置 Python 虚拟环境,请运行以下命令。
要设置所需的依赖关系,请运行以下命令。
| DevOps 工程师,AWS DevOps |
设置AWSCDK环境。 | 要将代码转换为AWS CloudFormation 模板,请运行命令 | AWS DevOps, DevOps 工程师 |
任务 | 描述 | 所需技能 |
---|---|---|
在账户中部署资源。 | 要使用在AWS账户中部署资源 AWSCDK,请执行以下操作:
成功部署后,您可以使用控制台输出选项卡上URL提供的访问基于聊天的助手应用程序。 CloudFormation | DevOps 工程师,AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
移除AWS资源。 | 测试解决方案后,要清理资源,请运行命令 | AWS DevOps, DevOps 工程师 |
相关资源
AWS 文档
Amazon Bedrock 资源:
AWSCDK资源:
其他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、JSONORC、和 Parquet)放入这个新创建的子文件夹。
如果您要连接到现有数据库,请更新
create_sql_engine()
中的函数code/lambda/action-lambda/build_query_engine.py
以连接到您的数据库。
配置和代码更新
在
cdk.json
文件中,更新context/configure/paths/athena_table_data_prefix
字段以使其与新的数据路径保持一致。code/lambda/action-lambda/dynamic_examples.csv
通过加入与您的数据集对应的新 text-to-SQL示例进行修改。修改
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
文件中,解释您的 LambdAction group
a 函数的新功能。
一般更新
在cdk.json
文件中,考虑到新整合的数据,在该context/configure/bedrock_instructions/agent_instruction
部分中,全面描述了Amazon Bedrock代理的预期功能和设计目的。