【问题标题】:How to store literals using @entity.values on Slot IBM Conversation Service?如何在 Slot IBM Conversation Service 上使用 @entity.values 存储文字?
【发布时间】:2017-12-20 22:06:24
【问题描述】:

我正在尝试在 Watson 对话中的对话节点上使用插槽,但如果您想使用文字数组,这似乎不太有用。我有一个实体“@email”,它是一种模式,所以如果我想将用户发送的“真实值”存储在上下文变量中,我必须使用.literal。当我尝试使用@entity.values 存储用户发送的所有值时,麻烦就开始了。实际上不可能存储文字数组,我被困在这一点上。

有人为此开发了解决方法吗?

【问题讨论】:

    标签: arrays watson watson-conversation slot


    【解决方案1】:

    literal 是一个方法,而不是一个属性。 entities 包含一个 location 字段,您可以在应用程序层以编程方式使用它来解析输入文本。

    如果您想在对话中将它们拉出来,您可以使用计数器来遍历实体。

    例如:

    在您的插槽节点“然后响应”中添加以下上下文位。

      "context": {
        "counter": "<? entities.size() ?>",
        "literals": ""
      },
    

    接下来创建三个子节点。

    节点1:创建一个虚拟节点,设置条件为真。让它跳转到第二个节点。

    节点 2:对于第二个节点,将条件设置为 $counter &gt; 0 并将以下代码添加到 JSON 部分。

      "context": {
        "counter": "<? $counter - 1 ?>",
        "literals": "<? entities[$counter].literal + ',' + $literals ?>"
      },
    

    让它跳回节点 1。这样做的原因是对话不允许您跳到同一个节点。

    节点 3:让它输出答案。例如:Literal Values: $literals

    这是一个示例工作区。

    https://pastebin.com/xwgnLq9n

    警告

    Watson Conversation 具有内置的无限循环检测功能。如果一个节点在一次请求中被命中 50 次,会抛出如下错误:

    Detected recursion when processing the node with id
    [node_20_1513835954092]. This node has been already processed [50] times
    in this execution step
    

    此时节点将失败,您将不会得到任何结果。因此,如果您期望超过 50 个实体,那么您需要在应用程序层执行此操作。

    【讨论】:

    • 非常感谢!
    • @davidesara 不用担心。如果这可以解决您的问题,请不要忘记将问题标记为已回答。
    • answer 允许我在 desiderata 附近创建一些东西。下一个要解决的问题是:我有一个带有 2 个插槽的节点,可以存储 X 和 Y(实体)您的解决方案完全适用于 Y,因为用户可以指定一个 Y 数组。当用户将第一个输入输入为“blabla Y Y Y”时,问题就开始了,因此 Watson 还必须填充第二个插槽 X 并向用户询问 X。然后用户输入一个 X,最后流程可以继续使用 dummy从 Y 中提取文字的节点 - 但是 - 此时实体 Y 不再有效!解决方案是强制用户先输入 X 再输入 Y 或同时输入 X 和 Y。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    相关资源
    最近更新 更多