Watson 对话 API returns 是和否输入的空输出

Watson conversation API returns empty output for yes and no input

我设置了一个非常简单的脚本,其中的一部分需要用户回答是或否。

当我在 ibmwatsonconversation.com 通过脚本生成器测试脚本时,脚本工作正常。

但是当我通过 Postman 进行测试时发出 HTTP POST 请求,当我到达需要是或否答案的部分时,输出节点总是

"output": {
"log_messages": [],
"text": [],
"nodes_visited": [
  "node_25_1480610375023"
]},

对话中的前两个节点工作正常。

我已经设置了是和否的意图,请参见下图:

对话框如下:

这是请求/响应链:

{"input": {"text": "hello"}}

"output": {"log_messages": [],"text": ["Welcome to the KMBC IT help desk.How can I help you?"],"nodes_visited": ["node_1_1480509441272"]},

然后

{"input": {"text": "my laptop is broken"}}

"output": {
"log_messages": [],
"text": [
  "I'm sorry to hear that your laptop isn't working. \n\nI need you to check a couple of things for me, is that ok?"
],
"nodes_visited": [
  "node_3_1480509642420",
  "node_19_1480518011225"
]},

终于

{"input": {"text": "yes"}}

"output": {
"log_messages": [],
"text": [],
"nodes_visited": [
  "node_25_1480610375023"
]},

在工作区的 "Try it out" 面板内工作正常:

完整 JSON 请求/响应:

{"input": {"text": "hello"}}

{"intents": [{"intent": "greetings","confidence": 1}],"entities": [],"input": {"text": "hello"},"output": {"log_messages": [],"text": ["Welcome to the KMBC IT help desk. How can I help you?"],"nodes_visited": ["node_1_1480509441272"]},"context": {"conversation_id": "4b5b1858-ae4e-4907-a3ab-c49abf601fd3","system": {
  "dialog_stack": [
    {
      "dialog_node": "root"
    }
  ],
  "dialog_turn_counter": 1,
  "dialog_request_counter": 1
}}}


{"input": {"text": "laptop broken"}}
{"intents": [{"intent": "complaint","confidence": 0.989692384334575}],"entities": [
{"entity": "hardware",
  "location": [
    0,
    6
  ],
  "value": "laptop"
}],"input": {"text": "laptop broken"},"output": {"log_messages": [],"text": ["I'm sorry to hear that your laptop isn't working. \n\nI need you to check a couple of things for me, is that ok?"],"nodes_visited": ["node_3_1480509642420",
  "node_19_1480518011225"]},"context": {
"conversation_id": "b53dff12-9252-4b7e-abe8-7b45f561d394",
"system": {"dialog_stack": [{"dialog_node": "node_19_1480518011225"}],
  "dialog_turn_counter": 1,
  "dialog_request_counter": 1}}}


{"input": {"text": "yes"}}
{"intents": [{"intent": "yes","confidence": 1}],"entities": [],"input": {"text": "yes"},"output": {"log_messages": [],"text": [],"nodes_visited": ["node_25_1480610375023"]},"context": {"conversation_id": "b9ddc5b0-5f3c-423f-9bbe-5a1ef013c175","system": {"dialog_stack": [{"dialog_node": "root"}],"dialog_turn_counter": 1,"dialog_request_counter": 1}}}

你真的创建了一个是和否的意图吗?
关于处理是和否响应的最佳流程存在很多争论。但我发现,通过创建一个是和否意图,例如 "yes" 和 "No" 响应效果很好。 您针对这些意图的示例问题可能包括 "ok"、"yess"、"on no"、"yes please" 等回复。

根据完整的 JSON request/response,您的问题在这里(实际上它也在之前的电话中,但凭信心工作):

{"input": {"text": "yes"}}

对话是无状态的,因此您需要发回之前收到的上下文对象。否则系统不知道从哪里继续。以下请求对象应如下所示:

{
"input": {"text": "yes"},
"context": {
    "conversation_id": "b53dff12-9252-4b7e-abe8-7b45f561d394",
    "system": {
        "dialog_stack": [{"dialog_node": "node_19_1480518011225"}],
        "dialog_turn_counter": 1,
        "dialog_request_counter": 1
    }
}

我建议您使用 Watson Developer Cloud SDK 来管理它。

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