2

我试图实现的用例如下:

  1. 用户要求大声朗读网页的一部分,例如“阅读说明”、“阅读背景”、“播放笔记”等(Watson STT)
  2. STT 请求传递给 Conversation(通过应用服务器)并进行解释;响应指示部分类型(如果部分类型不正确,则暂时省略提示)
  3. 应用服务器通过播放请求部分的音频 (Watson TTS) 来响应用户
  4. 用户要求暂停、停止、继续或重播所选部分 (STT)

这是我遇到问题的第 4 步。如果请求是暂停、停止或继续,那么这些请求可能由单独的#intent 处理,并且应用服务器只需<audio>相应地将命令传递给控件。但是,如果请求是重播,那么我需要知道最初请求的部分类型。我有一种感觉,应用服务器需要设置上下文才能完成这项工作,但我不清楚阅读文档如何做到这一点。非常感谢任何示例或文档。

4

2 回答 2

1

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

在此处输入图像描述

用户说“阅读成分”会触发 #play_element + @recipeElement 条件。然后,如果他们说“暂停”,Watson 就会意识到它指的是 @recipeElement 条件。说“继续”或“重播”也仍然指的是同一个元素。“停止”,然而结束循环。现在我只需要弄清楚如何在他们说停止后处理说暂停、继续或重播 - 目前它回到 #play_element 条件,因为“任何其他”条件似乎不起作用。

于 2016-09-25T13:58:22.467 回答
1

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

这是处理它的一种方法。

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

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

目前,只有将其保存为文本值时它才会起作用。因此,您不能执行以下操作:

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

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

intents[0].intent == context.lastIntent
于 2016-09-25T05:30:46.173 回答