创建仅连接单个知识库的代理

在本笔记本中,我们将学习如何创建一个连接到单个知识库的亚马逊 Bedrock 代理,以便亚马逊 Bedrock 检索公司数据并完成任务。

此笔记本的用例是存储为 PDF 的亚马逊 Bedrock 文档页面。它将允许我们询问有关亚马逊 Bedrock 的问题,并根据知识库中可用的文档获得答复。

完成此笔记本的步骤如下:

  1. 导入所需的库
  2. 创建 S3 存储桶并将数据上传到其中
  3. 为亚马逊 Bedrock 创建知识库并将数据同步到知识库
  4. 为亚马逊 Bedrock 创建代理
  5. 测试代理
  6. 清理创建的资源

1. 导入所需的库

2. 将数据集上传到亚马逊 S3

亚马逊 Bedrock 的知识库当前要求数据驻留在亚马逊 S3 存储桶中。在本节中,我们将创建一个亚马逊 S3 存储桶和文件。

2.1 创建亚马逊 S3 存储桶

2.2 将数据集上传到亚马逊 S3 存储桶

3. 为亚马逊 Bedrock 创建知识库

在本节中,我们将经历创建和测试知识库的所有步骤。

这些是要完成的步骤:

  1. 创建知识库角色及其策略
  2. 创建向量数据库
  3. 创建 OpenSearch 索引
  4. 创建知识库
  5. 创建数据源并将其附加到最近创建的知识库
  6. 将数据摄取到我们的知识库中

3.1 创建知识库角色和策略

让我们首先创建 IAM 策略,允许我们的知识库访问 Bedrock Titan Embedding Foundation 模型、Amazon OpenSearch Serverless 和包含知识库文件的 S3 存储桶。

一旦策略准备就绪,我们就会创建知识库角色

3.2 创建向量数据库

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

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

3.3 - 创建 OpenSearch 索引

现在让我们创建一个向量索引来索引我们的数据

3.5 - 创建知识库

现在我们已经在 OpenSearch Serverless 中拥有了向量数据库,让我们创建一个知识库并将其与 OpenSearch DB 关联

3.6 - 启动摄取作业

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

4. 创建代理

我们现在将创建代理并将知识库与之关联。为此,我们需要:

  1. 创建代理 IAM 角色和策略
  2. 创建代理
  3. 将代理与知识库关联
  4. 准备代理

4.1 - 创建代理 IAM 角色和策略

首先,我们需要创建允许 bedrock 模型调用和知识库检索的代理策略

4.2 - 创建代理

一旦创建了所需的 IAM 角色,我们就可以使用 bedrock 代理客户端创建一个新的代理。为此,我们使用 create_agent 函数。它需要一个代理名称、基础模型和说明。我们还可以提供代理描述。请注意,创建的代理尚未准备就绪。我们将专注于准备代理,然后使用它来调用操作并使用其他 API

让我们现在将代理 id 存储在一个本地变量中,以便在下一步中使用它

4.3 - 将代理与知识库关联

接下来,我们需要将创建的代理与 Bedrock 文档的知识库关联

4.4 - 准备代理

让我们创建代理的 DRAFT 版本,可用于内部测试。

5 - 测试代理

现在我们有了代理,让我们调用它来测试它是否提供了正确的亚马逊 Bedrock 信息。为此,让我们首先创建一个代理别名

现在我们已经创建了代理,让我们使用 bedrock-agent-runtime 客户端来调用这个代理并从知识库中获取信息

6 - 清理(可选)

下一步是可选的,演示如何删除我们的代理。要删除代理,我们需要:

  1. 删除代理别名
  2. 删除代理
  3. 删除知识库
  4. 删除 OpenSearch Serverless 向量存储
  5. 清空创建的 s3 存储桶
  6. 删除 s3 存储桶

结论

我们现在已经使用 boto3 SDK 进行了实验,创建、调用和删除了一个只连接一个 KB 的代理。

要点

调整此笔记本以为我们的应用程序创建新的代理

谢谢我们