使用 Amazon Aurora 和 Amazon Bedrock 知识库构建生成式 AI 应用程序
- 16
使用 Amazon Aurora 和 Amazon Bedrock 构建生成式 AI 应用
关键要点
在本文中,我们将探讨如何将 Amazon Aurora 和 Amazon Bedrock 结合使用,构建生成式 AI 应用程序。通过检索增强生成RAG技术,您可以利用存储在 Amazon S3 或 Amazon Aurora 数据库中的私有数据为客户提供相关的答案。Amazon Bedrock Knowledge Bases 是一项完全托管的 RAG 功能,可帮助您自定义基础模型的响应,极大地简化了工作流程。
Amazon Bedrock 是构建和扩展生成式 AI 应用程序的最新工具,它使用基础模型FMs来回答各种主题的问题。然而,当需要使用基础模型回答关于存储在 Amazon S3 桶或 Amazon Aurora PostgreSQL 兼容版 数据库的私有数据问题时,您需要使用称为 检索增强生成RAG的技术,以便为客户提供相关答案。
Amazon Bedrock Knowledge Bases 是一种完全托管的 RAG 功能,允许您用上下文和公司相关数据自定义基础模型的响应。Amazon Bedrock Knowledge Bases 自动化了端到端的 RAG 工作流,包括数据摄取、检索、提示增强和引用,免去了您编写自定义代码来集成数据源和管理查询的需求。
将 Amazon Bedrock 与 Amazon Aurora PostgreSQL 集成,使您可以利用加速 RAG 的向量相似性搜索的特性。与其他索引方法相比,Aurora 通过 pgvector 的 HNSW 索引提供的查询速度快20倍。此外,Amazon Aurora 优化读取 使得在超出常规实例内存的工作负载中,使用 pgvector 的向量搜索性能提升高达九倍。
在这篇文章中,我们将学习如何利用 Amazon Aurora 构建生成式 AI 应用程序,实现 RAG。我们将详细介绍如何设置 Aurora 集群,并将其作为 Amazon Bedrock 的知识库,以及如何使用 Amazon Aurora 机器学习 扩展通过简单的 SQL 命令生成嵌入向量。
解决方案概述
以下示意图描绘了 RAG 工作流的示例。
RAG 工作流分为两部分。第一部分是将非结构化数据如文本、图像和视频转换为嵌入向量,并存储在向量数据库中步骤13。嵌入是您可以在相似性搜索中使用的数值表示,用于查找与查询最相关的内容。第二部分是请求本身。请求被转换为嵌入,并用于查询向量数据库,以查找用来增强提示的内容步骤45。查询的输出被发送到基础模型,基础模型随后将响应发送给用户步骤67。构建一个使用 RAG 的生成式 AI 应用程序需要协调这些工作流程,这可能需要超出应用程序逻辑的额外工作。
最近,AWS 宣布了 Amazon Bedrock Knowledge Bases 的普遍可用性。通过 Amazon Bedrock Knowledge Bases,您可以为基础模型和代理提供上下文信息,以使 RAG 提供更相关、准确和定制的响应。您可以将知识库与 Amazon Bedrock 代理 一起使用,以协调多步骤任务并促进提示工程。
在接下来的部分中,我们将演示如何将 Aurora 设置为 Amazon Bedrock 的知识库,同时还将展示如何使用 Aurora 机器学习ML通过 SQL 命令生成嵌入向量。
前提条件
本文假设您熟悉使用 AWS 管理控制台。在本示例中,您需要在您的 AWS 账户中启用以下资源和服务:
资源/服务说明Aurora PostgreSQL 集群启用 Aurora ML启用 RDS 数据 API用于访问 Aurora 集群Amazon S3存储数据AWS Secrets Manager存储凭据AWS 身份与访问管理 (IAM)权限管理Amazon Bedrock可能需要申请使用特定的基础模型将 Aurora 设置为 Amazon Bedrock 的知识库
创建 Amazon Bedrock 知识库的第一步是拥有可以用来增强基础模型的内容。在这个示例中,我们使用的是 PostgreSQL 16 手册 的 PDF 版本。编写时,PostgreSQL 16 是新发布的版本,尚未用于公共数据上的基础模型训练。RAG 中使用的数据集通常具有更多的数据,但我们选择保持示例的简单性。
配置 S3 桶
要开始设置 Amazon Bedrock 的知识库,您需要创建 S3 桶。确保这个桶是私有的。这个示例使用名为 bedrockkbdemoaurora 的桶。在创建桶后,将 PostgreSQL 16 手册上传到该桶。以下截图显示了上传完成时的状态。
配置 Aurora PostgreSQL 集群
接下来,创建一个 Aurora PostgreSQL 集群。详细说明请参考 将 Aurora PostgreSQL 用作 Amazon Bedrock 的知识库。我们将着重介绍一些在本示例中使用的特定配置选项:
在 Aurora 控制台创建新的集群。在 引擎选项 中选择 AuroraPostgreSQL 兼容。在 引擎版本 中选择您的引擎版本。我们为本例选择了 PostgreSQL 155;我们建议使用 155 或更高版本,以便可以使用最新版本的开源 pgvector 扩展。
在 配置选项 中选择 Aurora 标准 或 Aurora I/O 优化。我们选择了 Aurora I/O 优化,该选项提供了可预测的 I/O 强度应用程序的更好性能与定价。
pixiv手机版梯子在 DB 实例类别 中选择你的实例类别。我们选择使用 Amazon Aurora Serverless v2,该服务会根据应用工作负载自动缩放计算,因此只需支付使用的容量。
启用 RDS 数据 API,该 API 用于 Amazon Bedrock 访问您的 Aurora 集群。
创建您的 Aurora 集群。
当 Aurora 集群正在配置时,转到 Aurora 控制台的集群页面,选择 配置 选项卡。记录集群的 Amazon 资源名称ARN,以便稍后使用。您将需要 ARN 来配置 Amazon Bedrock 的知识库。
Aurora PostgreSQL 集群的部署大约需要 10 分钟。集群部署完成后,您需要运行一系列 SQL 命令以准备集群作为知识库。
以管理员用户例如,postgres或具有 rdssuperuser 特权的用户身份登录 Aurora 集群,并运行以下代码。请记住为 bedrockuser 创建的密码,因为您在配置 Secrets Manager 中的秘密时需要它。还要注意表名和列名,因为它们将在 Amazon Bedrock 控制台的知识库工作流中使用。sqlCREATE EXTENSION IF NOT EXISTS vectorCREATE SCHEMA bedrockintegrationCREATE ROLE bedrockuser LOGIN 输入并记住该用户的密码password bedrockuserGRANT ALL ON SCHEMA bedrockintegration TO bedrockuserSET SESSION AUTHORIZATION bedrockuserCREATE TABLE bedrockintegrationbedrockkb ( id uuid PRIMARY KEY embedding vector(1536) chunks text metadata json)CREATE INDEX ON bedrockintegrationbedrockkb USING hnsw (embedding vectorcosineops)
现在,Aurora 集群已设置为用作 Amazon Bedrock 的知识库。接下来,我们将在 Secrets Manager 中创建一个机密,以便 Amazon Bedrock 连接到该集群。
在 Secrets Manager 中创建秘密
Secrets Manager 允许您存储 Aurora 凭据,以便安全地传输至应用程序。请完成以下步骤以创建秘密:
在 Secrets Manager 控制台中,创建一个新秘密。对于 秘密类型,选择 Amazon RDS 数据库凭据。在 凭据 下,输入您的用户名称本示例中我们使用 bedrockuser和该角色的密码。在 数据库 部分,选择您用作知识库的集群。选择 下一步。
在 秘密名称 中,为您的秘密输入一个名称。
选择 下一步。
完成创建秘密并复制秘密 ARN。
您将需要该秘密 ARN 来创建知识库。
现在,我们准备将此 Aurora 集群用作 Amazon Bedrock 的知识库。
为 Amazon Bedrock 创建知识库
现在我们可以将我们的集群用作知识库。请完成以下步骤:
在 Amazon Bedrock 控制台中,在导航窗格中选择 知识库 下的 管理。选择 创建知识库。在 知识库名称 中输入名称。对于 运行时角色,选择 创建并使用新服务角色,并输入服务角色名称。选择 下一步。
在 选择 S3 中的存档 中,选择用作数据源的 S3 桶,然后选择 选择。
此示例中我们选择了之前上传 PostgreSQL 16 手册的 S3 桶。
在 嵌入模型 中,选择您的模型在此示例中,我们使用 Amazon Titan Embeddings G1 Text。在 向量数据库 中,选择 选择您创建的向量存储,然后选择 Amazon Aurora。
提供以下附加信息注意我们在本示例中使用的示例:
在 Amazon Aurora DB 集群 ARN 中,输入您在创建 Aurora 集群时保存的 ARN。在 数据库名称 中,输入 postgres。在 表名称 中,输入 bedrockintegrationbedrockkb。在 秘密 ARN 中,输入您在创建 bedrockuser 的秘密时保存的 ARN。在 向量字段 中,输入 embedding。在 文本字段 中,输入 chunks。在 Bedrock 管理的元数据字段 中,输入 metadata。在 主键 中,输入 id。选择 下一步。
审查摘要页面,然后选择 同步。
这将开始将存储在 S3 桶中的非结构化数据转换为嵌入,并将其存储在您的 Aurora 集群中。

同步操作可能需要几分钟到几个小时才能完成,具体取决于您 S3 桶中存储的数据集大小。在同步操作过程中,Amazon Bedrock 将下载 S3 桶中的文档,将其拆分为块本示例中我们选择“默认”策略,生成向量嵌入并将其存储在 Aurora 集群中。当初始同步完成时,您会看到数据源显示为 准备就绪。
现在,您可以将知识库用作 Amazon Bedrock 代理中的一部分。我们可以通过测试使用这个知识库。例如,我们选择 PostgreSQL 16 手册作为我们的数据集。这使我们可以查看 RAG 是如何发挥作用的,因为基础模型可能尚未具备 PostgreSQL 16 所有功能的信息。
在以下示例中,我们使用 Amazon Bedrock 的 测试知识库 功能,选择 Anthropic Claude 21 模型,并询问它关于 PostgreSQL 16 特性的一个问题特别是关于 pgstatio 视图。以下截图显示了我们的答案。
使用提供的问题,Amazon Bedrock 查询我们的 Aurora 集群以获取回答该问题所需的额外上下文。我们的知识库包含有关新 pgstatio 特性如何工作的 information,能够通过 Anthropic Claude 提供增强的答案。测试工具还引用了用于提供响应的块,以便于来源归属。
现在我们已经了解了如何使用 Amazon Bedrock Knowledge Bases