全部产品
阿里云办公

快速开始

更新时间:2018-03-21 17:01:11

快速开始

假设需要一个查询天气的多轮对话场景,对话过程如下:

Q:明天天气怎么样?

A:请问您要查询哪个城市的天气?

Q:北京的天气。

A:北京明天晴,5-15摄氏度,微风。

Q:那后天呢?

A:北京后天有小雨,0-5摄氏度,请注意保暖。

Q:杭州明天呢?

A:杭州明天晴,10-20摄氏度,是个好天气。

在智能对话平台上,可以快速搭建这样的一个多轮对话场景。其中支持两种方式,通过配置生成对话和自己编写对话Function。前者适合不懂编程开发的人员或者快速实现一些简单的对话场景,后者通过编程可以实现更强的对话功能(敬请期待)。

配置生成对话
  1. 创建项目

  2. 创建场景创建场景

  3. 创建意图创建意图

    创建意图主要分三部分:实体、对话样本、回复方式

    添加实体:

    注:此处既可以复用系统实体(系统词典不允许修改),也可以选择自己创建实体

    添加对话样本:

    • 通过添加不同句式的对话样本增强系统的适配能力,同时算法端也会对常见的句子开头、结尾、噪声以及同义词进行泛化,例:对例句”搜索明天天气“可以进行多种泛化{[我想|我要|...][搜索|查|...]明天天气[好吗|好不好|...]}
    • 同时需要录入各种槽的组合来适配多轮场景,例如{明天}、{北京}、{明天北京天气怎么样}

    添加回复方式

    注:可根据词槽(slot)存在/不存在等条件来配置相应的回复,从而构成多轮交互场景

  4. 测试对话效果并发布

    注:创建完成后可以先在测试环境进行测试,看句式的覆盖是否全面,对于badcase可以添加到对话样本中,整个流程是一个迭代的过程,直到稳定才进行正式发布

  5. 通过NLS-SDK调用对话服务。

    Java SDK下载地址

    压缩包内为Java Demo工程,SDK jar包在src/main/java/resources/目录下,用户需要在IDE中操作将jar包导入。注意该SDK和语音识别(ASR)为同一个,可以先调用ASR语音识别再调用对话服务,也可以直接调用对话服务。

    示例代码:

    1. import java.util.UUID;
    2. import com.alibaba.idst.nls.NlsClient;
    3. import com.alibaba.idst.nls.NlsFuture;
    4. import com.alibaba.idst.nls.event.NlsEvent;
    5. import com.alibaba.idst.nls.event.NlsListener;
    6. import com.alibaba.idst.nls.protocol.GdsContent.GdsContent;
    7. import com.alibaba.idst.nls.protocol.NlsRequest;
    8. import com.alibaba.idst.nls.protocol.NlsResponse;
    9. public class DialogDemo implements NlsListener {
    10. private static NlsClient client = new NlsClient();
    11. private final String APP_KEY = "您自己的AppKey";
    12. private final String ACCESS_KEY_ID = "您自己的AccessKeyId";
    13. private final String ACCESS_KEY_SECRET = "您自己的AccessKeySecret";
    14. public void init() {
    15. client.init();
    16. }
    17. public void close() {
    18. client.close();
    19. }
    20. public void ask(String sessionId, String question) throws Exception {
    21. NlsRequest request = new NlsRequest();
    22. request.setApp_key(APP_KEY);
    23. request.setAsr_fake(question);
    24. request.setGds_content(createGdsContent(sessionId));
    25. request.authorize(ACCESS_KEY_ID, ACCESS_KEY_SECRET);
    26. NlsFuture future = client.createNlsFuture(request, this);
    27. // 设置服务端结果返回的超时时间
    28. future.await(10000);
    29. }
    30. @Override
    31. public void onMessageReceived(NlsEvent event) {
    32. NlsResponse response = event.getResponse();
    33. String result = "";
    34. if (response.getAsr_ret() != null) {
    35. result += "asr result: " + response.getAsr_ret();
    36. }
    37. if (response.getTts_ret() != null) {
    38. result += "\ntts result: " + response.getTts_ret();
    39. }
    40. if(response.getUds_ret() != null) {
    41. result += "\ndialog result: " + response.getUds_ret();
    42. }
    43. if (result != null) {
    44. System.out.println(result);
    45. }
    46. }
    47. @Override
    48. public void onOperationFailed(NlsEvent nlsEvent) {
    49. //调用失败
    50. }
    51. @Override
    52. public void onChannelClosed(NlsEvent nlsEvent) {
    53. //连接关闭
    54. }
    55. private GdsContent createGdsContent(String sessionId) {
    56. GdsContent content = new GdsContent();
    57. content.setQuery_type("text");
    58. content.setConversation_id(sessionId);
    59. content.setTurn_id(1);
    60. return content;
    61. }
    62. public static void main(String[] args) throws Exception {
    63. String sessionId = UUID.randomUUID().toString();
    64. DialogDemo dialogDemo = new DialogDemo();
    65. dialogDemo.init();
    66. dialogDemo.ask(sessionId, "北京明天天气怎么样");
    67. dialogDemo.close();
    68. }
    69. }