開源對話機器人開發框架 CommuneChatbot https://github.com/thirdgerb/chatbot 釋出 v0.1.0 版了。
1. 專案介紹
"Commune" 是 "親切交談" 的意思。CommuneChatbot 這個專案則是想通過 “對話” 的形式提供一種人與機器的互動方式。在這個思路中,“對話”不是目的,而是“操作機器”的手段。
簡單來說,CommuneChatbot 是一個 :
- 個人開源專案
- 開發語言使用 PHP 7.2
- 可對接語音、即時通訊、公眾號、智慧音響等平臺,搭建對話機器人
- 最大特點是 多輪對話管理引擎, 用於解決 複雜多輪對話問題
- 基於 Swoole + Hyperf 提供協程化的高效能服務端,提供工作站
- 使用自然語言單元(Rasa,百度UNIT等)作為中介軟體,接入自然語言解析能力
- 提供工程化 (模組/可配置/元件化) 的開發框架
- 目標是能夠像開發網站、觸屏App一樣開發複雜的對話式應用。
專案相關的網址:
- 專案網站:https://communechatbot.com/
- 開發手冊:https://communechatbot.com/docs (隨時更新)
- 主框架倉庫:https://github.com/thirdgerb/chatbot
- 工作站倉庫:https://github.com/thirdgerb/studio-hyperf
專案目前的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
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