TL; DR: 做了個(gè)在兩個(gè)群中間互相轉(zhuǎn)發(fā)消息的機(jī)器人 (github),對(duì)聊天機(jī)器人的一些思考,可以把文本理解加進(jìn)來(lái)做有意思的應(yīng)用。

最近看到了一些基于微信機(jī)器人的有意思的應(yīng)用,比如用微信匯報(bào)模型的訓(xùn)練狀態(tài)(TensorFlow,Keras)。這個(gè)是個(gè)很好的出發(fā)點(diǎn)。聊天機(jī)器人 (chatbot) 這個(gè)概念在 slack, telegram, skype 甚至最早的 google wave 上面流行已經(jīng)有一段時(shí)間了。大家主要用它來(lái):
進(jìn)行一些推送服務(wù) 。一個(gè)例子就是上面的模型訓(xùn)練。還有持續(xù)集成(continuous integration)上也有一些 bot 可以讓你知道軟件編譯,測(cè)試和部署的狀態(tài)。
提供簡(jiǎn)單的信息服務(wù),比如可以查天氣,查 github issue 的 bot。
提供一些基于指令的服務(wù)。比如扎克伯格做的 bot,輸入開門的指令可以把門打開。
用一定程度的自然語(yǔ)言理解來(lái)陪聊.
但我覺得這些并沒有體現(xiàn)聊天機(jī)器人的核心優(yōu)勢(shì)。仔細(xì)看這四個(gè)方面的應(yīng)用,它們其實(shí)都可以不通過(guò)聊天來(lái)完成,甚至不通過(guò)聊天可能會(huì)更方便。比如推送服務(wù)有系統(tǒng)信息推送(pushbullet, IFTTT notification等), 查天氣系統(tǒng)就有app,智能家居我更希望點(diǎn)點(diǎn)按鈕而不是打字,陪聊這個(gè)必須要聊天沒辦法。大家愿意把它做到聊天程序里面去,主要是因?yàn)橛脩魧?shí)在是太話嘮了,很多時(shí)間都花在聊天程序里面,這樣做成bot等于多了一個(gè)入口,何樂而不為?但這樣做并不代表這個(gè)入口是最優(yōu)的或者無(wú)可取代的。
那聊天機(jī)器人適合什么場(chǎng)景呢?要思考這個(gè)問(wèn)題必須首先要明確聊天機(jī)器人和其他平臺(tái)的區(qū)別在什么地方。除了 UX 層面必須基于文字,用戶經(jīng)常在用以外,還有一個(gè)核心區(qū)別是這個(gè)機(jī)器人其實(shí)是可以拿到聊天記錄的(當(dāng)然還取決于隱私設(shè)置 )。在這個(gè)前提下可以做很多很多有意思的應(yīng)用。一個(gè)例子是我們有個(gè)科大校友 AI 群,里面大多數(shù)情況都是在認(rèn)真討論AI相關(guān)的話題。但微信群是為了聊天設(shè)計(jì)的,討論上畢竟不比基于主題的 BBS,沒有主題,沒有回復(fù),沒有話題(hashtag),整個(gè)信息流非常雜亂。但人類懶的天性又決定了,這種討論更多的是在微信(或者其他即時(shí)通信軟件)上完成的,不太可能把它搬到 BBS 上去——每次填個(gè)主題,點(diǎn)個(gè)回復(fù)太麻煩了。有沒有可能用微信機(jī)器人,一方面又保持這種基于聊天軟件的便捷的特性,一方面又能整理整個(gè)信息流,讓信息變得有組織?比如一個(gè)人一天沒看群了,晚上跑來(lái)看看機(jī)器人整理的總結(jié),就一目了然。以后搜索也方便。這是個(gè)很有意思的問(wèn)題。
“讓信息有組織”還是太籠統(tǒng)了。具體地說(shuō),可以從以下幾個(gè)方面進(jìn)行:
跨群轉(zhuǎn)發(fā)。這是個(gè)非常實(shí)用的功能。對(duì)群來(lái)說(shuō),因?yàn)槲⑿乓粋€(gè)群最多 500 人, 跨群轉(zhuǎn)發(fā)可以有效地把兩個(gè)群拼到一起,實(shí)現(xiàn)更廣泛的討論。對(duì)個(gè)人來(lái)說(shuō),也可以用有選擇的轉(zhuǎn)發(fā)來(lái)把信息歸檔。比如看老板或者妹子在你加的幾個(gè)群里每天都說(shuō)了啥等等。
聊天消息的主題歸并,分析和搜索。微信聊天的基本單位是消息,但消息本身是非常碎片化的,很不適合搜索和分析。機(jī)器人可以把相關(guān)主題的消息歸并起來(lái),一方面可以大幅減小信息過(guò)載,一方面也可以從中得到更有價(jià)值的信息(類似視頻分析里面把幀變成鏡頭)。這樣分析以后可以做知識(shí)歸檔,用OneNote/印象筆記甚至公眾號(hào)把討論的成果沉淀下來(lái)。
聊天脈絡(luò)的梳理。群里的人一多,經(jīng)常會(huì)出現(xiàn)幾個(gè)話題并行出現(xiàn)的情況。這種情況對(duì)于理解和搜索都是非常不利的。機(jī)器人也需要把聊天的脈絡(luò)進(jìn)行梳理,在同一時(shí)間,把不同主題分別開。
基本的統(tǒng)計(jì)數(shù)據(jù)。比如發(fā)言時(shí)間的分布,群的活躍度,成員的活躍度等等。做成漂亮的可視化,用戶應(yīng)該也會(huì)喜歡,給產(chǎn)品加分。
在可行性方面這個(gè)也是可能的。比如有基于 python 的 itchat 和基于 typescript 的 wechaty。但穩(wěn)定性可能是個(gè)問(wèn)題,因?yàn)樗鼈兌疾皇俏⑿殴俜街С值?SDK,而是從 Web 微信的接口中抓包得到的 API?;?itchat,我做了一個(gè)在兩個(gè)群之間無(wú)腦轉(zhuǎn)發(fā)消息的機(jī)器人 (github),應(yīng)該蠻有用的,希望能拋磚引玉。
在前面的知乎中的近義詞系列里(一,二,三,四),我們介紹了一些基于文本理解的小應(yīng)用,比如自動(dòng)辨別近義詞,文章的分類,索引和搜索。那么這個(gè)微信機(jī)器人系列,就會(huì)嘗試把這些技術(shù)用到聊天群里面去,看能不能做出一個(gè)真正有用的智能機(jī)器人。