2016年9月22日11:00,一个AI(www.yige.ai)准时对外发布,这是我们研发已久的中文聊天机器人(bot)免费创建平台。
一个AI是免费创建中文聊天机器人(bot)应用的在线平台,它使用自然语言理解技术从句法和语义层面理解用户的输入,同时也考虑到对话所处的状态,最终达到识别用户当前输入意图的目的。利用一个AI提供的管理界面和调用接口,无需具备机器学习与自然语言处理等相关知识,小微企业和个人开发者,甚至产品和运营人员,都可以开发出用户友好的自然语言对话交互应用。
一个AI为开发者提供了以下核心能力(虚框内功能即将发布):
一个AI的使命是:
让每个人都能轻松开发一个AI应用。
相对于Viv的灵活性,一个AI更强调可控性和可维护性。虽然使用一个AI的所有功能还是有一定的门槛;但是基本使用,或者后期的基本维护门槛还是很低的,相信一般的客服同学就可以胜任。
下面简单介绍一个AI的由来和基本逻辑。
一个AI由来
故事要从去年说起……
去年下半年我接到老板一个需求,为佳缘创建一个客服机器人(叫缘缘助手),用于回答有关佳缘服务和使用相关的问题,在用户无聊时还可以陪用户唠唠嗑。
首先我们尝试从外面找可用的聊天机器人服务直接对接。国内这方面做得最大的是小i机器人,小i在对话这块做了很久,不过它主要是服务大企业,比如银行,小米,京东早期的Jimi等。他们一单的要价大概在100w左右。当时他们也在开始做针对开发者的接口服务和平台,所以最开始我们就把缘缘助手的知识库维护到小i上,使用他们的接口服务。但小i有以下几个主要问题:
- 知识库维护平台难用,接口不够稳定。小i的维护平台体验非常差,各种卡,很容易误操作导致刚写的东西就没了。接口也不稳定,当时小i做接口服务的机器只有一台,然后他们经常不通知就停机,导致服务没法用。
- 知识库维护多了,效果反而下降。随着我们在小i平台上维护的知识库越来越多(总共其实也不大,大概100+的问答组),会出现各个问答组之间相互打架的问题。所以到后来我们就不敢再往上面加东西了。
- 技术支持不给力。那时候我们拉了个群,除了我们还有小i的商务和技术人员。小i商务同学还是挺积极的,可是技术人员就不给力了。反馈的问题很难得到解决,到后来他们干脆说你们这么多要求,直接用我们的企业定制好了。。。说这条倒不是怪罪小i技术的意思,相信他们确实也有其他工作安排。但沟通下来的感觉就是小i是个传统公司,而非互联网公司。
基于这些原因,加上缘缘助手的答复需要支持富文本,我们最后就决定自己做跟佳缘相关的那块聊天,也就是知识库这块我们自己做。但闲聊还是用外面的接口服务。其实在了解小i的同时,我们也在看国内的一些创业公司,比如图灵机器人,当时他们主要提供通用聊天功能。之所以最开始没用图灵是因为觉得它是个初创公司服务可能不稳定。不过因为之前提到的小i的各种问题,我们最后把闲聊那块也完全切到图灵机器人了,感谢图灵机器人提供的稳定服务。
所以缘缘助手后来的逻辑是这样的,闲聊用图灵机器人的接口,其他的用我们自己开发的服务。这个项目做完大概是去年年底,之后我一直在思考一个问题。市场上为大公司进行定制服务的公司已经有小i这种大玩家,但是为小微企业提供服务的公司就很少。图灵机器人提供的主要服务是闲聊,在企业定制这块做的事并不多。当时我就想为什么这块一直没人做,后来我想明白了,主要是因为成本。小微企业每年最多也就愿意为这种服务付几千块,这种价格估计都cover不住开发成本的。
之后我对聊天机器人关注的越来越多,主要也是想找一个框架,能够降低对小微企业的服务成本。后来我看到了美国的Wit.ai和Api.ai,当时真是眼前一亮。当然这两个主要是提供英语服务的,对中文的支持很惨,而且wit.ai是Facebook的,已被墙,api.ai在国内使用延迟也是很大的,前几天api.ai也被Google收购了,估计被墙只是时间问题。所以我就想着自己搞个中国版的api.ai吧,这就诞生了现在的一个AI(www.yige.ai)。当然做一个AI还有个原因是相信对话交互一定会使用的越来越多,因为这是人类追求沟通效率带来的必然结果。加上美国各大公司如Google、Facebook、Microsoft、Amazon、Slack已经入场。。。
很多人担心世纪佳缘做一个AI,是不是想让机器人跟用户假聊。真没有,世纪佳缘所有的信件都是用户触发才发的。只是有些页面的发信提醒说明不够明显, 用户在使用之前没看到。不过机器人确实可以用于辅助用户与异性聊天。两个陌生人聊天经常出现的尴尬是不知道接下来聊啥。我们在考虑用一个AI为佳缘每个用户定制一个机器人聊天导师,它可以建议用户接下来该怎么跟对方聊,提升用户的沟通能力。虽然佳缘自己会用一个AI,但一个AI主要还是对外的,面向小微企业和个人开发者。
一个AI简介
一个AI中包含几个重要概念:词库、场景、动作、状态。词库是一个规范的自然语言短语集合,通常定义为应用所在领域的关键词、术语。词库在学术领域通常被称为实体(entity),是自然语言处理中的重要概念。词库在一个AI中用于从用户输入中提取动作和状态所需的参数值。一个AI不仅内置了常用的系统类型,如数字、日期、时间等,也为开发者定义自己词库提供了灵活便捷的支持。开发者可以定义包含同义词的同义词词库,也可以定义不包含同义词的枚举词库,甚至可以定义由其他词库组合而成的组合词库。
一个AI中的场景通常对应着从用户提问到AI产生答复的一轮交互过程。一个场景主要由用户提问、AI回复、动作和输入输出状态所组成。
动作是用户提问匹配到的场景执行后触发的一个特定操作,它可以使用从用户输入中提取出的词库作为输入参数。动作相当于代码中的函数,其具体实现在开发者端,一个AI系统端只是一个标识,相当于函数声明。
状态记录了对话交互的背景信息,主要用于上下文信息(如参数值)的传递。此外,它也被用于管理会话流,串联起原本孤立的不同场景。多个场景通过场景里的输入输出状态连接成图网络以完成更加复杂的功能。
一个AI遵循的流程和Api.ai类似,在接收到用户的输入后,流程如下:
- 一个AI首先识别用户输入中的词库和用户场景。词库和场景的识别并不是独立的,相同的词在不同的场景下可能属于不同的词库类型。在场景识别时也会考虑到场景设定的状态是否存在。如果某场景设定的输入状态不是都存在,则不会把用户输入识别为此场景。
- 查看动作中需要的必须参数是否都已获得取值。如果存在必须参数还没有获得取值,就触发设定好的提示语作为机器人回复,要求用户输入对应的参数取值。参数的取值不仅可以来自于此次用户输入中的词库,也可以来自于输入状态中的变量。对于非必须参数,可以为他们设定默认值。
- 只有所有必须参数都已收集到取值,此场景才能完成,场景设定的AI回复才会作为回复返回给用户。到这里此场景就完成了,用户之后的输入就会触发新的循环。
一个AI定位于服务国内开发者,所以也引入了一些中文相关的特性,例如查询接口支持未分词的整句话输入,以及分词后的语句输入。
更多信息可见一个AI官方文档,也欢迎大家去一个AI官网(www.yige.ai)逛逛,尝试创建年轻人的第一个AI应用吧^_^。除一个AI官方论坛外,我们也有微博官号“@一个AI”,微信公众号“yigeAI”,开发者微信交流群(给“@一个AI”或者“@breezedeus”私信,写明加入开发者微信群)。