You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Action会话场景中如何清除已填充的插槽参数以支持用户重新选择值

解决Google Action中重置场景插槽以重新收集参数的问题

你遇到的核心问题我很清楚:当从MEDIA_STATUS_FINISHED事件跳转回同一场景时,已填充的插槽值会让流程直接进入FINAL状态,没法重新让用户选择参数。而且Conversation对象是不可变的,其实不用手动克隆整个对象,Google Actions平台本身就提供了官方的解决方案,下面给你详细说明:

1. 重置整个场景的插槽和状态(最推荐)

你可以通过设置conv.scene.next来指定下一个要进入的场景(哪怕是当前场景),在配置里清空所有插槽、强制回到场景的START状态。这样场景会从头启动,重新请求用户填充参数,不会复用之前的插槽值。

示例代码:

if (conv.event.type === "MEDIA_STATUS_FINISHED") {
  // 配置下一个场景为当前场景,清空插槽并设置为START状态
  conv.scene.next = {
    name: conv.scene.name, // 保持当前场景名称不变
    slots: {}, // 清空所有已填充的插槽
    status: "START" // 强制场景从头开始执行
  };
  // 提示用户重新选择参数
  conv.add("要不要换一个内容?请告诉我你的选择哦~");
}

2. 只重置特定插槽(按需使用)

如果不需要清空所有插槽,只想重置目标parameterName插槽,可以先复制现有插槽对象,删除目标插槽后再配置conv.scene.next:

示例代码:

if (conv.event.type === "MEDIA_STATUS_FINISHED") {
  // 复制当前插槽(避免直接修改不可变对象)
  const updatedSlots = {...conv.scene.slots};
  // 删除需要重新收集的目标插槽
  delete updatedSlots["parameterName"];
  
  conv.scene.next = {
    name: conv.scene.name,
    slots: updatedSlots,
    status: "IN_PROGRESS" // 保留其他插槽的进度,仅重新收集目标参数
  };
  conv.add("要不要换一个选项?请重新告诉我你的选择。");
}

为什么不用克隆整个Conversation对象?

Google Actions的conv对象设计为不可变,但平台提供的conv.scene.next是官方认可的场景状态修改方式,这种方式更贴合平台的运行逻辑,能避免手动克隆对象可能带来的状态不一致问题,是更稳妥的方案。

这个方案的效果和你提到的视频里的"Again"功能完全一致,通过重置场景插槽让用户可以重新选择参数,完美适配你用后端服务构建对话流程的需求。

内容的提问来源于stack exchange,提问作者przemlat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 18:17:43