0

我试图了解 Dialogflow 如何评估上下文。在有多个活动上下文的会话中间,用户输入的话语与使用这些活动上下文的两个或多个意图直接匹配,是什么决定了哪个意图将被触发?(假设置信水平相同)

此外,打开履行是否会改变上下文的优先级?如果不是,为什么当 web-hook 什么都不做时打开履行会改变响应?

这是我遇到的问题的一个例子。

我有两个几乎相同的流程:

每个子意图由“是”或“否”触发,所有输出上下文都设置为 5 轮的生命周期。两者在所有方面都是相同的,除了 Flow2 为所有意图打开了实现,而 Flow1 将它们全部关闭。

流程 1

如果我输入 'no' -> 'no' -> 'no' -> 'yes'

触发意图的顺序为:

  1. 上下文测试.no1
  2. 上下文测试.no1.no2
  3. 上下文测试.no1.no2.no3
  4. ContextTest.no1.no2.yes3

流程 2

如果我以相同的顺序输入完全相同的话语,

触发意图的顺序为:

  1. ContextTestFF.no1
  2. ContextTestFF.no1.no2
  3. ContextTestFF.no1.no2.no3
  4. 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
});
4

0 回答 0