标题:
Watson Conversation 对话原理以及高级应用-3
[打印本页]
作者:
look_w
时间:
2018-3-17 11:50
标题:
Watson Conversation 对话原理以及高级应用-3
定义 what to do next作出指定的响应后,您可以指示服务执行以下操作之一:
Wait for user input: 该服务等待用户提供响应引发的新输入。 例如,响应可能会询问用户是是或否。 在用户提供更多输入之前,该对话框将不会进行。
Jump to another dialog node: 当您想绕过等待用户输入并希望会话直接进入子节点或完全不同的对话框节点时,请使用此选项。 例如,您可以使用"跳转到动作"将流从树中的多个位置路由到公共对话框节点。
配置 Jump to another dialog node如果您选择跳转到另一个节点,则必须指定该操作是针对所选对话框节点的响应还是条件:
响应:如果语句指向所选对话框节点的响应部分,则会立即运行。 也就是说,系统不评估所选对话节点的条件部分并立即运行所选对话节点的响应部分。忽略响应对于将多个对话节点链接在一起很有用。 处理所选对话框节点的响应部分,就好像该对话框节点的条件为真。 如果所选择的对话框节点具有另一个"跳转到"动作,该操作也将立即运行。
条件:如果语句指向所选对话节点的条件部分,则服务首先检查目标节点的条件是否计算为 true。
如果条件计算结果为 true,则系统通过使用对话框节点上下文更新上下文,并通过对话节点输出输出来立即处理此节点。
如果条件不为真,则系统继续对目标对话节点的下一个兄弟节点的条件的评估过程等等,直到找到具有评估为真的条件的对话节点。
如果系统处理所有兄弟姐妹,并且没有条件评估为真,则使用基本的回退策略,并且对话框也评估顶层的节点。
定位条件对于链接对话节点的条件很有用。 例如,您可能希望首先检查输入是否包含意图,例如#turn_on,如果是,则可能需要检查输入是否包含实体,例如@lights,@radio 或@wipers。 链条件有助于构建更大的对话树。
上下文变量 对话框是无状态的,这意味着它不会将信息从用户的一个交换中保留到下一个。 您的应用程序负责维护所需的任何持续信息。 但是,应用程序可以将信息传递给对话框,对话框可以更新此信息并将其传递给应用程序。 它通过使用上下文变量来实现。
上下文变量是您在节点中定义的变量,并且可选地为其指定默认值。 其他节点或应用程序逻辑可随后设置或更改上下文变量的值。
您可以通过从对话框节点条件引用上下文变量来判断上下文变量值,以确定是否执行节点。 您可以从对话框节点响应条件引用上下文变量,以根据外部服务或用户提供的值显示不同的重复次数。
从应用程序传递上下文通过设置上下文变量并将上下文变量传递给对话框,将信息从应用程序传递到对话框
例如,您的应用程序可以设置 $ time_of_day 上下文变量,并将其传递给可以使用该信息来定制向用户显示的问候语的对话框。
图 16. 例子
在此示例中,对话框知道应用程序将变量设置为以下值之一:上午,下午或晚上。 它可以检查每个值,并根据存在的值返回适当的问候语。 如果变量未被传递或者具有与预期值不匹配的值,则向用户显示更通用的问候语。
传递上下文从节点到节点对话框还可以添加上下文变量,以将信息从一个节点传递到另一个节点,或更新上下文变量的值。当对话框询问并从用户那里获取信息时,它可以跟踪信息,并在会话中稍后参考。
例如,在一个节点中,您可能会询问用户的姓名,并在稍后的节点中按名称对它们进行寻址。
图 17. 例子
在本示例中,系统实体 @ sys-person 用于从用户提供用户的名称中提取用户名。 在 JSON 编辑器中,用户名上下文变量被定义并设置为@ sys-person 值。 在后续节点中,$ username 上下文变量包含在响应中,以按名称对用户进行寻址。
定义上下文变量 通过向 JSON 对话框节点定义的{context}部分添加名称和值对来定义上下文变量。 配对必须符合以下要求:
该名称可以包含任何大小写字母字符,数字字符( 0-9),下划线和句点。
该值可以是任何支持的 JSON 类型,例如简单的字符串变量,数字,JSON 数组或 JSON 对象。
以下 JSON 示例定义 $ dessert 字符串 $ toppings_array 数组和 $ age 数字上下文变量的值:
图 18. 上下文变量 1
要定义上下文变量,请完成以下步骤:
从节点的编辑视图中,通过单击高级响应图标,然后选择 JSON 来打开 JSON 编辑器。
在"output":{}块的前方,如果不存在,则添加一个"context":{}块。
图 19. 上下文变量 2
3. 在上下文块中,为要定义的每个上下文变量添加名称和值对。
图 20. 上下文变量 3
要引用上下文变量,请使用语法 $ name,其中 name 是您定义的上下文变量的名称。
其他常见任务包括:
1. 要存储用户输入的整个字符串,请使用 input.text:
图 21. 上下文变量 4
2. 要将实体的值存储在上下文变量中,请使用以下语法:
图 22. 上下文变量 5
3.要在上下文变量中存储通过使用正则表达式从用户输入中提取的字符串的值,请使用以下语法:
图 23. 上下文变量 6
操作顺序 您定义上下文变量的顺序不会确定服务对其进行评估的顺序。 该服务以随机顺序评估被定义为 JSON 名称和值对的变量。 不要在第一个上下文变量中设置一个值,并希望能够在第二个上下文中使用该值,因为不能保证列表中的第一个上下文变量将在列表中的第二个上下文之前执行。 例如,不要使用两个上下文变量来实现逻辑,该逻辑返回零和传递给节点的较高值之间的随机数。
图 24. 例子
使用稍微更复杂的表达式,以避免在评估 $ answer 上下文变量之前,必须依赖于 $ upper 上下文变量的值。
图 25. 例子
更新上下文变量值如果一个节点设置已经设置的上下文变量的值,那么先前的值将被覆盖。
更新上下文 jason 对象
除了 JSON 对象之外,所有 JSON 类型的以前的值都将被覆盖。 如果上下文变量是复杂类型,例如 JSON 对象,则使用 JSON 合并过程来更新变量。 合并操作会添加任何新定义的属性,并覆盖对象的任何现有属性。
在此示例中,名称上下文变量定义为复杂对象。
图 26. 例子
对话框节点使用以下值更新上下文变量 JSON 对象:
图 27. 例子
结果是这个上下文:
图 28. 例子
更新阵列
如果您的对话框上下文数据包含一组值,则可以通过附加值,删除值或替换所有值来更新数组。
选择其中一个操作来更新数组。 在每种情况下,在应用操作之后,我们会看到操作之前的数组,操作和数组。
Append
: 要将值添加到数组的末尾,请使用 append 方法。
对于此对话框运行时上下文:
图 29. 例子
更新
图 30. 例子
结果
图 31. 例子
Remove
删除元素,使用 remove 方法并在数组中指定其值或位置。
Remove by value
从数组中删除一个元素的值。
对于此对话框运行时上下文:
图 32. 例子
更新
图 33. 例子
结果
图 34. 例子
Remove by position
通过索引位置从数组中删除元素:
对于此对话框运行时上下文:
图 35. 例子
更新
图 36. 例子
结果
图 37. 例子
Overwrite
要覆盖数组中的值,只需将数组设置为新值即可:
对于此对话框运行时上下文:
图 38. 例子
更新
图 39. 例子
结果
图 40. 例子
Attention
如果将数组保存为字符串的一部分,则它将成为
String 对象而不是 Array。 例如,以下$ array 上下文变量是一个数组,但是 $ string_array 上下文变量是一个字符串。
图 41. 例子
如果您在"尝试出来"窗格中检查这些上下文变量的值,您将看到它们的值如下指定:
$array : ["one","two"] $array_in_string : "this is my array: [\"one\",\"two\"]"您可以随后对 $数组变量执行数组方法,例如<? $ array.removeValue('two')?>而不是$ array_in_string 变量。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0