更新状态

让智能体通过表达式在对话中更新动态变量。

概述

更新状态工具让智能体能在对话进行期间设置一个或多个动态变量。与其他系统工具一样,它只会更改对话内部状态,绝不会调用外部 API 或客户端函数。

可在通话过程中记录信息,例如标记对话是否应升级处理、存储用户提供的值,或计算从其他动态变量派生的值。

功能

  • 每次通话可多次更新:单次工具调用最多可同时为 10 个动态变量赋值。
  • 基于表达式的值:每个值都是表达式的结果,可组合常量、现有动态变量、LLM 从对话中提取的值和运算符。
  • 仅在需要时由 LLM 提取:该工具只会要求 LLM 为需要提取的更新提取参数。完全由常量和/或现有动态变量构成的更新,不会为函数调用添加任何参数。
  • 立即可用:工具运行后,更新后的动态变量可供后续对话使用,包括后续提示词、其他工具调用和覆盖设置,其使用方式与其他动态变量相同。

工作原理

每次状态更新都会将表达式结果赋给一个动态变量:

variable_name = expression

表达式可为以下类型之一,也可以相互嵌套以构建更复杂的逻辑:

类型说明
常量固定的字符串、数字、布尔值或 null 值。
动态变量另一个动态变量的当前值。
LLM 提取的值LLM 从对话中推断出的值,符合你定义的类型(字符串、数字或布尔值)。
逻辑运算符and、or 或结合其他表达式的条件表达式(if / then / else)。
比较运算符=、≠、>、<、≥、≤,用于比较两个表达式。
算术运算符+、-、×、÷,用于组合两个数值表达式(+ 也可用于字符串)。

例如,如果 LLM 判断用户感到沮丧,或者 retry_count 动态变量已大于 3,以下状态更新会将 should_escalate 设为 true:

should_escalate = (llm: "User sounds frustrated with the conversation") OR (retry_count > 3)

如果状态更新无法求值,例如除以零,工具调用将返回错误,且该调用中的所有更新都不会生效。

配置

1

第 1 步:添加工具

前往智能体配置页面。在 工具部分,点击添加工具,然后选择更新状态。

2

第 2 步:定义状态更新

请为每次状态更新提供:

  • 变量名称:要赋值的动态变量。
  • 表达式:要赋予的值,由上述值类型和运算符类型构成。可以嵌套值以构建更复杂的表达式。

单个工具最多可定义 10 次状态更新。

3

第 3 步:配置说明(可选)

可以提供自定义说明,指导 LLM 何时调用该工具。如果留空,将使用为此工具优化的默认说明。

使用场景

  • 升级标记:设置动态变量(例如 should_escalate),供下游系统或业务规则检查,如Genesys 集成指南所示。
  • 记录提取的信息:将用户提供的值(订单号、偏好、所选部门)存储为动态变量,供稍后在对话中使用。
  • 派生值:根据其他动态变量计算一个值,例如递增计数器,或将两个变量合并为一个。

用途:让智能体根据对话更新一个或多个动态变量,无需调用外部 API。

触发条件:LLM 应在以下情况调用此工具:

  • 对话提供了应记录的信息(例如升级标记、选定选项、用户提供的值)
  • 已配置的状态更新依赖于 LLM 必须从对话中判断或提取的值

参数:

函数参数取决于工具的配置。每项使用 LLM 提取值的已配置状态更新,都会在架构中添加一个属性;该属性以此更新的动态变量命名,类型为 string、number 或 boolean。仅由常量或其他动态变量构建的状态更新不会添加任何参数。

函数调用格式:

{
"type": "function",
"function": {
"name": "update_state",
"arguments": "{\"should_escalate\": true}"
}
}

实现方式:智能体会使用提取出的参数和当前对话动态变量评估每个已配置表达式,然后将结果赋值给对应的动态变量。不会发出外部请求。

常见问题

不会。与所有系统工具一样,更新状态只会修改对话内部状态, 不会调用外部 API 或客户端函数。

不需要。该工具仅在状态更新的表达式 包含 LLM 提取的值时,才会要求 LLM 提取参数。如果所有已配置更新均由常量和/或 现有动态变量构成,函数调用将不需要参数。

可在任何支持动态变量的位置使用:系统提示词、首条消息、工具参数和 标头,以及覆盖设置。详情请参阅动态 变量。

更新状态目前可通过智能体控制台配置。API 和 SDK 支持 尚未提供。