如果希望助理响应用户消息,则需要管理这些响应。在机器人的训练数据中,通过stories指定机器人应该执行的操作。这些操作可以使用utterances将消息发送回用户。
有三种方法来管理这些utterances:
(1)Utterances 存于Domain文件中,看这里
(2)检索动作响应是训练数据的一部分,看这里
(3)可以创建自定义NLG service 来生成响应, 看这里
默认格式是将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
对机器人进行再训练以更改文本副本对于某些工作流来说可能不是最优的。这就是为什么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将使用此响应并将其发送回用户