一個Bot的自白

我是誰?從哪裏來?到哪裏去?

作爲一個bot,思考這樣帶有哲學色彩的問題,是否有點可笑?別笑,我是認真的。


1我是誰




我是bot,從親緣上看,和機器人Robot 沾親帶故。

Robot是一種自動化的機器,這種機器具備一些與人或生物相似的智能能力,如感知能力、規劃能力、動作能力和協同能力,是一種具有高度靈活性的自動化機器。但是,我實際上更多地被認爲是chatbot,即聊天機器人,然而聊天只是我職能的一部分,我們bot是由純軟件構成的智能服務。

談到智能服務,總給人一種高大上的感覺。實際上, 從計算機科學的角度來看, 仍然是提供輸入輸出能力的一組執行代碼。只不過,對我們bot而言,輸入更多是人們日常溝通的語言,可以是語音,也可以是語音經過識別之後的文本,我們的輸出同樣是文本, 以及基於這些文本合成的聲音,甚至於相關的圖片等多媒體信息。

一般地,我們bot是一種具有自然語言處理能力(NLP)的軟件服務。


2我的與衆不同




我們bot 的最大特點就是智能化, 有時候也被稱爲智能代理。

作爲軟件服務, 我們和傳統的軟件服務並沒有本質的區別,比如互聯網服務中的web server,都是收到一個請求,給出一個響應,bot 同樣如此。但是, web server 一遍都是通過瀏覽器訪問的, 而我們的用戶可以通過各種各樣的智能終端訪問我們,這些智能終端包括智能手機, 智能平板,智能音箱,智能電視等等,所有這些智能終端的“智能”都是我們bot 賦予他們的。

在互聯網上, 人們通過鍵盤和鼠標完成與瀏覽器的交互,進而享受互聯網服務。而我們bot 帶來了人機交互上的革命, 人們可以通過自然語言,通過眼神,通過手勢等等, 就可以享用我們帶來的網絡服務。

隨着分佈式系統的發展,“術業有專攻”, NLP 的處理能力可以在我們bot 的內部實現,也可以在我們的外部實現。當NLP 服務在bot 的外部實現時,往往形成了一類基礎設施,相當於bot世界的共享服務,這時候,bot 的智能是通過網絡通信形成的,因爲在計算機的世界裏, 一切都是API。

當NLP等服務站到了bot 的前面,用戶的自然交互先流經這些服務,將非結構化的數據轉化爲了結構化數據,我們bot 就更像是一個web 服務。那些個服務往往形成了分佈式的智能操作系統,例如百度的DuerOS, 亞馬遜的Alex 等等。

當NLP等服務站到了bot 的後面,用戶的自然交互先流經我們bot,我們將非結構化的數據進行預處理,轉化爲了結構化或半結構化數據,再透傳給他們。那些個服務往往形成了分佈式的智能服務,例如百度的UNIT,以及其他人工智能公司提供的開放服務等等。

在程序的世界裏, 一切的一切歸根到底都是系統調用,在bot的世界裏, 我們的智能性歸根結底都是對AI服務的調用。


3我的江湖門派




有人的地方,就有江湖,bot 是爲人類提供智能服務的, 同樣也有着自己的江湖。

從用戶的角度來看,爲了區別於web 應用或者互聯網應用, 人們把bot提供的能力稱爲技能。bot 是技能的載體和實現, 技能是bot的功能性描述。人們把技能按照各種方式進行分門別類,形成不同的派系。如果一個技能提供了天氣預報的服務,就把它叫做天氣技能,提供了鬧鐘服務,就叫做鬧鐘技能, 那麼一個技能既提供了歌曲服務,又提供了器樂的音樂服務,叫什麼呢?人們管它叫做音樂垂類技能。通俗的說,根據技能的功能複雜性,可以分爲單一技能和垂類技能。

從技能的實現方式上來看,又往往分爲兩大類:端技能和雲技能,這取決於該技能有無客戶端獨立載體。類比一下,可能會相對容易地弄清雲技能和端技能的區別。如果bot 類似於傳統的互聯網web應用,那麼就提供了一個雲技能;如果bot類似於移動App,則提供了一個端技能。在現實的DuerOS生態系統中,基於模版以及DPL 等技術實現的技能都是雲技能,而通過Android App, H5應用,微信小程序,支付寶小程序,手機百度小程序等客戶端實現的技能都是端技能。不論雲技能還是端技能,都可以實現類似的用戶體驗, 對用戶而言並無本質區別,只是我們bot的實現方式不同罷了。

從交互的易用性來看, 技能又可以分爲4個等級,也就是在DuerOS 生態系統中提出的L1~L4技能:

  • L1技能只支持用戶通過語音打開和關閉技能,在技能的內部,並不支持更多的語音交互;

  • L2技能除了支持用戶通過語音打開和關閉技能之外,在技能的內部,還支持有限的語音交互;

  • L3技能除了支持用戶通過語音打開和關閉技能之外,在技能的內部,能夠支持大量的語音交互,能夠使用戶通過語音交互滿足技能所提供的全部能力;

  • L4技能與L3技能的區別在於是否有技能的邊界,也就是說, L3技能是用戶通過和我們bot約定的喚醒詞來進入技能, 而在L4技能中, 用戶可以直接進入技能內部, 來使用L4技能所提供的能力。

  • 站在不同的視角, 人們還可以把技能進行各種其他的分類, 進而形成了一個個bot 的門類。



4我平凡而又不平凡的一生




作爲由代碼組成的軟件, 我們bot的生命週期同樣避免不了軟件工程的宿命:創建,運營,迭代和消亡。

根據bot 所提供能力的複雜程度, 代碼實現的複雜程度會有較大的不同,但是創建bot的流程大同小異。以DuerOS生態系統爲例,一個bot從創建到上線運行的流程如下:

創建bot,首先要提供關於bot 的元數據,包括:

  1. bot 自身的描述性數據,例如,技能的名稱,id,圖標,說明圖例,是否付費等等

  2. bot 所支持技能交互的描述性數據,例如,與交互模型相關的意圖,槽位,詞典等,自定義的點擊事件,手勢等其他交互對應的數據等;

  3. bot 在運行時所需的配置數據,例如,支持運行的終端/終端組類型,服務部署的URL,平臺的回調地址, 賬戶關聯的授權地址等等。

所有這些元數據的描述, 如果對原來的web service 有所瞭解的話, 會發現他們與WSDL 有着類似的味道,區別主要是技能交互的描述性數據, 這也是我們bot 自然語言處理能力的重要輸入之一。

技能中具體能力的代碼實現,與程序員寫其他程序沒什麼兩樣,無非是判斷,循環,計算和字符串處理,可以用任意的編程語言實現。技能的調試稍顯複雜,尤其是端技能的調試步驟會更多一些,因爲分佈式系統的調試本就不那麼簡單。

在調試和部署完成後, 就可以上線提供服務了,如果使用了類似DuerOS 這樣的操作系統,和需要通過官方的審覈才能上線, 當然, 沒有使用類似的系統, 完全是自主實現的bot,也需要在QA的測試和審覈通過之後,才能實施上線。

技能上線了,意味我們bot 開始正式提供服務了,面向用戶的運營, 面向具體服務的能夠增減,Bot 隨時都會進入持續迭代的演進流程。由於用戶持續使用我們的能力, 迭代演進的週期可能會很長,即使不再迭代,Bot 仍可能運行相當長的時間。但是, 如果出現了服務不可用,或者技能根本沒有用戶使用, Bot 就是面臨下線,往往意味着技能生命週期的終止。

時間是短暫的, bot 的一生也是如此, 我們存在的意義就是是否給人們帶來了少許的便利,是否給人們帶了些許的歡樂,是否給人們留下了一點兒美好的回憶。

推薦閱讀:

吊打labelme,它纔是圖像標註界的yyds
百度搜索穩定性問題分析(下)
百度搜索穩定問題分析(上)

本文分享自微信公衆號 - 百度開發者中心(baidudev)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章