变量用于在多个对话轮次中存储和检索数据。 它们使智能体能够记住信息并保持上下文。 为智能体编写提示指令时,您可以添加对这些变量的引用。
变量类型
代理构建器支持在指令中使用两种不同类型的变量:静态变量和动态变量。
选择正确的类型取决于变量的值是否需要在用户会话期间更改,以及您需要针对延迟时间进行多少优化。
静态变量
静态变量会在模型调用发生之前直接编译到智能体提示中。它们充当直接的 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.
变量数据
变量包含以下数据:
- Name:使用蛇形命名法的变量名称
- 类型:底层数据类型:
- 文本:字符串值
- 数字:数值
- 是/否:布尔值
- 自定义对象:您为对象提供架构
- 列表:变量列表。以英文逗号分隔列表的形式提供值。
- 默认值:变量的默认值
- 说明:变量的可选说明
更新变量值
智能体本身无法更新变量的值,但工具和回调可以更新变量值。
智能体变量使用 ADK 上下文状态,该状态可用于更新变量。您可以在 Python 工具代码中使用名为 context 的全局变量。例如,您可以在 Python 工具中使用以下语句,通过 ADK 功能更新变量:
context.state["variable_name"] = value
内置会话上下文变量
除了自定义变量之外,OpenAPI 和 MCP 工具还可以引用内置会话上下文变量。这些参数默认可用,可以在 HTTP 标头或请求参数中传递。这些变量无法在指令中引用,也无法手动覆盖。 以下是可用的内置变量: