Watson Conversation:如何在对话流中保持位置以获得额外的用户输入

时间:2016-09-24 13:04:20

标签: ibm-watson watson-conversation

我尝试实施的用例如下:

  1. 用户要求大声朗读网页的一部分,例如"阅读说明","阅读背景","播放笔记"等。(Watson STT)
  2. STT请求传递给Conversation(通过app服务器)并解释;响应表示节类型(如果节类型不正确,暂时省略提示)
  3. 应用服务器通过播放所请求部分的音频(Watson TTS)来响应用户
  4. 用户要求暂停,停止,继续或重播所选部分(STT)
  5. 这是我遇到问题的第4步。如果请求是暂停,停止或继续,那么那些可能由单独的#intent处理,并且app服务器只是相应地将命令传递给<audio>控件。但是,如果请求是重播,那么我需要知道最初请求的部分类型。我有一种感觉,应用服务器需要设置上下文才能使其工作,但我不清楚阅读文档如何做到这一点。任何示例或文档都非常赞赏。

2 个答案:

答案 0 :(得分:1)

每个JSON响应都是对话的路线图。因此,如果您从响应中获取相关的System + Context对象,则可以将其反馈以获取早期响应。

这是接近它的一种方法。

要捕获上下文变量中的intent / entities,您可以在输出节点中执行以下操作(高级)。

{
  "output": {},
  "context": {
    "lastIntent": "<? intents[0].intent ?>",
    "lastConfidence": "<? intents[0].confidence ?>",
    "lastEntity": "<? entities[0].value ?>"
  }
}

目前只有将其保存为文本值才能生效。所以你不能做到以下几点:

"confidence": <? intents[0].confidence ?>,

在您的条件节点中,您可以执行以下操作:

intents[0].intent == context.lastIntent

答案 1 :(得分:1)

当我开始编写应用服务器代码时,我会尝试Simon的建议,但是现在我找到了一种使用API​​工具做我想做的事情的方法。这是相关对话流程的图像:

enter image description here

用户说&#34;阅读成分&#34;它会触发#play_element + @recipeElement条件。如果他们说&#34;暂停&#34; Watson知道它引用了@recipeElement条件。说&#34;继续&#34;或者&#34;重播&#34;还是指同一个元素。 &#34;停止&#34;然而结束循环。现在我只需要弄清楚如何处理暂停,继续或重播后他们说停止 - 目前它会回到#play_element条件,因为Anything Else条件似乎没有起作用。