Skip to content

示例程序

Hai Liang Wang edited this page Oct 3, 2020 · 9 revisions

对话场景

在看代码之前,我们先设定一个场景:示例机器人提供什么能力?我们设定一个简单的,容易理解的场景,同时也尽可能的展示Clause服务的用法。 “带外卖!”,我们就假设要点一份外卖,和一个餐厅的微信公众号进行对话,而该餐厅的微信公众号后台使用了Clause服务。

点外卖

假设我进入公众号后,发送消息,“我想点外卖”,然后在公众号内得到机器人回复:“你想吃点什么”,就这样,餐厅了解了我点餐的信息。 机器人需要收集到“我想吃什么”,“几时送到外卖”和“外卖送到哪里”。

在这里,“我想吃什么”,就是用户意图的说法(Utterance)。“我想吃什么”,“几时送到外卖”和“外卖送到哪里”分别对应三个槽位信息(Slot)。每个槽位和一个词典(Dict)对应,在Clause中,开发者可以创建自定义词典,也可以使用系统词典,Clause目前提供了下面的系统词典:

标识 中文名 示例
@PER 人名 郭德纲;于谦
@LOC 地名 五道口
@ORG 组织机构 北京华夏春松科技有限公司
@TIME 时间 明天;后天

在示例程序中,我们将使用系统词典和自定义词典。

程序介绍

Clause使用RPC方式暴露接口,基于Apache Thrift框架,Clause发布了多语言的RPC客户端,这表示:您可以轻松的使用不同语言集成Clause服务。

每个示例程序的代码都是按照下面这个过程执行的。

  • 连接 Clause服务,通过配置IP地址和端口号
  • 创建自定义词典
  • 创建自定义字典词条
  • 引用系统词典
  • 创建意图
  • 创建槽位
  • 创建说法
  • 训练机器人
  • 等待训练完成
  • 获得机器人会话ID
  • 和机器人对话

注意:

  1. clause使用chatbotID区分不同机器人,但是clause并不维护chatbotID的创建,需要开发者传入一个有效的值:最大长度为32的字符串。

什么是“会话”?

“会话”(session)在clause中代表一个用户对话的周期,clause认为用户在这个周期内是为了完成某个任务的。从确定任务,到得到和这个任务相关的信息,这个session就正常结束了,但是如果用户变化了任务,这个session就不能正常结束。开发者选择什么时候创建新的session,但是服务器端决定什么时候完成这个session,session的管理涉及:意图的确定,意图参数的确定,会话最大空闲时间,会话是否解决(resolved)。

  • 训练完成后请求对话,需要先创建会话,会话会绑定0-1个任务:刚开始不知道用户意图,当确定用户意图后,该session就只和这个意图相关。
  • 会话有最大空闲日期,如果在半个小时内没有更新,会被服务器删除。
  • 会话可以任意创建,只要没有超过最大空闲日期都是有效的。不同的用户使用不同的会话,同一个用户可以同时有多个会话,但是为了实际效果,用户最好同时只使用一个会话。
  • 当用户的意图和槽位信息被全部确认,会话包含的resolved字段会被设置为true,这时开发者可以再次创建一个新的会话。

程序地址

下面,给出几个语言的代码地址

语言 代码地址 示例程序
Node.js https://github.com/chatopera/clause-sdk-node 运行示例程序
Java https://github.com/chatopera/clause-sdk-java 运行示例程序
Python https://github.com/chatopera/clause-sdk-python 运行示例程序

其他语言的客户端,在项目中的位置: https://github.com/chatopera/clause/tree/master/var/assets/clients

目前,已经加入了的客户端语言包括:Java, Cpp, Python, Go, Php, Java, CSharp, Node.js.