我试图了解 Dialogflow 如何评估上下文。在有多个活动上下文的会话中间,用户输入的话语与使用这些活动上下文的两个或多个意图直接匹配,是什么决定了哪个意图将被触发?(假设置信水平相同)
此外,打开履行是否会改变上下文的优先级?如果不是,为什么当 web-hook 什么都不做时打开履行会改变响应?
这是我遇到的问题的一个例子。
我有两个几乎相同的流程:
每个子意图由“是”或“否”触发,所有输出上下文都设置为 5 轮的生命周期。两者在所有方面都是相同的,除了 Flow2 为所有意图打开了实现,而 Flow1 将它们全部关闭。
流程 1
如果我输入 'no' -> 'no' -> 'no' -> 'yes'
触发意图的顺序为:
- 上下文测试.no1
- 上下文测试.no1.no2
- 上下文测试.no1.no2.no3
- ContextTest.no1.no2.yes3
流程 2
如果我以相同的顺序输入完全相同的话语,
触发意图的顺序为:
- ContextTestFF.no1
- ContextTestFF.no1.no2
- ContextTestFF.no1.no2.no3
- ContextTestFF.yes1
为什么流程 1 从 no3 转换到 yes3 而流程 2 转换回 yes1?
这是网络挂钩代码。如您所见,请求只是被回显,没有任何变化。
'use strict'
const Functions = require('firebase-functions')
exports.dialogflowFirebaseFulfillment = Functions.https.onRequest((request, response) => {
console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
console.log('Dialogflow Request body: ' + JSON.stringify(request.body));
let text = request.body.queryResult.fulfillmentText
let responseToUser = {
"source": "NeuraFlash",
"fulfillmentMessages": [{
"text": {
"text": [text]
}
}],
"fulfillmentText": [text]
}
responseToUser.outputContexts = request.body.queryResult.outputContexts
console.log('Response: ' + JSON.stringify(responseToUser))
response.json(responseToUser)
return response
});