我正在为公司学习Watson AI / Assistant,因为我们打算向客户推介它(我们是一家网页开发公司)。我已经进入了Assistant,并通过设计一个文本冒险游戏来自学。在这个游戏中,Watson会引导你在一个世界中,你可以捡起东西并放下它们之类的事情。所以我试图让Watson创建一个名为“inventory”的JSON数组。
然而,虽然我成功在上下文变量选项下创建了数组,但我无法轻松地添加或删除其中的元素,因为看起来我的Assistant无法执行任何代码。
我的问题很简单:在识别到一个意图时,我可以执行JavaScript代码吗?例如,如果用户输入“捡起沙子”,其中意图是“捡起”,并且识别出沙子这个实体,那么可以执行JavaScript将实体结果(沙子)解析到“inventory”数组中吗?
这是可能的吗?
我尝试过将上下文变量创建为数组(成功了)。然而,如果不打印整个数组,我就无法更新它,这使得它作为一个数组和一个库存变得毫无用处。以下是我在第一步通过添加上下文变量创建的JSON数组。
{ "output": { "generic": [ { "values": [ { "text": "Welcome to Kojoto." } ], "response_type": "text", "selection_policy": "sequential" }, { "time": 5000, "typing": false, "response_type": "pause" } ] }, "context": { "Inventory": [ { "name": "belt", "description": "A leather belt." }, { "name": "pouch", "description": "A leather pouch." } ] } }
我希望在识别到一个意图时,能够在不移除整个数组的情况下向库存中添加物品。这样做比将$has-sand从“yes”变为null要高效得多,也更实用。
回答:
据我所知,你想向数组中添加和删除对象。
请查看以下方法,这些方法可以帮助你在匹配到任何意图时向数组中添加对象,同样你也可以用相同的方式删除它。
{ "context": { "toppings_array": "<? $toppings_array.append('ketchup', 'tomatoes') ?>" }}
向JSONArray添加一个新值
{ "context": { "toppings_array": "<? $toppings_array.remove(0) ?>" }}
从JSONArray中移除指定索引位置的元素