下面我们开始创建第一个 Rasa 项目,带你进去 Rasa 的神奇世界。

1. 创建项目

我们即将创建一个名为 zobot 的聊天机器人,终端下执行以下操作:

  1. $ mkdir bird
  2. $ cd bird
  3. $ rasa init
  4. ? Please enter a path where the project will be created [default: current directory]
  5. ? Do you want to train an initial model? 💪🏽 [y/N]
  6. ? Do you want to speak to the trained assistant on the command line? 🤖 [y/N]
  7. Bot loaded. Type a message and press enter (use '/stop' to exit):
  8. Your input -> /stop
  9. $ export RASA_X_PASSWORD="rasax" # 配置 Rasa X 登录
  10. $ rasa x

成功启动之后,我们可以直接访问 http://localhost:5002 来登录 Rasa X 的 Web 界面,登录密码为上面我们设置的 rasax,如果你成功登录后,将会看到如下的页面:
image.png

💡 小知识:

  • 如果你使用的是 WSL2,你会发现可以立马打开 http://localhost:5005,但是 http://localhost:5002 迟迟不能打开页面,这并不表示程序存在问题,通常需要等待一段时间就可以访问了。
  • WSL2 与 Windows 物理机的端口是一一映射的,假设 WSL2 的 IP 为 1.1.1.1,那么我们并不需要打开 http://1.1.1.1:5002 才能访问界面,打开 http://localhost:5002 也是可以打开的。

2. 项目结构说明

在项目下执行 rasa init 之后,Rasa 将会帮我们创建以下文件:

  1. $ tree .
  2. .
  3. ├── actions
  4. ├── __init__.py
  5. └── actions.py
  6. ├── config.yml
  7. ├── credentials.yml
  8. ├── data
  9. ├── nlu.yml
  10. └── stories.yml
  11. ├── domain.yml
  12. ├── endpoints.yml
  13. ├── models
  14. └── 20211111-113954.tar.gz
  15. └── tests
  16. └── test_stories.yml

在执行 rasa x 之后,Rasa X 又会将帮我们创建 rules.ymlevents.dbevents.db-shmevents.db-wal 这些新的文件:

  1. $ tree .
  2. .
  3. ├── actions
  4. ├── actions.py
  5. └── __init__.py
  6. ├── config.yml
  7. ├── credentials.yml
  8. ├── data
  9. ├── nlu.yml
  10. ├── rules.yml
  11. └── stories.yml
  12. ├── domain.yml
  13. ├── endpoints.yml
  14. ├── events.db
  15. ├── events.db-shm
  16. ├── events.db-wal
  17. ├── models
  18. └── 20211111-113954.tar.gz
  19. ├── rasa.db
  20. └── tests
  21. └── test_stories.yml
  22. 5 directories, 17 files

其实所生成的文件夹及其子文件的含义也非常简洁明了:

  • actions:动作集合
    • actions.py:该文件用于定义动作,使用 Rasa 最简单的方式就将全部意图和回复都写出来,但是如果我们问机器人“今天天气怎么样”,正确的方式是它去调用 API,根据获取到的今天天气的具体情况来进行恢复,显然 actions.py 就是帮我们做这些事情。
    • _init.py_:Python 初始化文件,可以推断出 actions 其实是作为一个模块进行调用的
  • config.yml:项目的配置文件,包括语言的设置,以及 pipelinepolicies
  • credentials.yml
  • data:数据文件夹,存放了 NLU 数据、策略规则、以及故事
    • nlu.yaml:定义问题的意图,这里面需要定义你训练数据,以便模型进行训练
    • rules.yml:针对不同意图,定义具体回复规则
    • stories.yml:定义用户和机器人真实对话,此文件中需要定义不同轮次对话下,意图和动作分别是啥
  • domain.yml:该文件定义了机器人的回答方式(是否存储信息和 Session 失效时间等),还包括不同意图下具体的回复等
  • endpoints.yml:Rasa
  • events.db:
  • events.db-shm:
  • events.db-wal:
  • models:由于我们在执行 rasa init 时,勾选了建立初始预训练模型,所以该文件下会存在一个以 .tar.gz 压缩格式的模型文件。如果没有勾选的话,models 文件夹将为空,需要你使用 rasa train 来训练处一个模型。
  • rasa.db:
  • tests:存放单元测试文件
    • test_stories.yml:存档测试故事,用来验证机器人回复是否正确

💡 值得注意的是,在终端中执行 Rasa 命令行时,都会对项目文件夹完整性进行检查。除此之外,我们完全可以在不做任何额外配置的情况下,使用rasa shellrasa trainrasa test

后面我们将会对这些文件的作用逐一进行介绍,暂时你并不需要特别清楚这些文件的作用是啥以及如何配置这些文件,完全可以先尝试下 Rasa X 提供了哪些功能,在界面上好好玩一下。

3. 安装Rasa中文组件

尝试了一下,在和聊天机器人对话中输入中文时,它并不会返回中文给我们,也就是说目前原生 Rasa 并不支持中文。如果希望 Rasa 支持中文回复,需要安装中文插件,目前能找到支持的插件有两个,分别为:rasa-chineserasa_nlu_chi,后续我们需要用到时,再专文讲解。