用 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 版本 问候机器人以开始对话。
神奇宝贝搜索- 按名称或编号搜索神奇宝贝。
琐事测验- 输入开始进行快速琐事测验。