Watson Assistant 使用 Java SDK 维护对话

瓦苏巴布

我正在尝试实现一个聊天助手,使用 angular 作为客户端并从 Java 端调用 Watson Assistant API。

对于第一次调用,我发送了一条空输入消息,当我在响应中收到上下文时,我将其设置为下一条消息输入以维护对话上下文。

这是Java代码

import javax.annotation.PostConstruct;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.xxxx.repapp.assistant.MessageInput;
import com.ibm.watson.developer_cloud.assistant.v1.Assistant;
import com.ibm.watson.developer_cloud.assistant.v1.model.InputData;
import com.ibm.watson.developer_cloud.assistant.v1.model.MessageOptions;
import com.ibm.watson.developer_cloud.assistant.v1.model.MessageResponse;
import com.ibm.watson.developer_cloud.service.exception.NotFoundException;
import com.ibm.watson.developer_cloud.service.exception.RequestTooLargeException;
import com.ibm.watson.developer_cloud.service.exception.ServiceResponseException;

@RestController
@RequestMapping("/app")
public class ConversationResource {

    private static final String WORKSPACE_ID = "";
    private static final String USERNAME = "";
    private static final String PASSWORD = "";

    Assistant service = new Assistant("2018-02-16");

    @PostConstruct
    public void init() {
        service.setUsernameAndPassword(USERNAME, PASSWORD);
    }

    @RequestMapping(value = "rest/conversation/message", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    public MessageResponse consecutiveMessages(@RequestBody MessageInput messageInput) {
        try {
            InputData input = new InputData.Builder(messageInput.getText()).build();
            MessageOptions options = new MessageOptions.Builder(WORKSPACE_ID).input(input)
                    .context(messageInput.getContext()).build();
            MessageResponse response = service.message(options).execute();
            return response;
        } catch (NotFoundException e) {
            // Handle Not Found (404) exception
        } catch (RequestTooLargeException e) {
            // Handle Request Too Large (413) exception
        } catch (ServiceResponseException e) {
            // Base class for all exceptions caused by error responses from the
            // service
            System.out.println("Service returned status code " + e.getStatusCode() + ": " + e.getMessage());
        }
        return null;
    }

    @RequestMapping(value = "rest/conversation/initialMessage", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public MessageResponse initialMessage() {
        InputData input = new InputData.Builder("").build();
        MessageOptions options = new MessageOptions.Builder(WORKSPACE_ID).input(input).build();

        // sync way
        MessageResponse response = service.message(options).execute();
        return response;

        // async way
        /*
         * service.message(options).enqueue(new
         * ServiceCallback<MessageResponse>() {
         * 
         * @Override public void onResponse(MessageResponse response) {
         * System.out.println(response); }
         * 
         * @Override public void onFailure(Exception e) { } });
         */
    }

}

MessageInput 类是

import com.ibm.watson.developer_cloud.assistant.v1.model.Context;

public class MessageInput extends com.ibm.watson.developer_cloud.assistant.v1.model.MessageInput{

    private Context context;

    public Context getContext() {
        return context;
    }

    public void setContext(Context context) {
        this.context = contextId;
    }   
}

当我必须继续对话时,对话会在不维护上下文的情况下重新开始。请看下面的对话流程。

欢迎意向回复

{
  "output": {
    "text": [
      "Hello I am foo assistant. How can I help you?"
    ],
    "nodes_visited": [
      "Welcome"
    ],
    "log_messages": []
  },
  "input": {
    "text": ""
  },
  "intents": [],
  "entities": [],
  "context": {
    "conversation_id": "b935786e-7e9d-499e-bb65-b6ddd23605a0",
    "system": {
      "dialog_stack": [
        {
          "dialog_node": "root"
        }
      ],
      "dialog_turn_counter": 1.0,
      "dialog_request_counter": 1.0,
      "_node_output_map": {
        "Welcome": {
          "0": [
            0.0
          ]
        }
      },
      "branch_exited": true,
      "branch_exited_reason": "completed"
    }
  }
}

设置输入文本和上下文后在下一个请求中设置的 MessageOptions

{
  "workspaceId": "*************",
  "input": {
    "text": "submit meter read"
  },
  "context": {
    "output": {
      "text": [
        "Hello I am foo assistant. How can I help you?"
      ],
      "nodes_visited": [
        "Welcome"
      ],
      "log_messages": []
    },
    "input": {
      "text": ""
    },
    "intents": [],
    "entities": [],
    "context": {
      "conversation_id": "b935786e-7e9d-499e-bb65-b6ddd23605a0",
      "system": {
        "dialog_stack": [
          {
            "dialog_node": "root"
          }
        ],
        "dialog_turn_counter": 1,
        "dialog_request_counter": 1,
        "_node_output_map": {
          "Welcome": {
            "0": [
              0
            ]
          }
        },
        "branch_exited": true,
        "branch_exited_reason": "completed"
      }
    }
  }
}
null
{
  "output": {
    "text": [
      "Hello I am foo assistant. How can I help you?"
    ],
    "nodes_visited": [
      "Welcome"
    ],
    "log_messages": []
  },
  "input": {
    "text": ""
  },
  "intents": [],
  "entities": [],
  "context": {
    "conversation_id": "b935786e-7e9d-499e-bb65-b6ddd23605a0",
    "system": {
      "dialog_stack": [
        {
          "dialog_node": "root"
        }
      ],
      "dialog_turn_counter": 1,
      "dialog_request_counter": 1,
      "_node_output_map": {
        "Welcome": {
          "0": [
            0
          ]
        }
      },
      "branch_exited": true,
      "branch_exited_reason": "completed"
    }
  }
}
null
{
  "text": "submit meter read"
}

下一次输入抄表日期后的消息选项

{
  "workspaceId": "*************",
  "input": {
    "text": "2018-09-09"
  },
  "context": {
    "output": {
      "text": [
        "Please enter meter read date"
      ],
      "nodes_visited": [
        "node_1_1534239058536",
        "handler_4_1534239240239",
        "slot_2_1534239240239"
      ],
      "log_messages": []
    },
    "input": {
      "text": "submit meter read"
    },
    "intents": [
      {
        "intent": "submit_meter_read",
        "confidence": 0.9712400913238526
      }
    ],
    "entities": [],
    "context": {
      "output": {
        "text": [
          "Hello I am foo assistant. How can I help you?"
        ],
        "nodes_visited": [
          "Welcome"
        ],
        "log_messages": []
      },
      "input": {
        "text": ""
      },
      "intents": [],
      "entities": [],
      "context": {
        "conversation_id": "b935786e-7e9d-499e-bb65-b6ddd23605a0",
        "system": {
          "dialog_stack": [
            {
              "dialog_node": "root"
            }
          ],
          "dialog_turn_counter": 1,
          "dialog_request_counter": 1,
          "_node_output_map": {
            "Welcome": {
              "0": [
                0
              ]
            }
          },
          "branch_exited": true,
          "branch_exited_reason": "completed"
        }
      },
      "conversation_id": "ccfba8ad-06e2-4a74-95e3-20f8251c264c",
      "system": {
        "dialog_stack": [
          {
            "dialog_node": "slot_2_1534239240239",
            "state": "in_progress"
          }
        ],
        "dialog_turn_counter": 1,
        "dialog_request_counter": 1,
        "_node_output_map": {}
      }
    }
  }
}

现在预期的响应应该继续要求再填充一个槽,但如果您观察到以下响应,它会被重置。

{
  "output": {
    "text": [
      "I didn't understand. You can try rephrasing. I can help you with things like meter read submission, raising a complaint, and giving some general information."
    ],
    "nodes_visited": [
      "Anything else"
    ],
    "log_messages": []
  },
  "input": {
    "text": "2018-09-09"
  },
  "intents": [],
  "entities": [
    {
      "entity": "sys-number",
      "location": [
        0.0,
        4.0
      ],
      "value": "2018",
      "confidence": 1.0,
      "metadata": {
        "numeric_value": 2018.0
      }
    },
    {
      "entity": "sys-date",
      "location": [
        0.0,
        10.0
      ],
      "value": "2018-09-09",
      "confidence": 1.0,
      "metadata": {
        "calendar_type": "GREGORIAN",
        "timezone": "GMT"
      }
    },
    {
      "entity": "sys-number",
      "location": [
        4.0,
        7.0
      ],
      "value": "-9",
      "confidence": 1.0,
      "metadata": {
        "numeric_value": -9.0
      }
    },
    {
      "entity": "sys-number",
      "location": [
        7.0,
        10.0
      ],
      "value": "-9",
      "confidence": 1.0,
      "metadata": {
        "numeric_value": -9.0
      }
    }
  ],
  "context": {
    "output": {
      "text": [
        "Please enter meter read date"
      ],
      "nodes_visited": [
        "node_1_1534239058536",
        "handler_4_1534239240239",
        "slot_2_1534239240239"
      ],
      "log_messages": []
    },
    "input": {
      "text": "submit meter read"
    },
    "intents": [
      {
        "intent": "submit_meter_read",
        "confidence": 0.9712400913238526
      }
    ],
    "entities": [],
    "context": {
      "output": {
        "text": [
          "Hello I am foo assistant. How can I help you?"
        ],
        "nodes_visited": [
          "Welcome"
        ],
        "log_messages": []
      },
      "input": {
        "text": ""
      },
      "intents": [],
      "entities": [],
      "context": {
        "conversation_id": "b935786e-7e9d-499e-bb65-b6ddd23605a0",
        "system": {
          "dialog_stack": [
            {
              "dialog_node": "root"
            }
          ],
          "dialog_turn_counter": 1.0,
          "dialog_request_counter": 1.0,
          "_node_output_map": {
            "Welcome": {
              "0": [
                0.0
              ]
            }
          },
          "branch_exited": true,
          "branch_exited_reason": "completed"
        }
      },
      "conversation_id": "ccfba8ad-06e2-4a74-95e3-20f8251c264c",
      "system": {
        "dialog_stack": [
          {
            "dialog_node": "slot_2_1534239240239",
            "state": "in_progress"
          }
        ],
        "dialog_turn_counter": 1.0,
        "dialog_request_counter": 1.0,
        "_node_output_map": {}
      }
    },
    "conversation_id": "39f82cb9-e0f1-47b9-845e-892c0d589aed",
    "system": {
      "dialog_stack": [
        {
          "dialog_node": "root"
        }
      ],
      "dialog_turn_counter": 1.0,
      "dialog_request_counter": 1.0,
      "_node_output_map": {
        "Anything else": {
          "0": [
            0.0,
            0.0,
            2.0,
            1.0
          ]
        }
      },
      "branch_exited": true,
      "branch_exited_reason": "completed"
    }
  }
}

上面代码中缺少的地方,请帮助我维护对话流程。谢谢

数据_亨里克

您需要发送从响应中获得的上下文。您似乎从输入对象中检索上下文。从响应传输到 MessageInput 对象的上下文信息在哪里?

您可能已经看到此示例的两个连续消息:https : //github.com/watson-developer-cloud/java-sdk/tree/master/assistant

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将 Watson Assistant(以前的对话)与 Telegram/Facebook 集成

来自分类Dev

IBM Watson语音到文本仅使用Java SDK返回第一个单词

来自分类Dev

Clojure:Java Interop IBM watson 对话服务

来自分类Dev

IBM Watson Assistant:如何通过禁用输入字段来关闭对话框?

来自分类Dev

在Node-RED中使用Watson Assistant V2发生TypeError

来自分类Dev

IBM Watson Assistant:如何使用系统实体 sys-number 获取少量数字

来自分类Dev

列出数组输出和IBM的Watson Java SDK

来自分类Dev

如何使用Python接收Watson Speech to Text SDK的全部输出?

来自分类Dev

使用 watson-developer-cloud nodejs sdk 删除多个意图

来自分类Dev

您好,我如何使用 IBM Watson 对话显示使用 IBM Watson 链接到 facebook messenger 的图像?

来自分类Dev

Wordpress - 自定义 Watson Assistant 插件

来自分类Dev

使用 watson 对话快速回复或提出建议

来自分类Dev

如何使用 Node-RED 或用于 Watson 的 node-sdk 在法兰克福使用 Watson Conversation 服务?

来自分类Dev

Watson对话服务验证

来自分类Dev

Watson 与 Visual Recognition 的对话

来自分类Dev

使用Mailboxer在模型上仅维护一个对话

来自分类Dev

使用 Java 将变量传递给 IBM Watson Conversation Dialog

来自分类Dev

使用IBM Watson Android SDK将音频文件写入Websocket

来自分类Dev

在 Ubuntu VM 上使用 Google Assistant SDK 建模智能家居设备 - 可用的设备类型?

来自分类Dev

Watson Assistant预览链接集成无法正常工作

来自分类Dev

IBM Watson Assistant设置上下文变量

来自分类Dev

Flutter中的IBM Watson Assistant:如何显示选项?

来自分类Dev

Watson Assistant-如何获取特定实体的大小

来自分类Dev

IBM Watson Assistant:如何存储任何类型的输入?

来自分类Dev

Watson Assistant CURL API:如何发送跟进消息?

来自分类Dev

IBM Watson Assistant,如何从数组中删除多个项目?

来自分类Dev

如何通过 Watson Assistant API 动态检索响应类型

来自分类Dev

IBM Watson Assistant 是否支持印度地区语言?

来自分类Dev

在哪里可以找到用于调用请求的 Watson Assistant ID?

Related 相关文章

  1. 1

    将 Watson Assistant(以前的对话)与 Telegram/Facebook 集成

  2. 2

    IBM Watson语音到文本仅使用Java SDK返回第一个单词

  3. 3

    Clojure:Java Interop IBM watson 对话服务

  4. 4

    IBM Watson Assistant:如何通过禁用输入字段来关闭对话框?

  5. 5

    在Node-RED中使用Watson Assistant V2发生TypeError

  6. 6

    IBM Watson Assistant:如何使用系统实体 sys-number 获取少量数字

  7. 7

    列出数组输出和IBM的Watson Java SDK

  8. 8

    如何使用Python接收Watson Speech to Text SDK的全部输出?

  9. 9

    使用 watson-developer-cloud nodejs sdk 删除多个意图

  10. 10

    您好,我如何使用 IBM Watson 对话显示使用 IBM Watson 链接到 facebook messenger 的图像?

  11. 11

    Wordpress - 自定义 Watson Assistant 插件

  12. 12

    使用 watson 对话快速回复或提出建议

  13. 13

    如何使用 Node-RED 或用于 Watson 的 node-sdk 在法兰克福使用 Watson Conversation 服务?

  14. 14

    Watson对话服务验证

  15. 15

    Watson 与 Visual Recognition 的对话

  16. 16

    使用Mailboxer在模型上仅维护一个对话

  17. 17

    使用 Java 将变量传递给 IBM Watson Conversation Dialog

  18. 18

    使用IBM Watson Android SDK将音频文件写入Websocket

  19. 19

    在 Ubuntu VM 上使用 Google Assistant SDK 建模智能家居设备 - 可用的设备类型?

  20. 20

    Watson Assistant预览链接集成无法正常工作

  21. 21

    IBM Watson Assistant设置上下文变量

  22. 22

    Flutter中的IBM Watson Assistant:如何显示选项?

  23. 23

    Watson Assistant-如何获取特定实体的大小

  24. 24

    IBM Watson Assistant:如何存储任何类型的输入?

  25. 25

    Watson Assistant CURL API:如何发送跟进消息?

  26. 26

    IBM Watson Assistant,如何从数组中删除多个项目?

  27. 27

    如何通过 Watson Assistant API 动态检索响应类型

  28. 28

    IBM Watson Assistant 是否支持印度地区语言?

  29. 29

    在哪里可以找到用于调用请求的 Watson Assistant ID?

热门标签

归档