

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon Bedrock 代理的工作原理
<a name="agents-how"></a>


|  | 
| --- |
| *使用 Amazon Bedrock AgentCore 加快代理的生产速度。 AgentCore 是一个代理平台，用于大规模安全地构建、部署和操作功能强大的代理。有关更多信息，请参阅[AgentCore 开发者指南](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/what-is-bedrock-agentcore.html)。* | 

Amazon Bedrock 代理由以下两组主要 API 操作组成，可帮助您设置和运行代理：
+ Build-time 用于创建、配置和管理您的代理及其相关资源的 [API 操作](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Agents_for_Amazon_Bedrock.html)
+ [运行时 API 操作](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Agents_for_Amazon_Bedrock_Runtime.html)，用于使用用户输入调用代理以及启动编排以执行任务

## Build-time 配置
<a name="agents-btl"></a>

代理包含以下组件：
+ **基础模型** – 您需要选择一个基础模型（FM），代理在编排过程中将调用该模型来解释用户输入和后续提示。代理还将调用该 FM 在其流程中生成响应和后续步骤。
+ **指令** – 您需要编写指令来说明代理的用途。借助高级提示，您可以针对编排过程的每个步骤进一步为代理自定义指令，并添加 Lambda 函数来解析每个步骤的输出。
+ 至少以下配置之一：
  + **操作组** – 通过提供以下资源来定义代理应为用户执行的操作：
    + 以下架构之一，用于定义代理需要从用户处获取的参数（每个操作组可以使用不同的架构）：
      + OpenAPI 架构，用于定义代理可以调用以执行其任务的 API 操作。OpenAPI 架构包含需要从用户处获取的参数。
      + 函数详细信息架构，用于定义代理可以从用户处获取的参数。随后，这些参数可用于供代理进行进一步编排，也可用于设置它们在您自己的应用程序中的使用方式。
    + （可选）具有以下输入和输出的 Lambda 函数：
      + 输入-编排期间识别的 API 操作 and/or 参数。
      + 输出 – API 调用的响应或函数调用的响应。
  + **知识库** – 将知识库与代理关联起来。代理将查询知识库以获取额外的上下文，从而增强响应的生成并输入到编排流程的各个步骤。
+ **提示模板** – 提示模板是创建要提供给 FM 的提示的基础。Amazon Bedrock 代理会公开在预处理、编排、知识库响应生成和后处理期间使用的四个默认基本提示模板。您可以选择编辑这些基本提示模板，以自定义代理在其序列中每个步骤的行为。您也可以出于故障排除目的关闭某些步骤，或者在认为不再需要某个步骤时将其关闭。有关更多信息，请参阅 [使用 Amazon Bedrock 中的高级提示模板提高代理的准确性](advanced-prompts.md)。

在构建时，系统会收集所有这些组件，为代理构建基本提示，以便在用户请求完成之前执行编排。通过高级提示，您可以根据其他逻辑和少样本示例来修改这些基本提示，以提高代理调用每个步骤的准确性。基本提示模板包含指令、操作描述、知识库描述和对话历史记录，您可以自定义所有这些内容，以根据需要修改代理。然后，您可以*准备*代理，将代理的所有组件（包括安全配置）打包在一起。准备代理会使其进入可在运行时进行测试的状态。下图显示了构建时 API 操作如何构建代理。

![构建时 API 如何构建代理。操作组由一个 OpenAPI 架构和一个 Lambda 函数组成，用于定义代理可以调用哪些 API 操作以及代理应如何处理请求和响应。代理会综合来自基本提示模板、获得的指令以及任何附加操作组和知识库的信息，以生成包含它所使用的模型的提示。这些提示将添加到代理的提示存储。](http://docs.aws.amazon.com/zh_cn/bedrock/latest/userguide/images/agents/agents-buildtime.png)


## 运行时流程
<a name="agents-rt"></a>

运行时由 [https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html) API 操作管理。此操作将启动代理序列，该序列由以下三个主要步骤组成。

1. **Pre-processing**— 管理代理如何对用户输入进行情境化和分类，并可用于验证输入。

1. **编排** – 解释用户输入、调用操作组和查询知识库，并将输出返回给用户或将输出作为继续编排的输入。编排包含以下步骤：

   1. 代理通过基础模型解释输入，并生成理由**来阐述下一步行动的逻辑依据。

   1. 代理可预测应该调用操作组中的哪个操作或应该查询哪个知识库。

   1. 如果代理预测需要调用某个操作，则会将根据用户提示确定的参数发送到[为操作组配置的 Lambda 函数](agents-lambda.md)，或者通过在 [https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html) 响应中发送参数来[返回控制权](agents-returncontrol.md)。如果代理没有足够的信息来调用该操作，它可能会执行以下操作之一：
      + 查询相关知识库（**知识库响应生成**）以检索其他上下文并汇总数据，从而增强数据的生成。
      + 重新提示用户收集该操作所需的所有参数。

   1. 代理通过调用 and/or 汇总知识库结果的操作生成一个输出，称为*观察*。代理使用观察结果来增强基本提示，然后使用基础模型解释基本提示。然后，代理确定是否需要重复编排过程。

   1. 此循环会一直持续，直到代理向用户返回响应或需要提示用户提供额外信息为止。

   在编排过程中，基本提示模板会使用您添加到代理的代理指令、操作组和知识库进行增强。然后，增强的基本提示会用于调用 FM。FM 可以预测最佳的步骤和轨迹，以便完成用户输入。在每次迭代编排过程时，FM 都会预测要调用的 API 操作或要查询的知识库。

1. **Post-processing**— 代理将最终响应格式化为返回给用户。默认情况下，此步骤处于关闭状态。

调用代理时，您可以在运行时开启**跟踪**。利用跟踪，您可以在代理序列的每个步骤中跟踪代理的理由、操作、查询和观察结果。跟踪包括在每个步骤中发送给基础模型的完整提示，以及基础模型的输出、API 响应和知识库查询。您可以通过跟踪来理解代理在每个步骤的推理。有关更多信息，请参阅 [使用跟踪功能跟踪代理的分步推理过程](trace-events.md)。

当用户与代理的会话通过更多的 `InvokeAgent` 请求继续进行时，对话历史记录将被保留。对话历史记录会利用上下文不断增强基本提示模板编排，帮助提高代理的准确性和性能。下图显示了代理在运行时的工作过程。

![代理在运行时的工作原理。收到用户输入后，代理会从提示存储中提取增强的提示，并从会话存储中获取对话历史记录。如果启用了预处理步骤，代理将调用具有预处理提示的 FM 来验证用户输入。在编排步骤中，代理将使用编排提示来调用 FM，并解析响应。然后，它将根据需要确定操作组和查询知识库，并生成可能触发新的编排提示的观察结果。编排阶段会循环进行，直到观察结果向用户返回最终响应。](http://docs.aws.amazon.com/zh_cn/bedrock/latest/userguide/images/agents/agents-runtime.png)
