变量用于在多个对话轮次中存储和检索数据。它们使代理能够记住信息并保持上下文。 在为代理编写提示指令时,您可以添加对这些变量的引用。
变量类型
代理构建器支持指令中的两种不同的变量类型:静态变量和动态变量。
选择正确的类型取决于变量的值是否需要在用户会话期间发生变化,以及您需要在多大程度上优化延迟时间。
静态变量
静态变量在模型调用发生之前直接编译到代理提示中。它们充当直接的 1 对 1 文本替换,并且更新频率较低。
静态变量可最大限度地提高指令遵循质量,适用于许多场景中的条件指令。对于配置数据、严格的业务规则或在单次对话的整个生命周期内不会发生变化的大型情境载荷,请使用静态变量。
如需在指令中按名称引用静态变量,请使用双大括号:{{variable_name}}。
例如,如果您要创建一个具有大型静态产品目录的零售代理,可以使用如下指令:
You are a helpful shopping assistant.
Please follow these business rules: {{business_rules}}.
动态变量
在对话期间,工具、回调或 API 请求可以随时更新动态变量。它们不会直接替换到提示文本中。
相反,当这些值更新时,系统会将它们的新值作为 state update 事件附加到对话记录中。例如:<state_update>var_name: value</state_update>。
使用动态变量来表示在会话期间从用户处提取的信息、从外部 API(工具)检索到的输出,或随着对话的进行而发生变化的任何状态。
动态变量存在以下缺点:
- 动态变量会附加到对话历史记录中,因此,如果长时间的会话超出上下文窗口限制,代理可能会忘记在修剪历史记录时丢失的变量值。
- 与静态变量相比,动态变量可能会导致指令遵循度略有降低。 这是因为变量值定义得离指令更远。这也会增加延迟时间,因为模型需要思考才能找到与指令相差较远的值。
如需在指令中按名称引用动态变量,请使用单大括号:{variable_name}。
例如,如果您要创建的代理需要对用户进行身份验证,然后使用工具查找用户的特定账号详细信息,则可以使用以下指令:
If the user asks for their balance, call the {@TOOL: LookupBalance}.
The tool will update the {current_account_balance} variable.
Always share the {current_account_balance} with the user.
变量数据
变量具有以下数据:
- 名称:使用蛇形命名法的变量名称
- 类型:基础数据类型:
- 文本:字符串值
- 数字:数值
- 是/否:布尔值
- 自定义对象:您为对象提供架构
- 列表:变量列表。以英文逗号分隔列表的形式提供值。
- 默认值:变量的默认值
- 说明:变量的可选说明
更新变量值
代理本身无法更新变量的值,但工具和回调可以更新变量值。
代理变量使用 ADK 上下文状态,该状态可用于更新变量。您可以在 Python 工具代码中使用名为 context 的全局变量。例如,您可以在 Python 工具中使用以下语句,通过 ADK 功能更新变量:
context.state["variable_name"] = value
内置会话上下文变量
除了自定义变量之外,OpenAPI 和 MCP 工具还可以引用内置的会话上下文变量。这些参数默认可用,可以在 HTTP 标头或请求参数中传递。这些变量无法在指令中引用,也无法手动覆盖。 以下是可用的内置变量:
$context.project_id、$context.project_number、$context.location、$context.app_id、$context.session_id、$context.turn_index(用于应用级/会话级资源 ID)。$context.variables.variable_name,用于特定代理变量值。- 所有 agent variable 值的
$context.variables(以对象形式)。