本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
控制会话上下文
为了更好地控制会话上下文,可以在代理中修改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 代理允许您定义以下类型的上下文属性,这些属性将在会话的各个部分中持续存在:
-
会话属性-在用户和代理之间的会话中持续存在的属性。只要未超过会话时间限制 (the
idleSessionTTLinSeconds
),所有使用相同的InvokeAgent请求都sessionId
属于同一个会话。 -
promptSessionAttributes— 在一回合(一次InvokeAgent调用)内持续存在的属性。编辑编排基础提示模板时,可以使用 $prompt_session_attributes$ 占位符。此占位符将在运行时使用您在
promptSessionAttributes
字段中指定的属性进行填充。
您可以通过两个不同的步骤定义会话状态属性:
-
当您设置操作组并编写 Lambda 函数时,请在返回给 A mazon Bedrock 的响应事件promptSessionAttributes中包含
sessionAttributes
或。 -
在运行时,当您发送InvokeAgent请求时,请在请求正文中包含一个
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响应中返回控制权,则可以通过包含以下字段在后续InvokeAgent响应中发送调用该sessionState
操作组的结果:
-
invocationId
— 此 ID 必须与InvokeAgent响应returnControl
字段中ReturnControlPayload对象中invocationId
返回的 ID 相匹配。 -
returnControlInvocationResults
— 包括您通过调用操作获得的结果。您可以将应用程序设置为传递ReturnControlPayload对象以执行 API 请求或调用您定义的函数。然后,您可以在此处提供该操作的结果。returnControlInvocationResults
列表中的每个成员都是以下成员之一:-
一个ApiResult对象,其中包含代理预测的应InvokeAgent按先前顺序调用的 API 操作,以及在系统中调用该操作的结果。一般格式如下:
{ "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
段。 -
检索到的最大结果数-要在响应中使用的查询检索结果的最大数量。
-
元数据和筛选-可以配置为根据数据源文件中的元数据属性筛选结果的筛选器。