本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
控制代理会话上下文
为了更好地控制会话上下文,您可以修改 SessionState在你的代理中提出异议。这些区域有:SessionState对象包含可以跨回合维护的信息(分开 InvokeAgent请求和回应)。在用户对话期间,您可以使用这些信息为代理提供对话上下文。
的一般格式 SessionState对象如下。
{ "sessionAttributes": { "
<attributeName1>
": "<attributeValue1>"
, "<attributeName2>
": "<attributeValue2>"
, ... }, "promptSessionAttributes": { "<attributeName3>
": "<attributeValue3>"
, "<attributeName4>
": "<attributeValue4>"
, ... }, "invocationId": "string", "returnControlInvocationResults": [ ApiResult or FunctionResult, ... ], "knowledgeBases": [ { "knowledgeBaseId": "string", "retrievalConfiguration": { "vectorSearchConfiguration": { "overrideSearchType": "HYBRID | SEMANTIC", "numberOfResults": int, "filter": RetrievalFilter object } } }, ... ] }
选择一个主题以了解有关字段的更多信息 SessionState对象。
会话和提示会话属性
Amazon Bedrock Agents 允许您定义以下类型的上下文属性,这些属性将在会话的各个部分中持续存在:
-
sessionAttributes— 在用户和代理之间的会话中持续存在的属性。所有 InvokeAgent只要未超过会话时间限制 (the
idleSessionTTLinSeconds
),使用相同的请求就sessionId
属于同一个会话。 -
promptSessionAttributes— 在单个回合内持续存在的属性(一个 InvokeAgent打电话)。编辑编排基础提示模板时,可以使用 $prompt_session_attributes$ 占位符。此占位符将在运行时使用您在
promptSessionAttributes
字段中指定的属性进行填充。
您可以通过两个不同的步骤定义会话状态属性:
-
当您设置操作组并编写 Lambda 函数时,请在返回给 A mazon Bedrock 的响应事件promptSessionAttributes中包含
sessionAttributes
或。 -
在运行期间,当你发送 InvokeAgentrequest,在请求正文中包含一个
sessionState
对象,以便在对话中动态更改会话状态属性。
会话属性示例
以下示例使用会话属性对发送给用户的消息进行个性化设置。
-
编写您的应用程序代码,要求用户提供他们的名字和他们想要向代理发出的请求,并将答案存储为变量
<first_name>
以及<request>
. -
编写您的应用程序代码以发送 InvokeAgent向以下正文提出请求:
{ "inputText": "
<request>
", "sessionState": { "sessionAttributes": { "firstName": "<first_name>
" } } } -
当用户使用您的应用程序并提供他们的名字时,您的代码将发送名字作为会话属性,代理将在会话期间存储他们的名字。
-
由于会话属性是在 Lambda 输入事件中发送的,因此您可以在 Lambda 函数中为操作组引用这些会话属性。例如,如果操作API架构要求在请求正文中使用名字,则可以在为操作组编写 Lambda 函数时使用
firstName
会话属性,以便在发送请求时自动填充该字段。API
提示会话属性示例
以下一般示例使用提示会话属性为代理提供临时上下文。
-
编写应用程序代码,将用户请求存储在名为的变量中
<request>
. -
如果用户使用表示相对时间的单词(例如 “tomorrow”),则编写您的应用程序代码以检索用户所在地的时区
<request>
,然后存储在名为的变量中<timezone>
. -
编写您的申请以发送 InvokeAgent向以下正文提出请求:
{ "inputText": "
<request>
", "sessionState": { "promptSessionAttributes": { "timeZone": "<timezone>
" } } } -
如果用户使用表示相对时间的单词,则您的代码将发送 p
timeZone
rompt session 属性,代理将在回合期间将其存储。 -
例如,如果用户询问
I need to book a hotel for tomorrow
,您的代码会将用户的时区发送给代理,代理可以确定 “明天” 所指的确切日期。 -
提示会话属性可以在以下步骤中使用。
-
如果您在编排提示模板中包含 $prompt_session_attributes$ 占位符,则 FM 的编排提示将包含提示会话属性。
-
操作组调用结果
如果您将操作组配置为在中返回控制权 InvokeAgent响应,则可以在后续操作中发送调用操作组sessionState
的结果 InvokeAgent通过包含以下字段进行响应:
-
invocationId
— 此 ID 必须与ReturnControlPayload对象中invocationId
返回的returnControl
字段中的值相匹配 InvokeAgent响应。 -
returnControlInvocationResults
— 包括您通过调用操作获得的结果。您可以将应用程序设置为传递ReturnControlPayload对象以执行API请求或调用您定义的函数。然后,您可以在此处提供该操作的结果。returnControlInvocationResults
列表中的每个成员均为以下成员之一:-
一个包含代理预测的API操作的ApiResult对象,该操作应在之前的版本中被调用 InvokeAgent序列和在系统中调用操作的结果。一般格式如下:
{ "actionGroup": "string", "apiPath": "string", "httpMethod": "string", "httpStatusCode": integer, "responseBody": { "TEXT": { "body": "string" } } }
-
一个包含代理预测的函数的FunctionResult对象,该函数应在之前的版本中被调用 InvokeAgent序列和在系统中调用操作的结果。一般格式如下:
{ "actionGroup": "string", "function": "string", "responseBody": { "TEXT": { "body": "string" } } }
-
提供的结果可用作进一步编排的上下文,发送到后期处理以供代理格式化响应,或者直接用于代理对用户的响应。
知识库检索配置
要修改附加到代理的知识库的检索配置,请在knowledgeBaseConfigurations
字段中添加要指定其配置的每个知识库的配置列表。请指定 knowledgeBaseId
。在该vectorSearchConfiguration
字段中,您可以指定以下查询配置(有关这些配置的更多信息,请参阅配置和自定义查询和响应生成):
-
搜索类型-知识库是仅搜索矢量嵌入 (
SEMANTIC
) 还是同时搜索矢量嵌入和原始文本 (HYBRID
)。使用字overrideSearchType
段。 -
检索到的最大结果数-要在响应中使用的查询检索结果的最大数量。
-
元数据和筛选-可以配置为根据数据源文件中的元数据属性筛选结果的筛选器。