作者 | VK
编辑 | 奇予纪
出品 | 磐创AI团队出品
在Docker上运行Rasa
这是如何使用Docker构建Rasa助手的指南。如果你之前没有使用过Rasa,我们建议你先Rasa教程 开始。安装Docker
如果你不确定是否安装了Docker,可以通过运行下面的命令来检查:
docker -v && docker-compose -v# Docker version 18.09.2, build 6247962# docker-compose version 1.23.2, build 1110ad01
如果你的计算机上安装了Docker,则输出应显示已安装的Docker和Docker Compose版本。如果该命令不起作用,则必须安装Docker
。
使用Rasa和Docker构建助手
本节将介绍以下内容:- 创建你的Rasa项目并训练初始模型
- 通过Docker与你的AI助手交谈
- 选择Docker镜像标记
- 使用Docker训练你的Rasa模型
- 使用Docker与你的助手交谈
- 使用Docker运行Rasa服务
创建项目
你将使用rasa init
命令来创建项目。唯一的区别是你将使用镜像
rasa/rasa
在Docker容器中运行Rasa。,请运行以下命令初始化项目:
docker run -v $(pwd):/app rasa/rasa init --no-prompt
这个命令是什么意思?
-v $(pwd):/app
将当前工作目录挂载到Docker容器中的工作目录。这意味着你在计算机上创建的文件将在容器内可见,并且容器中创建的文件将同步回你的计算机。rasa/rasa
是要运行的docker镜像的名称。- Docker镜像将
rasa
命令作为其入口点,这意味着你不必键入rasa init
,只需init
即可。
- 创建了Rasa项目
- 使用项目的训练数据训练初始模型
ls -1
初始项目文件应该都在那里,以及包含训练的模型的models
目录。
注意: 默认情况下,Docker以root用户身份运行容器。因此,这些容器创建的所有文件都将由root拥有。如果要使用其他用户运行容器,请参阅docker和docker-compose的文档。
和你的助手交谈
要与新训练的助手交谈,请运行以下命令:
docker run -it -v $(pwd):/app rasa/rasa shell
这将启动一个shell,你可以在其中与助手聊天。请注意,此命令包含参数
-it
,这意味着你以交互方式运行Docker,并且你可以通过命令行提供输入。对于需要交互式输入的命令,例如
rasa shell
和
rasa interactive
,你需要传递
-it
参数。
自定义你的模型
选择一个标记
为了使镜像尽可能小,我们发布了安装了不同依赖项的rasa / rasa
镜像的不同标记。有关依赖性的更多信息,请参阅选择管道
。
所有标签都以版本开头 -
latest
标记对应于当前的主版本。标记是:
- {version}
- {version}-spacy-en
- {version}-spacy-de
- {version}-mitie-en
- {version}-full
{version}
标记包含运行
supervised_embeddings
管道所需的所有依赖项。如果你使用具有预训练词向量的组件,则需要选择相应的标记。或者,你可以使用
-full
标记,其中包括所有管道依赖项。
注意: 你可以在此处查看Rasa Docker镜像的所有版本和标记。
使用Docker训练自定义Rasa模型
编辑config.yml
文件以使用所需的管道,并将NLU和Core数据放入
data/
目录中。现在,你可以通过运行下面的命令来训练你的Rasa模型:
docker run \ -v $(pwd):/app \ rasa/rasa:latest-full \ train \ --domain domain.yml \ --data data \ --out models
这是该命令中发生的事情:
-v$(pwd):/app
:将项目目录安装到Docker容器中,以便Rasa可以使用你的训练数据训练模型rasa / rasa:latest-full
:使用标记为latest-full
的Rasa镜像train
:在容器内执行rasa train
命令。有关更多信息,请参阅命令行界面。
PYTHONPATH = $PYTHONPATH:
,确保模块位于Python模块搜索路径中。
运行Rasa服务
要在生产中运行AI助手,请在credentials.yml
中配置所需的语音和消息通道
。如果此文件不存在,请使用以下命令创建:
touch credentials.yml
然后根据你连接的通道进行编辑。之后,运行训练模型:
docker run \ -v $(pwd)/models:/app/models \ rasa/rasa:latest-full \ run
命令说明:
-v $(pwd)/models:/app/models
:在容器中挂载已训练的Rasa模型目录rasa/rasa:latest-full
:使用标记为latest-full
的Rasa镜像run
:执行rasa run
命令。有关更多信息,请参阅命令行界面
使用Docker Compose运行多个服务
要将Rasa与其他服务(例如用于自定义操作的服务)一起运行,建议使用Docker Compose。Docker Compose提供了一种简单的方法,可以将多个容器一起运行,而无需运行多个命令。
首先创建一个名为docker-compose.yml
的文件:
touch docker-compose.yml
将以下内容添加到文件中:
version: '3.0'services: rasa: image: rasa/rasa:latest-full ports: - 5005:5005 volumes: - ./:/app command: - run
该文件以你要使用的Docker Compose规范版本开头。每个容器都在docker-compose文件中声明为service
。第一项服务是rasa服务。
该命令类似于docker run
命令。ports
部分定义容器和你的主机系统之间的端口映射。在这种情况下,它会在你的主机的5005
端口上提供5005
的rasa
服务。这是Rasa的REST Channel接口的端口。
注意: 由于Docker Compose启动了一组Docker容器,因此在执行run
命令后不再可能连接到单个容器的命令行。
要运行docker-compose.yml
中配置的服务,请执行:
docker-compose up
添加自定义操作
要创建更复杂的助手,你需要使用自定义操作 。继续上面的示例,你可能希望添加一个操作,告诉用户一个笑话来给他们加油。创建自定义操作
首先在actions
目录中创建自定义操作:
mkdir actions# Rasa SDK需要一个python模块。# 因此,请确保你在目录中包含此文件。touch actions/__init__.pytouch actions/actions.py
然后使用Rasa SDK构建自定义操作,例如:
import requestsimport jsonfrom rasa_sdk import Actionclass ActionJoke(Action): def name(self): return "action_joke" def run(self, dispatcher, tracker, domain): request = requests.get('http://api.icndb.com/jokes/random').json() # 调用api joke = request['value']['joke'] # 从返回的json响应中提取一个笑话 dispatcher.utter_message(joke) # 将消息发送回用户 return []
接下来,在故事和域文件中添加自定义操作。继续使用
rasa init
中的示例机器人,将
data/stories.md
中的
utter_cheer_up
替换为自定义操作
action_joke
,并将
action_joke
添加到域文件中的操作。
#### 添加操作服务 自定义操作由操作服务运行。要将其与Rasa实例一起运行,请将服务
action_server
添加到
docker-compose.yml
:
version: '3.0'services: rasa: image: rasa/rasa:latest-full ports: - 5005:5005 volumes: - ./:/app command: - run action_server: image: rasa/rasa-sdk:latest volumes: - ./actions:/app/actions
这会为包含操作服务的Rasa SDK提取镜像,将自定义操作安装到其中,然后启动服务。
要指示Rasa使用操作服务,你必须告诉Rasa它的位置。将此添加到你的
endpoints.yml
(如果它不存在,创建它):
action_endpoint: url: http://action_server:5055/webhook
运行
docker-compose up
以与Rasa一起启动操作服务。
添加自定义依赖项
如果你的自定义操作具有系统或Python库的其他依赖项,则可以通过扩展官方镜像来添加这些依赖项。 为此,请创建一个名为Dockerfile
的文件,在该文件中扩展官方镜像并添加自定义依赖项。例如:
# 扩展官方Rasa SDK映像FROM rasa/rasa-sdk:latest# 添加自定义系统库(例如git)RUN apt-get update && \ apt-get install -y git# 添加自定义python库(例如jupyter)RUN pip install --no-cache-dir jupyter
然后,你可以通过以下命令构建镜像,并在
docker-compose.yml
中使用它而不是
rasa/ rasa-sdk
镜像。
docker build . -t :
添加自定义跟踪器存储
默认情况下,所有对话都保存在内存中。这意味着一旦重新启动Rasa服务,所有对话都将丢失。如果你想要保留对话,可以使用其他跟踪器存储 。使用PostgreSQL作为跟踪器存储
首先将PostgreSQL添加到docker-compose文件中:
postgres: image: postgres:latest
然后将PostgreSQL添加到端点配置
config/endpoints.yml
文件中的的
tracker_store
部分:
tracker_store: type: sql dialect: "postgresql" url: postgres db: rasa
使用MongoDB作为跟踪器存储
首先将MongoDB添加到docker-compose文件中。下面的示例添加了MongoDB以及一个UI(你可以跳过此步骤),可以通过localhost:8081
访问。MongoDB实例的用户名和密码指定为
rasa
和
example
。
mongo: image: mongo environment: MONGO_INITDB_ROOT_USERNAME: rasa MONGO_INITDB_ROOT_PASSWORD: examplemongo-express: image: mongo-express ports: - 8081:8081 environment: ME_CONFIG_MONGODB_ADMINUSERNAME: rasa ME_CONFIG_MONGODB_ADMINPASSWORD: example
然后将MongoDB添加到端点配置
endpoints.yml
文件中的的
tracker_store
部分:
tracker_store: type: mongod url: mongodb://mongo:27017 username: rasa password: example
然后使用docker-compose up
启动所有组件。
使用Redis作为跟踪器存储
首先将Redis添加到docker-compose文件中:
redis: image: redis:latest
然后将Redis添加到端点配置endpoints.yml
文件中的tracker_store
部分:
tracker_store: type: redis url: redis
使用自定义跟踪器存储实现
如果你有踪器存储的自定义实现,则有两个选项可将此存储添加到Rasa:- 扩展Rasa镜像
- 作为volume安装
endpoints.yml
文件中,如跟踪器存储
中所述。如果你希望跟踪器存储组件(例如某个数据库)成为Docker Compose文件的一部分,请在其中添加相应的服务和配置。
原文链接:https://rasa.com/docs/
小白也能学会的PyTorch入门系列
专栏目录
1.Rasa 聊天机器人专栏开篇:简介与安装
2.Rasa 聊天机器人专栏(一):基本原理介绍
3.Rasa 聊天机器人专栏(二):命令行界面
4.Rasa 聊天机器人专栏(三):架构介绍
5.Rasa 聊天机器人专栏(四):消息和语音通道
6.Rasa 聊天机器人专栏(五):模型评估
7.Rasa 聊天机器人专栏(六):验证数据
8.Rasa 聊天机器人专栏(七):运行服务
9.Rasa 聊天机器人专栏(八):在Docker上运行Rasa
10.Rasa 聊天机器人专栏(九):云存储
![a3fffa7f85fdc8d77b6375fc21ab9fe7.png](https://img-blog.csdnimg.cn/img_convert/a3fffa7f85fdc8d77b6375fc21ab9fe7.png)
你与未来只差一个
磐创AI
![4682558a54f315c4bc2349bd651994b7.gif](https://img-blog.csdnimg.cn/img_convert/4682558a54f315c4bc2349bd651994b7.gif)
点击