Bluemix Conversation,推进了对话

时间:2017-02-17 04:28:17

标签: ibm-cloud ibm-watson watson-conversation

我定义了两个会话节点。第一个是在conversation_start上触发并询问用户的名字。第二个将input.text中的用户名存储在上下文变量中,并询问用户是想进行简短的调查还是做其他事情。第二个永远不会执行。为了推进对话,第二个触发器应该触发什么?尚无意图或条件设定。基本上,我只想遵循一串珍珠模式,每个问题都会被提出,并让用户选择退出一些问题。

3 个答案:

答案 0 :(得分:0)

有两种主要方法可以实现这一目标。我建议的是为每种可能的方式创建一个意图。例如,您可以创建一个名为#affirmative的意图,其值为“是”,“是”,“当然”,“确定”等等。您所要做的就是创建意图然后使用它在条件领域。

但您也可以使用input.text直接检查用户的输入。例如,您可以使用input.text.toLowerCase() == 'yes'作为条件。请记住,只有在控制输入并且仅允许一些可能的值时才应使用此选项。如果没有,请使用intent并让Watson Conversation为您处理输入解析。

Watson Conversation提供的另一个非常酷的功能是,你可以获得一个像intents[0].confidence < 0.6这样的条件的节点和一个像“对不起,我没有得到”的回复。这样你就可以确保你的流程只会触发对意图具有高置信度的条件。

希望它有所帮助!

答案 1 :(得分:0)

您可以使用jump to函数将系统路由到任意dialog_node - 这非常适合创建定向对话框。因此,每当您想继续下一个问题(用户回答上一个问题)时,您可以使用跳转到处理上一个问题的答案的节点来向用户询问另一个问题(跳转到下一个对话节点的正文部分)问新问题。)

现在为&#34;得到名字&#34;用例,您希望第二个节点从在conversation_start节点上挂起的用户输入中收集名称。如果对话遇到具有子节点的节点,则下一个对话轮的处理将从该对话节点的第一个子节点开始 - 这样就可以在对话中定义上下文对话框。

答案 2 :(得分:0)

Bluemix Conversation可以被认为是状态机。每个转换都在工具中绘制,但每个节点只能由条件触发。因此,如果您在节点上提出问题,并且返回的答案不会触发其中一个子节点,则状态将不会转换为子节点。输入节点的答案由Watson处理,Watson提供“意图”,这实质上是他刚刚分析的句子中的关键字。因此,推进对话的一种方法是使用#前缀将命名为“intents”与子节点中的触发器匹配。另一种使用@prefex匹配命名“实体”的方法,尽管Watson如何构建实体还不太清楚。第三种方法是使用$前缀和简单条件运算符(如==)匹配上下文变量。上下文变量完全由您(开发人员)管理。您可以在每个节点上设置一个上下文变量。然后您可以使用它来触发子节点。这似乎是管理我想要实现的对话类型的好方法。第四种方法是使用前一个父节点的输入值以及简单的条件运算符。