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

如何检测Watson Assistant的slot filling及上下文状态

Watson Assistant slot filling 状态检测方案

问题现象

开发对接Watson Assistant时,无法直接从默认返回的响应报文判断会话是否处于slot filling流程中:

  • 当会话配置了输出上下文时,响应会返回完整的context字段,示例响应如下:
{
  "output": {
    "generic": [
      {
        "response_type": "text",
        "text": "Hello! What can I do for you?"
      }
    ],
    "intents": [
      {
        "intent": "hello",
        "confidence": 0.9281370162963867
      }
    ],
    "entities": []
  },
  "context": {
    "global": {
      "system": {
        "turn_count": 1,
        "user_id": "55cd47b1-3847-430b-ba28-1739e0654576"
      },
      "session_id": "55cd47b1-3847-430b-ba28-1739e0654576"
    },
    "skills": {
      "main skill": {
        "system": {
          "state": "eyJzZXNzaW9uX2lkIjoiNTVjZDQ3YjEtMzg0Ny00MzBiLWJhMjgtMTczOWUwNjU0NTc2Iiwic2tpbGxfcmVmZXJlbmNlIjoibWFpbiBza2lsbCIsImFzc2lzdGFudF9pZCI6ImViM2RmZGRlLTJkNDUtNDBmYS05NDZlLTk2ODVmNTU2NzhhOSIsImluaXRpYWxpemVkIjp0cnVlLCJkaWFsb2dfc3RhY2siOlt7ImRpYWxvZ19ub2RlIjoicm9vdCJ9XSwibGFzdF9icmFuY2hfbm9kZSI6ImdyZWV0aW5nX29wdGlvbl8zIn0="
        }
      }
    }
  },
  "user_id": "55cd47b1-3847-430b-ba28-1739e0654576"
}
  • 处于slot filling流程中的默认响应没有返回类似开放上下文的可识别标识,无法直接判断会话状态,示例响应如下:
{
  "output": {
    "intents": [
      {
        "intent": "action_36417_intent_42985",
        "confidence": 1
      }
    ],
    "entities": [],
    "generic": [
      {
        "response_type": "text",
        "text": "Lite Plan: $10/month and Premium with Tech Support: $99/month."
      }
    ]
  },
  "user_id": "64e28440-84e2-4246-bfad-34daab1b92e5"
}

核心疑问:是否只能通过要求对话设计者为所有流程配置output context的方式实现状态检测?业务诉求为识别当前会话是否存在未完成的slot filling流程或未结束的开放上下文,以此判断下一条用户消息是否需要路由至同一个对话机器人处理。

解决方案

不需要强制要求对话设计者全量配置output context,有两种低侵入的可靠实现方式:

  • 方案一:API层面开启全局上下文返回
    调用Watson Assistant消息接口时,固定在请求参数中携带return_context=true。这个参数是API原生提供的全局开关,和对话节点是否配置自定义输出上下文无关:只要当前会话处于存续状态,包括正在执行slot filling、存在未过期的上下文,响应都会返回完整的context结构。
    只需要判断响应中是否存在有效context.skills下对应技能的系统状态字段,即可确认当前是否有未完成的对话流程,直接路由到同一个机器人处理即可。之前观察到的slot filling响应不带context,本质是默认请求没有开启这个参数,不是slot filling状态下没有上下文数据。
  • 方案二:对话侧做最小侵入的状态标记
    如果受限于当前使用的API版本,无法使用return_context参数,不需要给所有对话节点配置输出上下文,只需要统一做两处配置:
    1. 所有带slot filling的流程、会产生持续上下文的节点入口处,统一设置固定标识的上下文变量,比如context.conv_status = "in_progress"
    2. 所有流程的结束出口处,统一将该变量置为context.conv_status = "idle"
      后续只需要判断响应中返回的该变量值,即可确认会话状态,整体配置工作量远小于全量配置输出上下文。

注意:不要通过响应中的意图置信度判断是否处于slot filling流程,slot filling执行过程中也可能识别到其他高置信度的外部意图,用这个逻辑判断会出现路由错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:01:20