亚马逊 Bedrock 代理 - 将知识库关联到代理

本笔记本提供了将亚马逊 Bedrock 的知识库与已有的亚马逊 Bedrock 代理关联的示例代码。该代理已附有一个动作组。

用例

我们将更新我们的餐厅助手,让客户也可以询问有关餐厅菜单的问题。架构如下所示:

代理架构

笔记本演练

在本笔记本中,我们将:

  • 检索上一个笔记本中保存的变量
  • 创建知识库及其先决条件(包括 OpenSearch Servelless 集合和索引)
  • 将知识库与包含餐厅菜单的文档同步
  • 更新代理 IAM 角色以允许访问知识库
  • 将知识库与餐厅代理关联
  • 测试带有知识库访问的代理调用

下一步:

在下一个实验中,我们将测试带有动作组和知识库请求的代理调用,并使用提示属性为代理提供额外信息。

先决条件

在开始本实验之前,我们需要加载在上一个笔记本中存储的变量。

现在让我们导入必要的库并初始化所需的 boto3 客户端。

设置知识库信息

我们现在将设置定义我们知识库的变量:

  • knowledge_base_name: 提供要创建的知识库的名称,在本例中为 booking-agent-kb
  • knowledge_base_description: 知识库的描述,用于在控制台上显示代理列表。此描述 不是 代理提示的一部分
  • bucket_name: 包含知识库文档的存储桶名称

创建亚马逊 Bedrock 知识库

我们现在将创建一个亚马逊 Bedrock 知识库及其要求,包括:

要创建知识库及其依赖项,我们将使用可用在此文件夹中的 BedrockKnowledgeBase 支持类。它允许我们创建新的知识库,将文档引入知识库数据源,并在完成本实验后删除资源。

请注意,创建 Amazon OpenSearch Serverless 集合可能需要几分钟时间。我们可以使用 Amazon OpenSearch Serverless 控制台来监控创建进度。

我们现在将文档上传到 S3,并将其引入知识库。

测试知识库

让我们现在测试创建的知识库是否按预期工作。为此,我们首先检索知识库 ID。

接下来,我们可以使用 boto3 中的 <code>RetrieveAndGenerate</code> API 从知识库中检索问题的上下文并生成最终响应。

更新代理角色以允许知识库检索和检索和生成查询

现在我们的知识库正在工作,我们将把它与代理关联。为此,我们首先需要更新代理角色,以允许从我们的知识库中检索上下文。

将知识库与代理关联

最后,我们可以使用 boto3 中的 <code>AssociateAgentKnowledgeBase</code> API 将新的知识库与代理关联。

准备代理

更新我们的代理后,我们需要再次准备它来打包所有新的组件。

调用代理

现在我们的代理已经更新,让我们再次测试它。为此,我们将再次使用 boto3 Bedrock 运行时客户端中的 <code>invoke_agent</code> 函数。

我们将使用名为 invoke_agent_helper 的相同支持函数,允许我们在启用或禁用跟踪的情况下调用代理,以及在有或没有会话状态的情况下调用代理。我们将在 03_invoke_agent.ipynb 笔记本中更详细地介绍这些概念。

现在我们可以通过询问答案可在知识库文档中找到的问题来进行测试。

下一步

在移动到下一个笔记本之前,让我们存储一些变量以继续使用相同的笔记本。

接下来我们将测试我们的代理。