Rasa教程系列-Core-3-Responses

如果希望助理响应用户消息,则需要管理这些响应。在机器人的训练数据中,通过stories指定机器人应该执行的操作。这些操作可以使用utterances将消息发送回用户。

有三种方法来管理这些utterances:
(1)Utterances 存于Domain文件中,看这里
(2)检索动作响应是训练数据的一部分,看这里
(3)可以创建自定义NLG service 来生成响应, 看这里

utterances 包含于 Domain文件中

默认格式是将utterances包含在domain文件中。然后,该文件包含对所有 自定义action、可用实体、槽位和意图的引用。具体示例如下:

# all hashtags are comments :)
intents:
 - greet
 - default
 - goodbye
 - affirm
 - thank_you
 - change_bank_details
 - simple
 - hello
 - why
 - next_intent

entities:
 - name

slots:
  name:
    type: text

templates:
  utter_greet:
    - text: "hey there {name}!"  # {name} will be filled by slot (same name) or by custom action
  utter_channel:
    - text: "this is a default channel"
    - text: "you're talking to me on slack!"  # if you define channel-specific utterances, the bot will pick
      channel: "slack"                        # from those when talking on that specific channel
  utter_goodbye:
    - text: "goodbye "   # multiple templates - bot will randomly pick one of them
    - text: "bye bye "
  utter_default:   # utterance sent by action_default_fallback
    - text: "sorry, I didn't get that, can you rephrase it?"

actions:
  - utter_default
  - utter_greet
  - utter_goodbye

上述domain文件中,templates部分包含了助理机器人用于发送给用户的template。如果想更改text或bots响应的任何其他部分,需要对assistant重新训练才能生效。
注意:
在一个story中使用的utterances应该列在domain.yml中的stories部分。在本例中,utter_channel并没有在story中使用,因此不在该部分中列出。关于这些响应格式的更多细节可以在domain文件格式的文档中找到:Utterance templates

为机器人助手创建NLG service

对机器人进行再训练以更改文本副本对于某些工作流来说可能不是最优的。这就是为什么Core也允许外包响应生成并将其从对话学习中分离出来。

助手仍将根据历史的对话学习预测action和对用户输入作出反应,但它发送回用户的响应是在Rasa Core之外生成的。

如果助理希望向用户发送消息,它将使用POST请求调用外部HTTP server。 配置此endpoint,需要先创建一个endpoints.yml,并将其传递给运行脚本或服务器脚本。endpoints.yml的内容如下:

nlg:
  url: http://localhost:5055/nlg    # url of the nlg endpoint
  # you can also specify additional parameters, if you need them:
  # headers:
  #   my-custom-header: value
  # token: "my_authentication_token"    # will be passed as a get parameter
  # basic_auth:
  #   username: user
  #   password: pass
# example of redis external tracker store config
tracker_store:
  type: redis
  url: localhost
  port: 6379
  db: 0
  password: password
  record_exp: 30000
# example of mongoDB external tracker store config
#tracker_store:
  #type: mongod
  #url: mongodb://localhost:27017
  #db: rasa
  #user: username
  #password: password

按照如下方式启动server:

rasa run \
   --enable-api \
   -m examples/babi/models \
   --log-file out.log \
   --endpoints endpoints.yml

以POST方式向endpoint发送请求的body数据如下:

{
  "tracker": {
    "latest_message": {
      "text": "/greet",
      "intent_ranking": [
        {
          "confidence": 1.0,
          "name": "greet"
        }
      ],
      "intent": {
        "confidence": 1.0,
        "name": "greet"
      },
      "entities": []
    },
    "sender_id": "22ae96a6-85cd-11e8-b1c3-f40f241f6547",
    "paused": false,
    "latest_event_time": 1531397673.293572,
    "slots": {
      "name": null
    },
    "events": [
      {
        "timestamp": 1531397673.291998,
        "event": "action",
        "name": "action_listen"
      },
      {
        "timestamp": 1531397673.293572,
        "parse_data": {
          "text": "/greet",
          "intent_ranking": [
            {
              "confidence": 1.0,
              "name": "greet"
            }
          ],
          "intent": {
            "confidence": 1.0,
            "name": "greet"
          },
          "entities": []
        },
        "event": "user",
        "text": "/greet"
      }
    ]
  },
  "arguments": {},
  "template": "utter_greet",
  "channel": {
    "name": "collector"
  }
}

endpoint用以下生成的内容进行响应:

{
    "text": "hey there",
    "buttons": [],
    "image": null,
    "elements": [],
    "attachments": []
}

然后,Rasa将使用此响应并将其发送回用户

你可能感兴趣的:(Rasa)