【问题标题】:Eval method Watson conversation?eval 方法 Watson 对话?
【发布时间】:2017-05-05 08:33:07
【问题描述】:

我有另一个问题要问 Watson Conversations 专家;) 我有一个新问题。我需要将字符串评估为变量名:我创建了 4 个静态值:

{ "Pmarguerita": 9,
    "Pregina": 10,
    "Pcarne": 10,
    "PEVEA": 12
}

当我解析用户的输入时,我会这样连接:

{
"PiPrice": "<? 'P'+entities['name_pizza'][0].value ?>"
"total" :"<?entities['sys-number'][0].value.toInt() * eval(PiPrice) ?>"
}

但是无法识别 Eval 函数,并且我找不到任何文档允许将变量值评估为变量名称的值,例如在 python 中:

a = 3
b ='a' 
print(eval(b))
3

我可以使用多个节点创建一个类似于 if elif 的块,但是如果用户的输入开始变得重要,那么它需要的节点数量将成倍增长。 有没有办法在 App builder Pipeline 中找到的 app.js src 代码中使用它?

【问题讨论】:

    标签: javascript spring-el watson-conversation


    【解决方案1】:

    我测试了类似的东西并想出了以下解决方法:

    • 我将节点一分为二,每个使用一个评估 (&lt;? ?&gt;)
    • 第一个节点的输出为空,但将上下文变量设置为评估值。该节点被配置为跳转到另一个节点(第二个节点)。
    • 第二个节点进行最终评估并生成输出(响应)。

    【讨论】:

      【解决方案2】:

      虽然@data_henriks 的回答是在对话中执行此操作的正确方法,但有时您需要在应用程序层执行此操作。

      因此,您可以将每个项目的值作为上下文变量返回,然后创建一个类似"run_eval" 的上下文变量,并使其值与您要使用上下文变量名称执行的 eval 语句匹配。使用设置的上下文变量作为返回值。

      例如:

      "context": {
        "Pmarguerita": 9, 
        "Pregina": 10,
        "Pcarne": 10,
        "PEVEA": 12,
        "PiPrice": "<? 'P'+entities['name_pizza'][0].value ?>",
        "Items": "<?entities['sys-number'][0].value.toInt() ?>"
        "run_eval" : "$PiPrice * $Items",
        "run_eval_return_field": "total"
      }
      

      在您的应用程序层,您将解析出run_eval,因此您最终会得到类似(5 个项目,每个 10 美元)的东西。

      10 * 5
      

      然后 eval() ,然后返回对话,如下所示:

      "context": {
        "Pmarguerita": 9, 
        "Pregina": 10,
        "Pcarne": 10,
        "PEVEA": 12,
        "PiPrice": "10",
        "Items": "5"
        "total": "50"
      }
      

      不用说,您需要处理运行 eval 的危险。

      【讨论】:

        猜你喜欢
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-01
        相关资源
        最近更新 更多