Amazon Bedrock是使用基础模型(FM)构建和扩展生成式 AI 应用程序的极简单方式。基础模型经过了大量数据训练,可用于回答各种主题的问题。然而,如果您想使用基础模型回答有关存储在Amazon Simple Storage Service(Amazon S3)存储桶或Amazon Aurora PostgreSQL 兼容版数据库中私有数据的问题,您需要使用一种叫作检索增强生成 (RAG)的技术,为您的客户提供相关答复。
Amazon Bedrock 知识库是一种全托管的 RAG 功能,允许您使用上下文相关的公司数据定制基础模型响应。Amazon Bedrock 知识库自动化了端到端的 RAG 工作流程,包括摄取、检索、提示增强和引用,从而无需您编写自定义代码来集成数据源和管理查询。
将 Amazon Bedrock 与 Amazon Aurora PostgreSQL 集成,可利用有助于加速 RAG 向量相似性搜索性能的功能。Aurora 通过 HNSW 索引,比其他索引方法快 20 倍。此外,Amazon Aurora 优化读取可以将 pgvector 的向量搜索性能提高 9 倍,适用于超出常规实例内存的工作负载。这是在 Aurora 的性能和可用性功能之上,让您可以在全球范围内高效且划算地运行 Aurora,包括 Aurora Serverless 和Amazon Aurora Global Database。
本文探讨如何使用 Amazon Aurora 构建使用 RAG 的生成式 AI 应用程序。我们将逐步介绍如何设置 Aurora 集群为 Amazon Bedrock 知识库。我们还将演示如何通过简单的 SQL 命令从Amazon Bedrock生成嵌入,使用Amazon Aurora Machine Learning扩展。
解决方案概述
下图演示了 RAG 工作流程的一个示例。
RAG 工作流程包含两个部分。第一部分是获取非结构化数据(如文本、图像和视频)、使用嵌入模型将其转换为嵌入(向量)、并将其存储在向量数据库中(步骤 1-3) 。嵌入是一种数值表示,可用于相似性搜索以找到与查询最相关的内容。工作流程的第二部分是请求本身。将请求转换为嵌入,并用于查询向量数据库以查找内容从而增强提示(步骤 4-5) 。查询的输出被发送到基础模型,然后基础模型将响应发送给用户(步骤 6-7) 。构建使用 RAG 的生成式 AI 应用程序需要协调此工作流程,当然这是构建应用程序逻辑之外的额外工作。
最近,亚马逊云科技宣布了Amazon Bedrock 知识库正式发布。使用 Amazon Bedrock 知识库,您可以为基础模型和代理提供公司私有数据源的上下文信息,以便 RAG 提供更相关、更准确和更个性化的响应。然后,您可以将知识库与Amazon Bedrock 代理一起使用,以协调多步骤任务和促进即时工程。更多信息请参阅Knowledge Bases now delivers fully managed RAG experience in Amazon Bedrock。

相关内容
扫码了解更多
在下面的章节中,我们将演示如何把 Aurora 设置为 Amazon Bedrock 的知识库。我们还将看到如何使用 Aurora Machine Learning(ML) ,通过 SQL 命令生成嵌入。
先决条件
本文假设您熟悉浏览Amazon Management Console。

Amazon Management Console
扫码了解更多
对于此示例,您还需要在亚马逊云科技账户中启用以下资源和服务:
-
启用Aurora ML的 Aurora PostgreSQL 集群
-
为 Aurora 集群启用RDS Data API
-
Amazon S3
-
Amazon Secrets Manager
-
Amazon Identity and Access Management (IAM)
将 Aurora 设置为
Amazon Bedrock 的知识库
创建 Amazon Bedrock 知识库的第一步是拥有可用于增强基础模型的内容。在此示例中,我们使用PostgreSQL 16 手册的 PDF 版本。在撰写本文时 PostgreSQL 16 是一个新版本,尚未用于公共数据的 FM 训练。RAG 中使用的数据集通常有更多数据,但我们选择一个简单示例。

PostgreSQL 16 手册
扫码了解更多
配置 S3 存储桶
要开始为 Amazon Bedrock 设置知识库,您需要创建一个S3 存储桶。请确保此存储桶是私有的。本示例使用名为bedrock-kb-demo-aurora的存储桶。创建存储桶后,将 PostgreSQL 16 手册上传到存储桶中。以下为上传完成后截图示例。
配置 Aurora PostgreSQL 集群
接下来,创建一个 Aurora PostgreSQL 集群。有关完整说明,请参阅将Aurora PostgreSQL 用作 Amazon Bedrock 的知识库。我们重点介绍本示例中使用的一些特定配置选项:

知识库相关内容
扫码了解更多
-
在 Aurora 控制台上创建一个新集群。
-
对于 Engine options ,选择 Aurora (PostgreSQL Compatible) 。
-
对于 Engine version ,选择您的引擎版本。
我们在此示例中选择了 PostgreSQL 15.5 ;我们建议使用 PostgreSQL 15.5 或更高版本,以便使用最新版本的开源 pgvector 扩展。
-
对于 Configuration options,选择 Aurora Standard 或 Aurora I/O Optimized 。
我们选择了Aurora I/O 优化,它为 I/O 密集型应用程序提供了改进的性能和可预测的定价。
-
对于 DB instance class ,选择您的实例类。
我们选择使用Amazon Aurora Serverless v2,它会根据应用程序工作负载自动调整您的计算,因此您只需根据已使用的容量付费。
-
启用 RDS Data API ,Amazon Bedrock 将使用它来访问您的 Aurora 集群。
-
创建您的 Aurora 集群。
-
当您的 Aurora 集群正在配置时,导航到 Aurora 控制台上的集群,并选择配置选项卡。
-
记下集群的 Amazon 资源名称(ARN) ,并保存以备后期使用。
需要 ARN 来配置 Amazon Bedrock 的知识库。
Aurora PostgreSQL 集群大约需要 10 分钟完成配置。集群配置完成后,您需要运行一系列 SQL 命令来准备您的集群作为知识库。
-
以管理员用户(例如postgres)或具有rds_superuser权限的用户身份登录到 Aurora 集群,并运行以下代码。请注意您为bedrock_user创建的密码,因为在稍后的配置 Secrets Manager 中的密钥时您将会需要它。还要注意表名和列名,因为它们将用于 Amazon Bedrock 控制台上的知识库工作流程。
CREATE EXTENSION IF NOT EXISTSvector;CREATE SCHEMA bedrock_integration;CREATE ROLE bedrock_user LOGIN;-- 输入并记下此用户的密码\password bedrock_userGRANT ALL ON SCHEMA bedrock_integration to bedrock_user;SET SESSION AUTHORIZATION bedrock_user;CREATE TABLE bedrock_integration.bedrock_kb (id uuid PRIMARY KEY,embeddingvector(1536),chunks text,metadata json);CREATE INDEX ON bedrock_integration.bedrock_kbUSINGhnsw(embedding vector_cosine_ops);
左右滑动查看完整示意
现在,Aurora 集群已设置为 Amazon Bedrock 的知识库。接下来,我们将在 Secrets Manager 中创建一个密钥,Amazon Bedrock 将使用它来连接集群。
在 Secrets Manager 中创建密钥
Secrets Manager 允许您存储 Aurora 凭据,以便可以安全地将它们传输到应用程序。完成以下步骤来创建密钥:
-
在 Secrets Manager 控制台上,创建一个新密钥。
-
对于 Secret type,选择 Credentials for Amazon RDS Database 。
-
在 Credentials 下,输入用户名(在本文中,我们使用 bedrock_user)和该角色的密码。
-
在 Database 部分,选择您用于知识库的集群。
-
选择 Next 。
-
关于 Secret name ,输入密钥的名称。
-
选择 Next 。
-
完成创建密钥并复制密钥 ARN 。
您需要密钥 ARN 来创建知识库。
准备就绪,我们将使用 Aurora 集群作为 Amazon Bedrock 的知识库。
为 Amazon Bedrock 创建知识库
现在我们可以将集群用作知识库。完成以下步骤:
1、在 Amazon Bedrock 控制台上,在导航窗格中选择 Orchestration 下的 Knowledge base 。
2、选择 Create knowledge base 。
3、对于 Knowledge base name ,输入一个名称。
4、对于 Runtime role ,选择 Create and use a new service role 并输入服务角色名称。
5、选择 Next 。
6、对于 Choose an archive in S3 ,选择要用作数据源的 S3 存储桶,然后选择 Choose 。
在本文中,我们使用之前上传的包含 PostgreSQL 16 手册的 S3 存储桶。
7、对于 Embeddings model ,选择您的模型(在本文中,我们使用Amazon Titan Embeddings G1 – Text)。
8、对于 Vector database ,选择 Choose a vector store you have created 并选择 Amazon Aurora 。
9、提供以下额外信息(注意我们在本文中使用的示例):
-
对于 Amazon Aurora DB Cluster ARN ,输入创建 Aurora 集群时保存的 ARN 。
-
对于 Database name ,输入postgres。
-
对于 Table name,输入bedrock_integration.bedrock_kb。
-
对于 Secret ARN ,输入创建bedrock_user密钥时保存的 ARN 。
-
对于 Vector field ,输入embedding。
-
对于 Text field ,输入chunks。
-
对于 Bedrock-managed metadata field ,输入metadata。
-
对于 Primary key ,输入id。
10、选择 Next 。
11、查看摘要页面并选择 Sync 。
这将开始将存储在 S3 存储桶中的非结构化数据转换为嵌入并存储在 Aurora 集群中的过程。
同步操作可能需要几分钟到几小时才能完成,这取决于存储在 S3 存储桶中的数据集的大小。在同步操作期间,Amazon Bedrock 会下载S3 存储桶中的文档,将它们分成块(在本文中,我们选择”默认”策略),生成向量嵌入,并将嵌入存储在 Aurora 集群中。初始同步完成后,您会看到数据源显示为 Ready 。
现在您可以在 Amazon Bedrock 代理中使用此知识库。我们可以将此知识库用作测试的一部分。对于此示例,我们选择了PostgreSQL 16 手册作为我们的数据集。这可以让我们看到 RAG 在实际操作中的效果,因为基础模型可能还没有关于 PostgreSQL 16 所有功能的信息。
在以下示例中,我们使用 Amazon Bedrock 的 Test knowledge base 功能,选择 Anthropic Claude 2.1 模型,并询问有关 PostgreSQL 16 功能的问题——特别是pg_stat_io视图。以下为我们的答复截图。
根据提供的问题,Amazon Bedrock 查询了我们的 Aurora 集群以获取回答问题所需的额外上下文。我们的知识库包含了关于新的pg_stat_io功能如何工作的信息,并且能够通过 Anthropic Claude 提供增强的答复。测试工具还引用了它用于提供其如何响应归属的块。
现在我们已经看到了如何使用Amazon Bedrock 的知识库和Aurora PostgreSQL 集群来增强基础模型响应,让我们学习如何直接从 Aurora 集群生成嵌入。这对于将用户问题转换为嵌入是必需的,可与 Aurora 中的嵌入进行相似性搜索比较。
为 Aurora 集群创建
IAM 角色和策略
在您可以开始直接从 Aurora 生成 Amazon Bedrock 的向量嵌入之前,您可能需要调整网络配置,以便您的 Aurora 集群可以与 Amazon Bedrock 通信。
有关如何执行此操作的更多信息,请参阅Enabling network communication from Amazon Aurora MySQL to other AWS services。这些说明也适用于 Aurora PostgreSQL 集群。

扫码了解更多
详细信息
要允许 Aurora 机器学习与 Amazon Bedrock 一起工作,必须首先创建一个 IAM 策略,允许 Aurora 集群与 Amazon Bedrock 模型通信。完成以下步骤:
1、在 IAM 控制台上, 选择导航窗格中的 Policies ,然后选择 Create policy 。
2、在策略编辑器中,展开 Bedrock ,然后在 Read 下选择 InvokeModel 以允许该操作。
3、展开 Resources 并选择 Specific 。
4、对于 foundation-model ,选择 Any 。为了最佳实践体验,请确保只授予您的团队所需的 Amazon Bedrock 基础模型的访问权限。
5、对于 provisioned-model ,同样选择 Any in this account 。同上,为了最佳实践体验,请确保只授予您的团队所需的 Amazon Bedrock 预配置模型的访问权限。
6、选择 Next 。
7、对于 Policy name ,输入策略名称(例如 AuroraMLBedrock) 。
8、选择 Create policy 。
9、在 IAM 控制台上,选择导航窗格中的 Roles ,然后选择 Create role 。
10、对于 Trusted entity type ,选择 Amazon service 。
11、对于 Service or use case ,选择 RDS 。
12、选择 RDS – Add Role to Database 。
13、选择 Next 。
现在我们将上一步中创建的 IAM 策略分配给此 IAM 角色。
14、对于 Permission policies,找到并选择AuroraMLBedrock策略。
15、选择 Next 。
16、在 Role details 部分,输入名称(在本文中为AuroraMLBedrock)和描述。
17、查看 IAM 角色,并确认AuroraMLBedrock策略已加在附件中。
18、选择 Create 创建角色。
现在我们需要将AuroraMLBedrock IAM角色分配给 Aurora 集群。
19、在 Amazon RDS 控制台上,导航到 Aurora 集群详细信息页面。
20、在 Connectivity & security 选项卡上,找到 Manage IAM roles 部分。
21、对于 Add IAM roles to this cluster ,选择AuroraMLBedrock角色。
22、对于 Feature ,选择 Bedrock 。
23、选择 Add role 。
您的集群现在可以调用 Amazon Bedrock 中的模型。
使用 Aurora 机器学习
生成向量嵌入
Aurora 机器学习是一项 Aurora 功能,允许构建者通过 SQL 命令直接使用 Amazon 机器学习服务(包括 Amazon Bedrock、Amazon SageMaker 和 Amazon Comprehend) 。通过最近对 Amazon Bedrock 的支持,Aurora ML 可以让您访问基础模型和嵌入生成器,有助于在处理已存储在 Aurora 集群中的数据时降低延迟。这包括两个新函数:aws_bedrock.invoke_model,允许您从 SQL 查询使用基础模型,以及aws_bedrock.invoke_model_get_embeddings,它可以从 SQL 查询生成嵌入。
更多信息请参阅将Amazon Aurora 机器学习与 Aurora PostgreSQL 一起使用。
Amazon Aurora 机器学习与 Aurora PostgreSQL
扫码了解更多
CREATE EXTENSION IF NOT EXISTS aws_ml CASCADE;
左右滑动查看完整示意
您应该会看到以下输出:
CREATE EXTENSION
现在您可以直接从 Aurora 创建嵌入。以下示例展示了如何使用 Titan Embeddings G1 – Text 嵌入模型为短语 “PostgreSQL I/O monitoring views” 生成嵌入:
SELECT aws_bedrock.invoke_model_get_embeddings(model_id :='amazon.titan-embed-text-v1',content_type :='application/json',json_key :='embedding',model_input :='{ "inputText": "PostgreSQL I/O monitoring views"}') AS embedding;
左右滑动查看完整示意
您会看到以下输出(为清晰起见进行了缩写):
{-1.0625,-1.1484375,0.578125,-0.08251953,0.39453125,-0.80859375,0.051513672,-0.0016479492,-1.203125,0.49609375,-0.33984375...-0.37695312,-0.16699219,-0.796875,1.21875,-0.36523438}
左右滑动查看完整示意
您可以使用aws_bedrock.invoke_model_get_embeddings函数从已存在于数据库中的数据生成嵌入。但是,由于在单个输入上调用嵌入模型可能需要 100-400 毫秒才能完成,因此您应该在批量查询上使用 PostgreSQL 的存储过程系统,以防止单个长时间运行的事务阻塞其他进程。
以下示例展示了我们如何向现有表添加嵌入,并使用匿名块管理批量导入。首先,确保在数据库中安装了 pgvector 扩展,并创建一个将包含示例数据的表:
CREATE EXTENSION IF NOT EXISTSvector;CREATE TABLEdocuments(idintGENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,content text NOTNULL,embeddingvector(1536));INSERT INTOdocuments(content)VALUES('Allow parallelization of FULL and internal right OUTER hash joins'),('Allow logical replication from standby servers'),('Allow logical replication subscribers to apply large transactions in parallel'),('Allow monitoring of I/O statistics using the new pg_stat_io view'),('Add SQL/JSON constructors and identity functions'),('Improve performance of vacuum freezing'),('Add support for regular expression matching of user and database names in pg_hba.conf, and user names in pg_ident.conf');
左右滑动查看完整示意
现在您可以使用以下代码批量为此数据集生成嵌入。示例代码循环遍历 documents 表中没有嵌入的所有记录。对于每个记录,代码调用 Amazon Titan 嵌入模型来生成嵌入,并将结果更新和提交到数据库。
DO$embed$DECLAREdoc RECORD;embvector(1536);BEGINFOR doc in SELECT id, content FROM documents WHERE embedding ISNULLLOOPEXECUTE $$ SELECT aws_bedrock.invoke_model_get_embeddings(model_id :='amazon.titan-embed-text-v1',content_type :='application/json',json_key :='embedding',model_input := json_build_object('inputText', $1)::text)$$INTO embUSING doc.content;UPDATE documents SET embedding = emb WHERE id = doc.id;COMMIT;END LOOP;END;$embed$ LANGUAGE plpgsql;
左右滑动查看完整示意
在本节中,我们看到了如何使用 Aurora 机器学习,从已存在于 Aurora 数据库中的数据使用 Amazon Bedrock 生成嵌入。这种技术有助于加快从数据库数据创建嵌入的速度,因为您可以直接调用 Amazon Bedrock 而无需先转移到单独的系统,以减少延迟。
清理
如果您不需要使用您创建的任何资源,请在完成后将其删除:
1、清空并删除您的 S3 存储桶。
2、如果您不再需要使用 Aurora 机器学习扩展,但希望继续使用集群,您可以通过运行以下 SQL 命令从 Aurora 集群中删除它:
DROP EXTENSION aws_ml;
3、此外,如果您不再需要使用 Aurora 机器学习扩展,但希望继续使用 Aurora 集群,您可以从集群中删除您创建的用于访问 Amazon Bedrock 的 IAM 角色,并且可能需要更新一些网络配置。
4、要删除知识库,请参阅Manage a knowledge base。Manage a
knowledge base
扫码了解更多
5、如果您不再需要 Aurora 集群,请按照Deleting Aurora DB clusters and DB instances中的说明进行操作。
Deleting Aurora DB
clusters and DB instances
扫码了解更多
结论
RAG 是一种强大的技术,可让您将特定领域的信息与基础模型相结合,丰富生成式 AI 应用程序中的响应。在本文中,我们介绍了多个示例,说明如何将 Amazon Bedrock 与 Aurora 结合使用,为您生成式 AI 应用程序实现 RAG 。其中包括如何将 Amazon Aurora PostgreSQL 设置为 Amazon Bedrock 的知识库,以及如何使用 Aurora 机器学习从 Amazon Bedrock 生成向量嵌入。
可扫码参阅,了解更多有关使用Amazon Aurora PostgreSQL 和 pgvector 进行 AI 和 ML 工作负载的信息。
工作负载信息
扫码了解更多
点击阅读原文查看博客,获得更详细内容
本篇作者
Steve Dille
Amazon RDS Aurora 的高级产品经理,引导着 Amazon Aurora 数据库的所有生成式 AI 战略和产品计划。在担任此职位之前,Steve 创建了 Aurora 的性能和基准测试团队,构建并推出了 Aurora Serverless v2 的 RDS Data API 。
本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/3126.html