-
Notifications
You must be signed in to change notification settings - Fork 119
示例程序
在看代码之前,我们先设定一个场景:示例机器人提供什么能力?我们设定一个简单的,容易理解的场景,同时也尽可能的展示Clause服务的用法。 “带外卖!”,我们就假设要点一份外卖,和一个餐厅的微信公众号进行对话,而该餐厅的微信公众号后台使用了Clause服务。
假设我进入公众号后,发送消息,“我想点外卖”,然后在公众号内得到机器人回复:“你想吃点什么”,就这样,餐厅了解了我点餐的信息。 机器人需要收集到“我想吃什么”,“几时送到外卖”和“外卖送到哪里”。
在这里,“我想吃什么”,就是用户意图的说法(Utterance)。“我想吃什么”,“几时送到外卖”和“外卖送到哪里”分别对应三个槽位信息(Slot)。每个槽位和一个词典(Dict)对应,在Clause中,开发者可以创建自定义词典,也可以使用系统词典,Clause目前提供了下面的系统词典:
标识 | 中文名 | 示例 |
---|---|---|
@PER | 人名 | 郭德纲;于谦 |
@LOC | 地名 | 五道口 |
@ORG | 组织机构 | 北京华夏春松科技有限公司 |
@TIME | 时间 | 明天;后天 |
在示例程序中,我们将使用系统词典和自定义词典。
Clause使用RPC方式暴露接口,基于Apache Thrift框架,Clause发布了多语言的RPC客户端,这表示:您可以轻松的使用不同语言集成Clause服务。
每个示例程序的代码都是按照下面这个过程执行的。
- 连接 Clause服务,通过配置IP地址和端口号
- 创建自定义词典
- 创建自定义字典词条
- 引用系统词典
- 创建意图
- 创建槽位
- 创建说法
- 训练机器人
- 等待训练完成
- 获得机器人会话ID
- 和机器人对话
注意:
- 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.
北京华夏春松科技有限公司 https://www.chatopera.com/