动态变量
传入运行时值,个性化智能体行为。
动态变量可将运行时值注入智能体的消息、系统提示词和工具中。无需创建多个智能体,即可使用用户专属数据个性化每次对话。
概览
动态变量可集成到智能体的多个部分:
- 使用 系统提示词 自定义行为和上下文
- 使用 首条消息 个性化问候语
- 使用 工具参数和标头 传递用户专属数据
以下是动态变量的一些常见用途:
- 使用用户名 个性化问候语
- 在回复中 包含账户详情
- 向工具调用 传递数据
- 根据订阅套餐 自定义行为
- 访问对话 ID 或通话时长等 系统信息
动态变量可包含任意 JSON 值:
将列表或对象插入提示词、URL 或其他文本模板时,会以其 JSON 文本形式插入。绑定到列表变量的工具参数会接收列表本身。
对话详情 API 和通话后 webhook会按原样返回动态变量,包括下方的 system__ 变量。将 dynamic_variables 解析为 JSON 值映射。请勿拒绝不认识的键或值类型,因为可能会新增 system__ 变量。
系统动态变量
无需运行时配置,智能体即可在每次对话中访问内置的 system__* 变量。这些变量带有保留的 system__ 命名空间前缀,并会随对话进行自动更新。自定义动态变量不能使用 system__ 前缀,也不能覆盖系统变量。
标有 † 的变量会在轮次之间变化。将其放入提示词文本可能会阻止提示词缓存;替代方案请参阅最佳实践。
智能体和对话身份
时间和时区
电话和消息
这些变量会在适用的电话和消息渠道中填充:
每轮对话状态
对话历史记录格式
system__conversation_history 变量包含以下结构的 JSON 对象:
每个条目都包含一个 role("user"、"agent" 或 "tool")以及以下其中一项:
message:该轮的文本内容tool_requests:智能体发起的工具调用数组,包含已解析的参数值tool_results:工具响应数组
如果工具结果或参数包含嵌套对话历史记录,将被脱敏为占位符(如 [conversation_history (5 turns)]),以避免无限递归展开。
此变量适合将对话上下文传递给工具(如 webhook 或自定义 LLM),也可在交接期间将对话历史记录包含在子智能体提示词中。
上传文件
system__uploaded_file_ids 会列出用户在聊天中附加的文件 ID,例如在小组件或 WhatsApp 中。它会在每轮更新,因此智能体调用工具时,当前消息中附加的文件已在列表中。
要在对话仍处于活动状态时处理附件,请将此列表与 system__conversation_id 一起绑定到服务器工具的数组参数。如果智能体在用户附加文件前调用工具,参数将接收空列表。
然后,服务器会使用 API 密钥下载每个文件:
响应为原始文件,并带有其 Content-Type(例如 image/jpeg 或 application/pdf)。不属于该对话的文件 ID 会返回 404。列表中的最后一个 ID 是最新上传的文件。
私密动态变量
私密动态变量的填充方式与普通动态变量相同,但会告知 ElevenAgents,它们只能用于动态变量标头,绝不能作为智能体系统提示词或首条消息的一部分发送给 LLM 提供商。
对于不应发送给 LLM 的身份验证令牌或私有 ID,请使用私密动态变量。要创建私密动态变量,请为动态变量添加 secret__ 前缀。
私密值会以脱敏形式存储,因此 conversations API 会将其返回为 <REDACTED>。
通话后转录 webhook 会传递原始值,因此请确保 webhook 端点将其作为机密处理。不要对需要从
conversations API 读取的值使用 secret__ 前缀。请将这些值作为常规动态变量传递,或者传递非敏感标识符,
并在自己的系统中查询敏感值。
从工具更新动态变量
如果工具调用返回有效的 JSON 对象,即可创建或更新动态变量。使用点表示法设置对象路径,以指定应提取的内容。若字段或路径不存在,则不会更新任何内容。
响应对象和点表示法示例:
- Status 对应路径:
response.status - users 数组中第一个用户的电子邮箱对应路径:
response.users.0.email
要将动态变量更新为第一个用户的电子邮箱,请按如下方式设置赋值。

赋值在每个 webhook 工具中配置;请参阅 API 参考文档中的工具赋值。
指南
前提条件:
- 一个 ElevenLabs 账户
- 已配置的 ElevenAgents 智能体(按照快速入门创建)
公开对话页面集成
公开对话页面支持通过 URL 参数传递动态变量,因此分享智能体链接时可个性化对话。这尤其适合在网站、电子邮件或营销活动中嵌入个性化智能体。
URL 参数方法
可通过两种方法向公开对话页面传递动态变量:
方法 1:Base64 编码的 JSON
使用 vars 参数将变量作为 Base64 编码的 JSON 对象传递:
vars 参数包含 Base64 编码的 JSON:
方法 2:单独的查询参数
使用带 var_ 前缀的查询参数传递变量:
参数优先级
同时使用两种方法时,单独的 var_ 参数优先于 Base64 编码变量,以避免冲突:
在此示例中,user_name 将为 "John"(来自 var_user_name),而非 "Jane"(来自 Base64 编码的 vars)。
实现示例
JavaScript URL 生成
Python URL 生成
手动构建 URL
最佳实践
设置时区,而不是在提示词中加入当前时间
系统提示词、workflow 节点和流程中的变量会在每一轮解析。如果某个值在轮次之间发生变化,提示词就无法缓存,从而增加成本和延迟。{{system__time_utc}} 和 {{system__time_second}} 每轮都会变化;{{system__time}} 和 {{system__time_minute}} 每分钟都会变化。
如需让智能体获取当前日期和时间,请在系统提示词编辑器中使用时区按钮设置时区(conversation_config.agent.prompt.timezone),而不是在提示词文本中加入 {{system__time}} 或 {{system__time_utc}}。设置时区后,平台会在缓存提示词前缀之外添加当前日期和时间,因此系统提示词可跨轮次保持缓存。未设置时区时,智能体不会获取当前日期和时间。
如果提示词需要内联显示日期或小时,请结合使用 {{system__time_date}}、{{system__time_hour}} 和 {{system__timezone}}(例如,今天是 {{system__time_date}},{{system__time_hour}} 点({{system__timezone}}))。这些变量最多每小时变化一次。
将实时状态变量绑定到工具参数和标头
如果工具需要标有 † 的值,请将其绑定到工具参数或标头,而不是放在提示词中。工具参数仅在调用工具时解析,因此不会影响提示词缓存。LLM 已能看到对话,因此提示词中很少需要 {{system__conversation_history}}。
考虑提示词中轮次计数器的替代方案
仅将 secret__ 用于始终保留在工具标头中的值
为身份验证令牌和 API 密钥添加 secret__ 前缀,使其只能绑定到工具标头,且绝不会发送给 LLM。由于 secret__ 值会在对话 API 中被替换为 <REDACTED>(通话后的转写 webhook 仍会收到原始值),需要从对话 API 读回的值应作为常规动态变量传递,或者传递非敏感标识符,再在自己的系统中查找敏感值。
不要依赖 system__user_id 进行身份验证
system__user_id 由客户端提供,用于跟踪和分析,ElevenAgents 不会验证它。在公开账户数据前,请通过对话启动 webhook、secret__ 标头变量中的已签名令牌,或验证工具调用来验证来电者身份。
为测试和预览配置占位符
请在 dynamic_variable_placeholders 中为提示词、首条消息和工具中使用的每个自定义变量设置默认值。仪表板中的对话预览和模拟测试不会运行对话启动 webhook,因此未设置的变量在测试期间会保留为字面量 {{variable_name}} 占位符。
故障排除
变量未被替换
请确认:
- 变量名称完全一致(区分大小写)
- 变量使用双花括号:
{{variable_name}} - 变量已包含在
dynamic_variables对象中
类型错误
请确保:
- 变量值符合预期类型
- 值只能是字符串、数字或布尔值




