用 Go 編寫的簡單聊天機器人框架,使用 YAML 進行設定。該專案的目的是使用一些配置文件創建非常簡單的基於文字的聊天機器人。
這個專案的靈感原本來自於Flottbot 和我使用Rasa 的經驗。
安裝
文件
你的第一個機器人
clf.yml文件
fsm.yml文件
運行你的機器人
與您的機器人互動
用法
命令列介面
Docker 組合
庫伯內斯
進口
範例
go get -u github.com/jaimeteb/chatto
通過碼頭工人:
docker pull jaimeteb/chatto:latest
請參閱文件以取得範例、設定指南和參考。
Chatto 將有限狀態機的一致性與機器學習的彈性結合。它有三個主要組件:分類器、有限狀態機和擴展。
Chatto 的一個非常基本的目錄結構如下:
. └──data ├── clf.yml └── fsm.yml
首先建立data
目錄和 YAML 檔案。
mkdir datatouch 資料/clf.yml 資料/fsm.yml
clf.yml檔案定義如何將使用者訊息分類為指令(意圖)。從這個非常簡單的配置開始:
分類: - 命令:「開啟」文字: - “打開” - “打開” - 指令:「turn_off」文字: - “關閉” - “關閉”
fsm.yml檔案定義狀態之間的轉換、進行這些轉換的命令以及要在其中發送的答案。從該文件內容開始:
過渡: - 從: - “initial”變成:“on”指令:“turn_on”答案: - 文字:“正在開啟。” - 從: - 「on」進入:「initial」指令:「turn_off」答案: - 文字:“正在關閉。” - 文字:“”預設值:未知:“不能這樣做。”
要啟動您的機器人,請運行:
chatto --路徑資料/
如果您使用 Docker,請運行:
碼頭運行 -它 -e CHATTO_DATA=./數據 -v $PWD/數據:/數據 jaimeteb/chatto:最新 chatto——路徑數據
要與您的機器人交互,請運行:
chatto cli
就是這樣!現在,您可以說「開啟」或「開啟」以進入開啟狀態,然後說「關閉」或「關閉」以返回初始狀態。但是,您不能從on進入on ,或從initial進入initial 。
這是這個簡單的有限狀態機的圖表:
您可以將您的機器人與Telegram、Twilio、Slack和任何您喜歡的工具集成
在 YAML 檔案所在的目錄中執行chatto
,或使用--path
標誌指定它們的路徑:
chatto --path ./your/data
要在 Docker 上運行,請使用:
碼頭運行 -p 4770:4770 -e CHATTO_DATA=./你的/數據 -v $PWD/你的/數據:/數據 賈梅特卜/查托
您可以透過下載chatto cli
工具來使用 Chatto CLI 工具。 CLI 可以輕鬆測試您的機器人互動。
chatto cli --url 'http://mybot.com' -連接埠 4770
您也可以在 Docker Compose 上使用 Chatto。 docker-compose.yml
看起來像這樣:
版本:「3」服務:chatto:圖片:jaimeteb/chatto:$ {CHATTO_VERSION}env_file:.envports: - “4770:4770”卷: - ${CHATTO_DATA}:/datadepends_on: - 分機 - redis ext:image: odise/busybox-curl # 帶有憑證的繁忙方塊指令: ext/extexpose: - 8770卷: - ${CHATTO_DATA}/ext:/ext redis:圖片:bitnami/redis:6.0環境: - REDIS_PASSWORD=${STORE_PASSWORD}公開: - 6379
這需要一個.env
檔來包含必要的環境變數:
# Chatto configuration CHATTO_VERSION=latest CHATTO_DATA=./your/data # Extension configuration CHATTO_BOT_EXTENSIONS_EXTENSION_NAME_URL=http://ext:8770 # Redis CHATTO_BOT_STORE_HOST=redis CHATTO_BOT_STORE_PASSWORD=pass # Logs CHATTO_BOT_DEBUG=true
包含所有文件的目錄結構如下所示:
. ├── data │ ├── ext │ │ ├── ext │ │ └── ext.go │ ├── bot.yml │ ├── chn.yml │ ├── clf.yml | └── fsm.yml ├── docker-compose.yml └── .env
最後,運行:
docker-compose up -d redis ext docker-compose up -d chatto
擴展伺服器必鬚根據其語言執行。
對於這個docker-compose.yml
文件,您必須先建立 Go 擴充功能:
go build -o data/ext/ext data/ext/ext.go
擴展伺服器必須在 Chatto 初始化之前運行。
在deploy/kubernetes
目錄下,您可以找到一個範例部署:
種類 | 姓名 | 描述 |
---|---|---|
秘密 | chatto-config-secrets | 包含 Chatto 將用於授權的令牌 |
配置映射表 | chatto-config-envs | 包含bot.yml檔案的環境變數 |
配置映射表 | chatto-config-files | 包含clf.yml和fsm.yml文件 |
部署 | chatto | 基於jaimeteb/chatto Docker 映像的 Chatto 部署 |
服務 | chatto-service | chatto 部署服務 |
入口 | chatto-ingress | chatto-service 服務的入口 |
執行以下命令在 Kubernetes 上部署:
kubectl apply -f ./deploy/kubernetes/
提供可導入的機器人伺服器和客戶端包,以允許嵌入到您自己的應用程式中。
嵌入伺服器:
package mainimport ( "flag""github.com/jaimeteb/chatto/bot")func main() { port := flag.Int("port", 4770, "指定要使用的連接埠。") path := flag. String ("path", ".", "YAML 檔案的路徑。") flag.Parse() server := bot.NewServer(*path, *port) server.Run() }
嵌入客戶端:
package myserviceimport ( "log""github.com/jaimeteb/chatto/bot")type MyService struct { chatto bot.Client}func NewMyService(url string, port int) *MyService { return &MyService{chatto: bot.NewClient(url,港口)} }func (s *MyService) Submit(question *query.Question) error {answers, err := s.chatto.Submit(question) if err != nil { return err } // 將答案印到標準輸出for _,answer := rangeanswers { fmt.Println(answer.Text) } 回傳零}
我在範例下提供了一些設定檔。克隆存儲庫並使用所需示例的-path
運行chatto
來測試它們(對於使用擴展的擴展,請首先運行其各自的擴展)。
有關這些範例的更多信息,請參閱文檔
Mood Bot - Rasa 的 Mood Bot 的 chatto 版本 問候機器人以開始對話。
神奇寶貝搜尋- 按名稱或編號搜尋神奇寶貝。
瑣事測驗- 輸入開始進行快速瑣事測驗。