Lab 6 - Passing Prompt and Session Attributes to your Agent

标题:实验 6 - 将提示和会话属性传递给我们的代理 权重:60

在这个实验中,我们提供了一个使用 Amazon Bedrock 的 Agents 并使用提示和会话属性的 HR 代理的示例。

为了更好地控制会话上下文,我们可以修改代理中的 SessionState 对象。SessionState 对象包含两种类型的属性,我们可以使用它们为代理在用户对话期间提供对话上下文。

  • sessionAttributes - 在用户和代理之间的会话中持续存在的属性。使用相同的 sessionId 进行的所有 InvokeAgent 请求都属于同一个会话,只要会话时间限制(idleSessionTTLinSeconds)没有超过。

  • promptSessionAttributes - 在单个回合(一次 InvokeAgent 调用)中持续存在的属性。我们可以在编辑编排基础提示模板时使用 prompt_session_attributes 占位符。此占位符将在运行时用我们在 promptSessionAttributes 字段中指定的属性进行填充。

会话状态对象的一般格式如下:

{
    "sessionAttributes": {
        "<attributeName1>": "<attributeValue1>"
        "<attributeName2>": "<attributeValue2>"
        ...
    }
    "promptSessionAttributes": {
        "<attributeName3>": "<attributeValue3>"
        "<attributeName4>": "<attributeValue4>"
        ...
    }
}

我们可以在以下步骤中设置会话属性:

  1. 在设置操作组并编写 Lambda 函数时,在返回给 Amazon Bedrock 的响应事件中包含 sessionAttributes 或 promptSessionAttributes。
  2. 在运行时,当我们发送 InvokeAgent 请求时,在请求正文中包含一个 sessionState 对象,以动态地在对话过程中更改会话状态属性。

例如,我们可以设置 sessionAttributes 以存储名字。因此,当用户使用我们的应用程序并提供他们的名字时,我们的代码将把名字作为会话属性发送,代理将在整个会话期间存储他们的名字。这些属性可以在与操作组关联的 lambda 函数调用中使用。

{
    "inputText": "<request>"
    "sessionState": {
        "sessionAttributes": {
            "firstName": "<first_name>"
        }
    }
}

此外,我们还可以通过 promptSessionAttributes 来修改会话上下文。例如,我们可以在用户的请求中使用相对时间词(如"明天”)的情况下,检索用户所在位置的时区。然后,我们可以将他们的时区存储在一个名为 timeZone 的变量中。这样做之后,如果用户要求预订明天的酒店,我们的代码将把用户的时区发送给代理,代理就可以确定"明天"指的是哪一天。

{
    "inputText": "<request>"
    "sessionState": {
        "promptSessionAttributes": {
            "timeZone": "<timezone>"
        }
    }
}

有关会话属性的更多详细信息,请参见控制会话上下文

试一试

在 AWS 活动中

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

在 JupyterLab UI 中导航到 bedrock-agents-workshop/06-prompt-and-session-attributes/06-prompt-and-session-attributes.ipynb

自学

这里有一个笔记本,让我们可以尝试上述内容:使用提示和会话属性