IBM沃森。如何从一个节点传递上下文?

时间:2017-11-10 22:26:22

标签: rest watson-conversation

我正在尝试将多个IBM Watson请求串起来:

请求#1:播放音乐。

Watson回应如下:

{
"intents": [
    {
        "intent": "turn_on",
        "confidence": 0.9498470783233643
    }
],
"entities": [
    {
        "entity": "appliance",
        "location": [
            5,
            10
        ],
        "value": "radio",
        "confidence": 1
    }
],
"input": {
    "text": "play music"
},
"output": {
    "text": [
        "What kind of music would you like to hear?"
    ],
    "nodes_visited": [
        "node_1_1510258504338",
        "node_2_1510258615227"
    ],
    "log_messages": []
},
"context": {
    "conversation_id": "79e93cac-12bb-40fa-ab69-88f56d0845e4",
    "system": {
        "dialog_stack": [
            {
                "dialog_node": "node_2_1510258615227"
            }
        ],
        "dialog_turn_counter": 1,
        "dialog_request_counter": 1,
        "_node_output_map": {
            "node_2_1510258615227": [
                0
            ]
        }
    }
 }
}

请求#2:赞助人会输入摇滚乐。

我的问题是我收到一条错误消息,指出以下内容

根级别的输入没有匹配的对话节点。 (并且日志中还有1个警告)“,         “log_messages”:[

我很确定我必须将上下文传递给第二个请求,但我不确定我需要包含什么。现在我只传递conversation_id。我需要传递上述响应中的具体内容吗?例如,我传递了这个:

{
"input": {
  "text": "rock"
},
"context": {
  "conversation_id": "79e93cac-12bb-40fa-ab69-88f56d0845e4"
 }
}

2 个答案:

答案 0 :(得分:1)

您发送回整个上下文对象。在这种情况下,它将是:

{
  "input": {
    "text": "rock"
  },
  "context": {
    "conversation_id": "79e93cac-12bb-40fa-ab69-88f56d0845e4",
    "system": {
      "dialog_stack": [
        {
          "dialog_node": "node_2_1510258615227"
        }
      ],
      "dialog_turn_counter": 1,
      "dialog_request_counter": 1,
      "_node_output_map": {
        "node_2_1510258615227": [
          0
        ]
      }
    }
  }
}

但是有一些SDK可以让你更轻松。

https://github.com/watson-developer-cloud

答案 1 :(得分:0)

您的节点可以根据您选择的音乐类型进行操作,它是您转动的音乐的孩子吗?节点[node_2_1510258615227]?
如果是这样,正如Simon在上面演示的那样,您还需要在API调用时传回完整的上下文数据包。这会告诉Watson Conversation你在最后的对话流程中的位置。由于会话系统是无状态的,即它不存储关于个别会话的任何状态信息,因此默认情况下不会知道它在会话中的位置。这就是为什么你需要返回前一个响应的context元素,以允许watson知道你在对话流中的位置。
上面的错误表明Watson查看了您在根级别定义的对话节点列表,但找不到匹配的条件。由于您的匹配条件在子节点内。