标题:实验 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>",
...
}
}
我们可以在以下步骤中设置会话属性:
例如,我们可以设置 sessionAttributes 以存储名字。因此,当用户使用我们的应用程序并提供他们的名字时,我们的代码将把名字作为会话属性发送,代理将在整个会话期间存储他们的名字。这些属性可以在与操作组关联的 lambda 函数调用中使用。
{
"inputText": "<request>",
"sessionState": {
"sessionAttributes": {
"firstName": "<first_name>"
}
}
}
此外,我们还可以通过 promptSessionAttributes 来修改会话上下文。例如,我们可以在用户的请求中使用相对时间词(如"明天”)的情况下,检索用户所在位置的时区。然后,我们可以将他们的时区存储在一个名为 timeZone 的变量中。这样做之后,如果用户要求预订明天的酒店,我们的代码将把用户的时区发送给代理,代理就可以确定"明天"指的是哪一天。
{
"inputText": "<request>",
"sessionState": {
"promptSessionAttributes": {
"timeZone": "<timezone>"
}
}
}
有关会话属性的更多详细信息,请参见控制会话上下文 。
如果我们是通过 workshop studio 参加研讨会的,现在请转到 SageMaker Studio 中的 JupyterLab。
在 JupyterLab UI 中导航到 bedrock-agents-workshop/06-prompt-and-session-attributes/06-prompt-and-session-attributes.ipynb
这里有一个笔记本,让我们可以尝试上述内容:使用提示和会话属性 。