對話機器人框架 CommuneChatbot 釋出 v0.1.0 版

烈風發表於2020-01-03

開源對話機器人開發框架 CommuneChatbot https://github.com/thirdgerb/chatbot 釋出 v0.1.0 版了。

1. 專案介紹

"Commune" 是 "親切交談" 的意思。CommuneChatbot 這個專案則是想通過 “對話” 的形式提供一種人與機器的互動方式。在這個思路中,“對話”不是目的,而是“操作機器”的手段。

簡單來說,CommuneChatbot 是一個 :

  • 個人開源專案
  • 開發語言使用 PHP 7.2
  • 可對接語音、即時通訊、公眾號、智慧音響等平臺,搭建對話機器人
  • 最大特點是 多輪對話管理引擎, 用於解決 複雜多輪對話問題
  • 基於 Swoole + Hyperf 提供協程化的高效能服務端,提供工作站
  • 使用自然語言單元(Rasa,百度UNIT等)作為中介軟體,接入自然語言解析能力
  • 提供工程化 (模組/可配置/元件化) 的開發框架
  • 目標是能夠像開發網站、觸屏App一樣開發複雜的對話式應用。

專案相關的網址:

專案目前的Demo有:

  • 網頁版 Demo : https://communechatbot.com/
  • 微信公眾號 Demo : 搜尋公眾號 “CommuneChatbot”
  • 百度智慧音響 : 對音響說 “開啟三國群英傳” 或 “開啟方向迷宮”

推薦文件:

如有興趣, 可以加入討論 QQ 群: 907985715 ,或是參與專案 ISSUE :

2. 快速安裝

如果想要快速嘗試這個專案,可以只安裝主框架。先要檢查依賴:

  • PHP >= 7.2
  • 基本 PHP 擴充套件
  • Intl 擴充套件(用於實現國際化)
  • Composer

然後在命令列中安裝:

$ git clone https://github.com/thirdgerb/chatbot.git
$ cd chatbot
$ composer install

如果 Composer 速度太慢, 建議使用 阿里雲的Composer映象 。 完成安裝後,執行

$ php demo/console.php

檢視Demo。更多內容請檢視 快速教程, 或 搭建應用

3. 開發樣例

使用 CommuneChatbot 專案開發多輪對話機器人,一個極簡的例子是這樣的:

/**
 * 定義一個 Hello world 的上下文
 * @property string $name userName
 */
class HelloWorldContext extends OOContext
{
    // 上下文的介紹
    const DESCRIPTION = 'hello world!';

    // 對話單元 "start"
    public function __onStart(Stage $stage) : Navigator
    {
        return $stage->buildTalk()

            // 傳送訊息給使用者
            ->info('hello world!!')

            // 進入 "askName" 對話單元
            ->goStage('askName')
    }

    // 對話單元 "askName"
    public function __onAskName(Stage $stage) : Navigator
    {
        return $stage->buildTalk()

            // 詢問使用者姓名
            ->askVerbal('How may I address you?')

            // 等待使用者的訊息
            ->hearing()

            // 接受到使用者的訊息, 符合答案的格式
            ->isAnswer(function(Answer $answer, Dialog $dialog) {

                // 將答案賦值給上下文記憶
                $this->name = $answer->toResult();

                // 進入對話單元 "menu"
                return $this->goStage('menu');
            })

            // 結束用 Hearing API 定義對話邏輯
            ->end();
    }

    // 對話單元 "menu"
    public function __onMenu(Stage $stage) : Navigator
    {
        // 用 "menu" 工具構建一個 對話單元元件
        $menu = new Menu(
            // 選單向使用者的提問
            'What can I help you?',

            // 給使用者回答的建議
            [
                // 進入 "play game" 的上下文
                PlayGameContext::class,

                // 進入 "order drink" 的上下文
                OrderDrinkContext::class,

                // 進入 "simple chat" 的上下文
                SimpleChatContext::class,
            ]
        );

        return $stage

            // 當目標上下文結束後, 觸發這個回撥方法
            ->onFallback(function(Dialog $dialog) {
                // 重複當前 Menu 對話
                return $dialog->repeat();
            });

            // 載入 stage component
            ->component($menu);
    }
}

多輪對話上下文是完全可程式設計的,既可以通過程式碼來定義,也可以基於配置檔案動態生成。

4. 關於作者

CommuneChatbot 專案由 ThirdGerb 基於個人興趣設計並開發。

作者是一名服務端工程師,對於對話互動形式的應用有很強的興趣,但想要開發的應用往往卡在複雜多輪對話問題上,而找到的解決方案還不夠理想,因此自己動手開發了這個專案。

作者關於對話機器人的各種思考和觀點,謹供參考。如果發現錯謬之處,煩請批評指教,非常感謝!如有興趣,可以加入討論 QQ 群: 907985715

本作品採用《CC 協議》,轉載必須註明作者和本文連結

多輪對話機器人框架 commune/chatbot 專案釋出了demo測試. 微信關注CommuneChatbot 可以測試. QQ交流群: 907985715

相關文章