Api.ai好的可控性降低了开发者的使用和维护门槛,它的灵活性较Viv低但也能满足大部分应用的需求。但是,api.ai对中文的支持很差,在国内访问延时也很大。前几天它宣布被Google收购了,估计被墙也只是时间问题。基于这些原因我们开发了一个AI,希望通过一个AI把api.ai范式的强大和便捷带给国内开发者。下面详细介绍下一个AI。 一个AI()是一个创建聊天机器人(bot)的免费在线平台。利用一个AI,开发者甚至产品和运营人员都可以轻松地开发聊天机器人应用,而不需要具备机器学习与自然语言处理等相关知识。一个AI的使命是: 让每个人都能轻松开发一个AI应用。
一个AI中包含几个重要概念: 词库、场景、动作、状态。词库是一个规范的自然语言短语集合,通常定义为应用所在领域的关键词、术语。词库在学术领域通常被称为实体(entity),是自然语言处理中的重要概念。 词库在一个AI中用于从用户输入中提取动作和状态所需的参数值。一个AI不仅内置了常用的系统类型,如数字、日期、时间等,也为开发者定义自己词库提供了灵活便捷的支持。开发者可以定义包含同义词的同义词词库,也可以定义不包含同义词的枚举词库,甚至可以定义由其他词库组合而成的组合词库。 一个AI中的场景通常对应着从用户提问到AI产生答复的一轮交互过程。一个场景主要由用户提问、AI回复、动作和输入输出状态所组成。 动作是用户提问匹配到的场景执行后触发的一个特定操作,它可以使用从用户输入中提取出的词库作为输入参数。动作相当于代码中的函数,其具体实现在开发者端,一个AI系统端只是一个标识,相当于函数声明。 状态记录了对话交互的背景信息,主要用于上下文信息(如参数值)的传递。此外,它也被用于管理会话流,串联起原本孤立的不同场景。多个场景通过场景里的输入输出状态连接成图网络以完成更加复杂的功能。
一个AI遵循的流程和Api.ai类似(见之前的流程图)。在接收到用户的输入后,流程如下: 一个AI首先识别用户输入中的词库和用户场景。词库和场景的识别并不是独立的,相同的词在不同的场景下可能属于不同的词库类型。在场景识别时也会考虑到场景设定的状态是否存在。如果某场景设定的输入状态不是都存在,则不会把用户输入识别为此场景。 查看动作中需要的 必须参数是否都已获得取值。如果存在必须参数还没有获得取值,就触发设定好的提示语作为机器人回复,要求用户输入对应的参数取值。参数的取值不仅可以来自于此次用户输入中的词库,也可以来自于输入状态中的变量。对于非必须参数,可以为他们设定 默认值。 只有所有必须参数都已收集到取值,此场景才能完成,场景设定的AI回复才会作为回复返回给用户。到这里此场景就完成了,用户之后的输入就会触发新的循环。 一个AI定位于服务国内开发者,所以也引入了一些中文相关的特性,atv,例如查询接口支持未分词的整句话输入,以及分词后的语句输入。 关于一个AI的由来,可见我之前的文章《创建Bot的中文平台——一个AI(yige.ai)》。更多信息可见一个AI官方文档,也欢迎大家去一个AI官网()逛逛,尝试创建年轻人的第一个AI应用吧^_^。 三、更智能的Viv Siri的开发团队从苹果离职后开发了Viv,一个bot平台。Viv还没正式发布,只是在今年5月9日的TechCrunch Disrupt(演讲视频)大会上展示了一下。 Viv中主要包含了两种对象: 概念对象(Concept Object)和 动作对象(Action Object),其中概念对象指的就是实体,而动作对象就是执行的动作。以概念和动作对象为结点,Viv构建了规模庞大的有向网络图。概念结点到动作结点的边表示此动作以此概念为输入参数,而动作结点到概念结点的边表示此动作的输出中包含了此概念。 如果两个概念结点存在 扩展(“is a”)或者 属性(“has a”)关系,那么它们之间也会存在有向边。随着开发者不断把新的概念和动作对象加入到Viv系统,这个网络图会逐渐延伸,越来越大。借助于Viv的 动态演化认知架构系统(Dynamically Evolving Cognitive Architecture System,简称DECAS),Viv能做的事会随着网络图的增大而指数增长。 (责任编辑:本港台直播) |