python rasa聊天机器人教程二:添加意图和回复

发布时间 2023-08-16 17:02:22作者: 繁华博客

1.rasa的几个yml文件介绍

nlu.yml 文件:该文件用于训练自然语言理解 (NLU) 模型。您可以在其中添加示例句子,标记意图和实体,用于训练 NLU 模型。例如,在文件中添加一条示例句子、标记对应的意图和实体,然后使用 rasa train nlu 命令训练 NLU 模型。

domain.yml 文件:该文件用于定义机器人的行为、回复模板、意图和实体。您可以在其中设置意图、实体和回复模板,并定义机器人的对话流程。例如,在 responses 部分定义回复模板,在 intents 部分定义意图,在 entities 部分定义实体。此文件是整个对话系统的核心配置文件。

rules.yml文件使用基于规则的方法来定义对话流程。它基于用户的意图和机器人的动作之间的显式规则。每条规则包含了一个触发意图和一个或多个机器人的动作。当用户的意图匹配到规则中定义的触发意图时,相应的机器人动作将被执行。例如,在rules.yml中,可以定义一个规则,当用户的意图是"询问时间"时,机器人回复当前的时间。

stories.yml文件使用故事(story)的方式来定义对话流程。它描述了一个完整的对话场景,包括用户的意图、机器人的动作以及它们之间的顺序和关系。每个故事由一系列的事件(用户意图或机器人动作)组成,并按照时间顺序排列。这样,Rasa在训练模型时可以学习不同故事中的对话流程,以便在实际对话中根据用户的输入进行适当的响应。例如,在stories.yml中,可以定义一个故事,用户先发送一个"打招呼"意图,然后机器人回复一个问候语,接着用户发送一个"询问天气"意图,机器人再回复一个天气信息。

2.添加一个意图对应的回复

2.1 nul.yml文件

在nlu.yml文件中,添加一个意图(intent)和相应的训练示例,用于识别用户的询问。例如:

- intent: ask_identity
  examples: |
    - 你是谁
    - 请问你是谁
    - 请告诉我你的身份

 2.2 domain.yml文件:

在domain.yml文件的responses部分中,添加一个新的回复模板,用于回答用户关于身份的询问。例如:

responses:
  utter_identity:
    - text: 我是一个AI机器人。

别忘了在domain.yml的intents要添加意图

intents:
  - ask_identity

 2.3 rules.yml文件:

在rules.yml文件中,添加一条规则来触发对应的回复。该规则将匹配用户的询问身份的意图,并执行回复动作。例如:

rules:
  - rule: 回答身份问题
    steps:
      - intent: ask_identity
      - action: utter_identity

 3.中文支持

打开项目根目录下的 config.yml 配置文件,修改如下:

recipe: default.v1
language: zh
pipeline:
  - name: JiebaTokenizer
  - name: LanguageModelFeaturizer
    model_name: "bert"
    model_weight: "bert-base-chinese"
  - name: "DIETClassifier"

 language 需要由 en 修改为 zh,即中文。

4.训练

重新训练模型

rasa train

 5.运行对话模型

训练完成后,可以使用以下命令来与您的聊天机器人进行交互

rasa shell

 6.对话测试

Your input ->  你是谁
我是一个AI机器人。
Your input ->  请告诉我你的身份
我是一个AI机器人。
Your input ->  请问你是谁
我是一个AI机器人。
Your input ->  你是?
我是一个AI机器人。