本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Terraform 和 Amazon AWS Bedrock 部署 RAG 用例
Martin Maritsch、Nicolas Jacob Baer、Olivier Brique、Julian Ferdinand Grueber、Alice Morano 和 Nicola D Orazio,Amazon Web Services
Summary
AWS 提供了各种选项来构建支持检索增强生成 (RAG)
用户将文件手动上传到 Amazon Simple Storage Service(Amazon S3)存储桶,例如 Microsoft Excel 文件或 PDF 文档。(有关支持的文件类型的更多信息,请参阅非结构化
文档。) 文件内容会被提取并嵌入到基于无服务器 Aurora PostgreSQL 兼容版的知识数据库中,且该数据库支持近乎实时地将文档摄取到向量存储中。这种方法使得 RAG 模型能够访问和检索相关信息,以适用于对低延迟有严格要求的使用案例。
当用户使用文本生成模型时,可通过从先前上传的文件中增强相关内容的检索,进而加强交互。
此模式使用 Amazon Titan 文本嵌入 v2 作为嵌入模型,以及使用 Anthropic Claude 3 Sonnet
先决条件和限制
先决条件
活跃 AWS 账户的.
AWS Command Line Interface (AWS CLI) 已安装并配置为你的 AWS 账户。有关安装说明,请参阅 AWS CLI 文档 AWS CLI中的安装或更新到最新版本的。要查看您的 AWS 凭证和对账户的访问权限,请参阅 AWS CLI 文档中的配置和凭证文件设置。
在您 AWS 账户的 Amazon Bedrock 控制台中为所需的大型语言模型 (LLMs) 启用的模型访问权限。此模式需要以下内容 LLMs:
amazon.titan-embed-text-v2:0anthropic.claude-3-sonnet-20240229-v1:0
限制
此示例架构不包括使用向量数据库进行编程问答的接口。如果您的用例需要 API,可以考虑添加带有运行检索和问答任务 AWS Lambda 功能的 Amazon API Gat eway。
此示例架构不包括对已部署基础设施的监控功能。如果您的使用案例需要监控,请考虑添加 AWS 监控服务。
如果您在短时间内将大量文档上传到 Amazon S3 存储桶,则 Lambda 函数可能会遇到速率限制。作为解决方案,您可以将 Lambda 函数与 Amazon Simple Queue Service(Amazon SQS)队列分开,而在此队列中,您可以控制 Lambda 调用的速率。
有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性,请参阅按区域划分的AWS 服务
。有关特定端点,请参阅服务端点和配额,然后选择相应服务的链接。
产品版本
架构
下图显示了此模式的工作流和架构组件。

该图阐明了以下流程:
在 Amazon S3 存储桶
bedrock-rag-template-<account_id>中创建对象时,Amazon S3 通知会调用 Lambda 函数data-ingestion-processor。Lambda 函数
data-ingestion-processor基于存储在 Amazon Elastic Container Registry(Amazon ECR)存储库bedrock-rag-template中的 Docker 映像。该函数使用 LangChain S3 FileLoader
将文件作为LangChain 文档 读取。然后,根据Amazon Titan文本嵌入V2嵌入模型的最大令牌大小,给定a CHUNK_SIZE和a对每个文档进行分LangChain RecursiveCharacterTextSplitter块。 CHUNK_OVERLAP接下来,Lambda 函数会在 Amazon Bedrock 上调用嵌入模型,将分块嵌入到数值向量表示中。最后,这些向量会存储在 Aurora PostgreSQL 数据库中。要访问数据库,Lambda 函数首先从中检索用户名和密码。 AWS Secrets Manager在 Amazon SageMaker AI 笔记本实例上
aws-sample-bedrock-rag-template,用户可以编写问题提示。该代码在 Amazon Bedrock 上调用 Claude 3,并将知识库信息添加到提示的上下文中。因此,Claude 3 使用文档中的信息提供回复。
此模式的联网和安全方法如下:
Lambda 函数
data-ingestion-processor位于虚拟私有云(VPC)的私有子网中。由于 Lambda 函数具有安全组,因此不允许向公有互联网发送流量。因此,流向 Amazon S3 和 Amazon Bedrock 的流量仅可通过 VPC 端点路由。因此,流量不会遍历公有互联网,从而降低延迟,并在联网层面额外增加一层安全层。只要适用,就会使用带别名的 AWS Key Management Service (AWS KMS) 密钥对所有资源和数据进行加密
aws-sample/bedrock-rag-template。
自动化和扩展
此模式使用 Terraform 将基础设施从代码库部署到 AWS 账户。
工具
AWS 服务
Amazon Aurora PostgreSQL 兼容版是一个完全托管的、与 ACID 兼容的关系数据库引擎,可帮助您建立、运行和扩展 PostgreSQL 部署。在此模式中,Aurora PostgreSQL 兼容版使用 pgvector 插件作为向量数据库。
Amazon Bedrock 是一项完全托管的服务,它通过统一的 API 提供来自领先的人工智能初创公司和亚马逊的高性能基础模型 (FMs) 供您使用。
AWS Command Line Interface (AWS CLI) 是一个开源工具,可帮助您 AWS 服务 通过命令行 shell 中的命令进行交互。
Amazon Elastic Container Registry(Amazon ECR)是一项安全、可扩展且可靠的托管容器映像注册表服务。在此模式下,Amazon ECR 会托管
data-ingestion-processorLambda 函数的 Docker 映像。AWS Identity and Access Management (IAM) 通过控制谁经过身份验证并有权使用 AWS 资源,从而帮助您安全地管理对资源的访问权限。
AWS Key Management Service (AWS KMS)可以创建和控制加密密钥,从而帮助保护您的数据。
AWS Lambda 是一项计算服务,可帮助您运行代码,无需预调配或管理服务器。它只在需要时运行您的代码,并自动进行扩展,因此您只需为使用的计算时间付费。在此模式中,Lambda 会将数据摄取到向量存储中。
Amazon SageMaker AI 是一项托管机器学习 (ML) 服务,可帮助您构建和训练机器学习模型,然后将其部署到生产就绪的托管环境中。
AWS Secrets Manager 可帮助您将代码中的硬编码凭证(包括密码)替换为对 Secrets Manager 进行的 API 调用,以便以编程方式检索此密钥。
Amazon Simple Storage Service(Amazon S3)是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。
Amazon Virtual Private Cloud(亚马逊 VPC)可帮助您将 AWS 资源启动到您定义的虚拟网络中。该虚拟网络类似于您在数据中心中运行的传统网络,并具有使用 AWS的可扩展基础设施的优势。VPC 包括用于控制流量的子网和路由表。
其他工具
Docker
是一组平台即服务(PaaS)产品,它们利用操作系统级的虚拟化技术在容器中提供软件。 HashiCorp Terraform
是一款基础设施即代码(IaC)工具,可帮助您使用代码来预调配和管理云基础设施和资源。 Poetry
是 Python 中用于管理和打包依赖项的工具。 Python
是通用的计算机编程语言。
代码存储库
此模式的代码可在-ama GitHub terraform-rag-template-usingzon-
最佳实践
尽管此代码示例可以部署到任何位置 AWS 区域,但我们建议您使用美国东部(弗吉尼亚北部)
us-east-1或美国西部(加利福尼亚北部)us-west-1。该建议基于此模式发布时 Amazon Bedrock 中基础模型和嵌入模型的可用性。有关 Amazon Bedrock 基础模型支持的 up-to-date列表 AWS 区域,请参阅 Amazon Bedrock 文档 AWS 区域中的模型支持。有关将此代码示例部署到其他区域的信息,请参阅其他信息。此模式仅提供 proof-of-concept(PoC)或试点演示。如果您想将代码部署到生产环境,请务必使用以下最佳实践:
启用 Amazon S3 服务器访问日志记录。
为 Lambda 函数设置监控和提醒。
如果您的使用案例需要 API,则可以考虑添加 Amazon API Gateway,其中包含可运行检索和问答任务的 Lambda 函数。
操作说明
| Task | 说明 | 所需技能 |
|---|---|---|
克隆存储库。 | 要克隆此模式提供的 GitHub 存储库,请使用以下命令:
| AWS DevOps |
配置变量。 | 要配置此模式的参数,请执行以下操作:
| AWS DevOps |
部署解决方案。 | 要部署该解决方案,请执行以下操作:
基础设施部署在 VPC 内配置一个 SageMaker AI 实例,并具有访问 Aurora PostgreSQL 数据库的权限。 | AWS DevOps |
| Task | 说明 | 所需技能 |
|---|---|---|
运行演示。 | 成功部署之前的基础设施后,使用以下步骤在 Jupyter Notebook 中运行演示:
Jupyter Notebook 将引导您完成以下过程:
| 常规 AWS |
| Task | 说明 | 所需技能 |
|---|---|---|
清理基础设施。 | 要移除所有创建的不再需要的资源,请使用以下命令:
| AWS DevOps |
相关资源
AWS resources
其他资源
附加信息
实施向量数据库
此模式使用 Aurora PostgreSQL 兼容版来为 RAG 实施向量数据库。作为 Aurora PostgreSQL 的替代品 AWS ,为 RAG 提供其他功能和服务,例如亚马逊 Bedrock 知识库和亚马逊服务。 OpenSearch 您可以选择最适合您特定要求的解决方案:
Amazon Ser OpenSearch v ice 提供分布式搜索和分析引擎,可用于存储和查询大量数据。
Amazon Bedrock 知识库旨在构建和部署知识库,并作为额外抽象来简化 RAG 的摄取和检索过程。亚马逊 Bedrock 知识库可以与 Aurora PostgreSQL 和亚马逊服务一起使用。 OpenSearch
部署到其他 AWS 区域
如架构中所述,我们建议您使用区域美国东部(弗吉尼亚州北部)– us-east-1 或美国西部(北加利福尼亚)– us-west-1 来部署此代码示例。但是,有两种潜在方法可以将此代码示例部署到 us-east-1 和 us-west-1 之外的其他区域。您可以在 commons.tfvars 文件中配置部署区域。对于跨区域基础模型访问,请考虑以下选项:
遍历公有互联网 – 如果流量可以遍历公有互联网,请将互联网网关添加到 VPC。然后,调整分配给 Lambda 函数
data-ingestion-processor和 SageMaker AI 笔记本实例的安全组,以允许公共互联网的出站流量。未遍历公共互联网 – 要将此示例部署到除
us-east-1或us-west-1之外的任何区域,请执行以下操作: