控制代理会话上下文 - Amazon Bedrock

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

控制代理会话上下文

为了更好地控制会话上下文,您可以修改 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只要未超过会话时间限制 (theidleSessionTTLinSeconds),使用相同的请求就sessionId属于同一个会话。

  • promptSessionAttributes— 在单个合内持续存在的属性(一个 InvokeAgent打电话)。编辑编排基础提示模板时,可以使用 $prompt_session_attributes$ 占位符。此占位符将在运行时使用您在promptSessionAttributes字段中指定的属性进行填充。

您可以通过两个不同的步骤定义会话状态属性:

会话属性示例

以下示例使用会话属性对发送给用户的消息进行个性化设置。

  1. 编写您的应用程序代码,要求用户提供他们的名字和他们想要向代理发出的请求,并将答案存储为变量 <first_name> 以及 <request>.

  2. 编写您的应用程序代码以发送 InvokeAgent向以下正文提出请求:

    { "inputText": "<request>", "sessionState": { "sessionAttributes": { "firstName": "<first_name>" } } }
  3. 当用户使用您的应用程序并提供他们的名字时,您的代码将发送名字作为会话属性,代理将在会期间存储他们的名字。

  4. 由于会话属性是在 Lambda 输入事件中发送的,因此您可以在 Lambda 函数中为操作组引用这些会话属性。例如,如果操作API架构要求在请求正文中使用名字,则可以在为操作组编写 Lambda 函数时使用firstName会话属性,以便在发送请求时自动填充该字段。API

提示会话属性示例

以下一般示例使用提示会话属性为代理提供临时上下文。

  1. 编写应用程序代码,将用户请求存储在名为的变量中 <request>.

  2. 如果用户使用表示相对时间的单词(例如 “tomorrow”),则编写您的应用程序代码以检索用户所在地的时区 <request>,然后存储在名为的变量中 <timezone>.

  3. 编写您的申请以发送 InvokeAgent向以下正文提出请求:

    { "inputText": "<request>", "sessionState": { "promptSessionAttributes": { "timeZone": "<timezone>" } } }
  4. 如果用户使用表示相对时间的单词,则您的代码将发送 p timeZone rompt session 属性,代理将在回合期间将其存储。

  5. 例如,如果用户询问I need to book a hotel for tomorrow,您的代码会将用户的时区发送给代理,代理可以确定 “明天” 所指的确切日期。

  6. 提示会话属性可以在以下步骤中使用。

操作组调用结果

如果您将操作组配置为在中返回控制权 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段。

  • 检索到的最大结果数-要在响应中使用的查询检索结果的最大数量。

  • 元数据和筛选-可以配置为根据数据源文件中的元数据属性筛选结果的筛选器。