亚马逊 Bedrock 知识库 - 端到端示例

本笔记本提供了构建空白 OpenSearch Serverless (OSS) 索引、Amazon Bedrock 知识库和将文档摄入索引的示例代码。

笔记本演练

一个数据管道,将文档(通常存储在 Amazon S3 中)摄入到知识库中,即向量数据库(如 Amazon OpenSearch Service Serverless (AOSS)),以便在收到问题时可以进行查找。

  • 通过连接我们的 s3 存储桶(数据源)将文档加载到知识库中。
  • 摄入 - 知识库将根据所选策略将它们拆分成较小的块,生成嵌入并将其存储在相关的向量存储中。

data_ingestion.png

步骤:

  • 创建具有访问 S3 数据并将嵌入写入 OSS 所需策略的 Amazon Bedrock 知识库执行角色。
  • 创建一个空的 OpenSearch 无服务器索引。
  • 下载文档
  • 创建 Amazon Bedrock 知识库
  • 在知识库中创建一个数据源,它将连接到 Amazon S3
  • 使用 KB API 启动摄入作业,该作业将从 s3 读取数据,对其进行分块,使用 Amazon Titan Embeddings 模型将块转换为嵌入,然后将这些嵌入存储在 AOSS 中。所有这些都无需构建、部署和管理数据管道。

一旦数据可用于 Bedrock 知识库,就可以使用 Amazon Bedrock 提供的知识库 API 在同一文件夹中的以下笔记本中构建问答应用程序。

先决条件

此笔记本需要权限:

  • 创建和删除 Amazon IAM 角色
  • 创建、更新和删除 Amazon S3 存储桶
  • 访问 Amazon Bedrock
  • 访问 Amazon OpenSearch Serverless

如果在 SageMaker Studio 上运行,我们应该将以下托管策略添加到我们的角色:

  • IAMFullAccess
  • AWSLambda_FullAccess
  • AmazonS3FullAccess
  • AmazonBedrockFullAccess
  • 适用于 Amazon OpenSearch Serverless 的自定义策略,例如:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "aoss:*",
            "Resource": "*"
        }
    ]
}
注意: 请确保在 Amazon Bedrock 控制台中启用 `Anthropic Claude 3 Sonnet` 和 `Anthropic Claude 3 Haiku` 模型访问,因为笔记本将使用 Anthropic Claude 3 Sonnet 和 Claude 3 Haiku 模型来测试创建的知识库。

设置

在运行本笔记本的其余部分之前,我们需要运行下面的单元格来(确保安装必要的库并)连接到 Bedrock。

创建向量存储 - OpenSearch Serverless 索引

步骤 1 - 创建 OSS 策略和集合

首先,我们必须创建一个向量存储。在本节中,我们将使用 Amazon OpenSerach 无服务器

Amazon OpenSearch Serverless 是 Amazon OpenSearch Service 中的一个无服务器选项。作为开发人员,我们可以使用 OpenSearch Serverless 运行 petabyte 级别的工作负载,而无需配置、管理和扩展 OpenSearch 集群。我们可以获得与 OpenSearch Service 相同的交互式毫秒响应时间,同时享受无服务器环境的简单性。根据我们的应用程序需求自动扩展资源,提供正确的容量,而不会影响数据摄取。

创建知识库

步骤:

  • 初始化 Open search 无服务器配置,其中将包括集合 ARN、索引名称、向量字段、文本字段和元数据字段。
  • 初始化分块策略,知识库将根据该策略将文档拆分为大小等于 chunkingStrategyConfiguration 中提到的块大小的块。
  • 初始化 s3 配置,这将用于稍后创建数据源对象。
  • 初始化 Titan 嵌入模型 ARN,因为这将用于为每个文本块生成嵌入。

开始摄入作业

一旦创建了 KB 和数据源,我们就可以启动摄入作业。 在摄入作业期间,KB 将获取数据源中的文档,对其进行预处理以提取文本,根据提供的分块大小对其进行分块,为每个块创建嵌入,然后将其写入向量数据库,在本例中为 OSS。

测试知识库

注意:如果我们计划运行任何后续笔记本,我们可以跳过此部分

使用 RetrieveAndGenerate API

在幕后,RetrieveAndGenerate API 将查询转换为嵌入,搜索知识库,然后使用搜索结果作为上下文信息来增强基础模型提示,并返回 FM 生成的响应。对于多轮对话,知识库管理对话的短期记忆,以提供更多上下文结果。

RetrieveAndGenerate API 的输出包括生成的响应、来源归属以及检索到的文本块。

检索 API

检索 API 将用户查询转换为嵌入,搜索知识库,并返回相关结果,让我们可以在语义搜索结果的基础上构建自定义工作流。检索 API 的输出包括检索到的文本块、源数据的位置类型和 URI,以及检索结果的相关性分数。

下一步: 继续下一个实验室,了解如何使用 Bedrock 知识库。记得在会话结束时进行清理。