标题:实验 7 - 覆盖高级提示和自定义 Lambda 解析器

权重:70

在这个实验中,我们提供了一个使用 Amazon Bedrock 高级提示和自定义 Lambda 解析器功能的HR代理的示例。

Amazon Bedrock 中的代理采取一系列步骤来处理用户查询:

  1. 预处理
  2. 编排
  3. 知识库响应生成
  4. 后处理

对于这些步骤中的每一个步骤,提示模板都是创建提供给 FM 的提示的基础。Amazon Bedrock 代理公开了在预处理、编排、知识库响应生成和后处理期间使用的默认四个基本提示模板。我们可以选择编辑这些基本提示模板来自定义代理在其序列的每个步骤中的行为。这就构成了高级提示的基础。

例如,要创建自定义预处理提示,我们可以在 UpdateAgent 调用的 promptOverrideConfiguration 对象中提供自定义提示字符串。

此外,我们可以提供自定义 Lambda 解析器来修改在代理序列的每个步骤中从 LLM 获得的原始输出。这个自定义 Lambda 解析器通常与自定义提示一起使用,以给我们更大的控制权,不仅可以控制如何在该步骤中处理用户查询,还可以控制哪些部分的输出响应应该传递到下一步。

要利用自定义 Lambda 解析器,需要创建一个 Lambda 函数并使用 UpdateAgent 调用来更新代理。对于我们在这个笔记本中的预处理示例,我们将 parserMode 设置为 OVERRIDDEN,然后我们可以在 UpdateAgent 调用的 promptOverrideConfiguration 对象中提供 Lambda ARN 到 overrideLambda 键。

Lambda 函数作为解析器提供需要尊重代理作为解析器输入生成的事件结构。它还需要尊重代理期望作为解析器响应的结构。输入和输出结构的示例如下所示:

Lambda 输入事件结构:

{
    "messageVersion": "1.0"
    "agent": {
        "name": "string"
        "id": "string"
        "alias": "string"
        "version": "string"
    }
    "invokeModelRawResponse": "string"
    "promptType": "PRE_PROCESSING"
    "overrideType": "OUTPUT_PARSER"
}

预处理的 Lambda 响应结构:

{
    "messageVersion": "1.0"
    "promptType": "PRE_PROCESSING"
    "preProcessingParsedResponse": {
        "isValidInput": "boolean"
        "rationale": "string"
    }
}

试一试

在 AWS 活动中

如果我们是通过 workshop studio 参加研讨会的,现在请转到 SageMaker Studio 中的 JupyterLab。

在 JupyterLab UI 中导航到 bedrock-agents-workshop/07-advanced-prompts-and-custom-parsers/07-custom-prompt-and-lambda-parsers.ipynb

自学

这里有一个笔记本,让我们可以尝试上述内容: 使用高级提示和自定义 Lambda 解析器