能理解聊天记录的微信机器人

TL;DR: 做了个在两个群中间互相转发消息的机器人(github),对聊天机器人的一些思考,可以把文本理解加进来做有意思的应用。

最近看到了一些基于微信机器人的有意思的应用,比如用微信汇报模型的训练状态(TensorFlowKeras)。这个是个很好的出发点。聊天机器人(chatbot)这个概念在slack, telegram, skype甚至最早的google wave上面流行已经有一段时间了。大家主要用它来:

  • 进行一些推送服务 。一个例子就是上面的模型训练。还有持续集成(continuous integration)上也有一些bot可以让你知道软件编译,测试和部署的状态。
  • 提供简单的信息服务,比如可以查天气,查github issue的bot。
  • 提供一些基于指令的服务。比如扎克伯格做的bot,输入开门的指令可以把门打开。
  • 用一定程度的自然语言理解来陪聊.

但我觉得这些并没有体现聊天机器人的核心优势。仔细看这四个方面的应用,它们其实都可以不通过聊天来完成,甚至不通过聊天可能会更方便。比如推送服务有系统信息推送(pushbullet, IFTTT notification等), 查天气系统就有app,智能家居我更希望点点按钮而不是打字,陪聊这个必须要聊天没办法。大家愿意把它做到聊天程序里面去,主要是因为用户实在是太话唠了,很多时间都花在聊天程序里面,这样做成bot等于多了一个入口,何乐而不为?但这样做并不代表这个入口是最优的或者无可取代的。

那聊天机器人适合什么场景呢?要思考这个问题必须首先要明确聊天机器人和其他平台的区别在什么地方。除了UX层面必须基于文字,用户经常在用以外,还有一个核心区别是这个机器人其实是可以拿到聊天记录的(当然还取决于隐私设置 )。在这个前提下可以做很多很多有意思的应用。一个例子是我们有个科大校友AI群,里面大多数情况都是在认真讨论AI相关的话题。但微信群是为了聊天设计的,讨论上毕竟不比基于主题的BBS,没有主题,没有回复,没有话题(hashtag),整个信息流非常杂乱。但大家懒的天性又决定了,这种讨论更多的是在微信(或者其他即时通信软件)上完成的,不太可能把它搬到BBS上去——每次填个主题,点个回复太麻烦了。有没有可能用微信机器人,一方面又保持这种基于聊天软件的便捷的特性,一方面又能整理整个信息流,让信息变得有组织?比如一个人一天没看群了,晚上跑来看看机器人整理的总结,就一目了然。以后搜索也方便。这是个很有意思的问题。

“让信息有组织”还是太笼统了。具体地说,可以从以下几个方面进行:

  • 跨群转发。这是个非常实用的功能。对群来说,因为微信一个群最多500人, 跨群转发可以有效地把两个群拼到一起,实现更广泛的讨论。对个人来说,也可以用有选择的转发来把信息归档。比如看老板或者妹子在你加的几个群里每天都说了啥等等。
  • 聊天消息的主题归并,分析和搜索。微信聊天的基本单位是消息,但消息本身是非常碎片化的,很不适合搜索和分析。机器人可以把相关主题的消息归并起来,一方面可以大幅减小信息过载,一方面也可以从中得到更有价值的信息(类似视频分析里面把帧变成镜头)。这样分析以后可以做知识归档,用OneNote/印象笔记甚至公众号把讨论的成果沉淀下来。
  • 聊天脉络的梳理。群里的人一多,经常会出现几个话题并行出现的情况。这种情况对于理解和搜索都是非常不利的。机器人也需要把聊天的脉络进行梳理,在同一时间,把不同主题分别开。
  • 基本的统计数据。比如发言时间的分布,群的活跃度,成员的活跃度等等。做成漂亮的可视化,用户应该也会喜欢,给产品加分。

在可行性方面这个也是可能的。比如有基于python的itchat和基于typescript的wechaty。但稳定性可能是个问题,因为它们都不是微信官方支持的SDK,而是从Web微信的接口中抓包得到的API。基于itchat,我做了一个在两个群之间无脑转发消息的机器人(github),应该蛮有用的,希望能抛砖引玉。

在前面的知乎中的近义词系列里(),我们介绍了一些基于文本理解的小应用,比如自动辨别近义词,文章的分类,索引和搜索。那么这个微信机器人系列,就会尝试把这些技术用到聊天群里面去,看能不能做出一个真正有用的智能机器人。

Comments