2017-05-05 2 views
2

J'ai une autre question pour les experts Watson Conversations;) J'ai un nouveau problème. Je dois évaluer une chaîne à un nom de variable: je crée 4 valeurs statiques:Méthode d'évaluation Watson conversation?

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

Quand je parse l'entrée de l'utilisateur, je concaténer comme ceci:

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

Mais la fonction Eval n'est pas reconnu et je ne peut pas trouver une doc permettant une valeur variable à évaluer à une valeur de nom de variable comme en python:

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

je pourrais faire si Elif Sosie comme bloc avec plusieurs nœuds, mais si le dans de l'utilisateur mettre commence à être important, le nombre de nœuds dont il aurait besoin deviendrait exponentiellement énorme. Existe-t-il un moyen de l'utiliser dans le code src app.js que vous pouvez trouver dans le Pipeline du générateur d'applications?

Répondre

1

J'ai testé quelque chose de similaire et est venu avec la solution suivante:

  • je partage le noeud en deux, chacun utilisant une évaluation (<? ?>)
  • Le premier noeud a une sortie vide, mais fixe un variable de contexte à la valeur évaluée. Le noeud est configuré pour passer à un autre noeud (le deuxième noeud).
  • Le deuxième noeud a l'évaluation finale et génère la sortie (réponse).
0

Bien que la réponse @data_henriks soit la bonne façon de le faire dans Conversation, vous devez parfois le faire au niveau de la couche d'application. Vous devez donc renvoyer vos valeurs pour chaque élément en tant que variable de contexte, puis créer une variable de contexte telle que "run_eval" et avoir sa valeur correspondant à l'instruction eval que vous souhaitez exécuter en utilisant les noms de variables de contexte. Avec une variable de contexte définie pour la valeur de retour.

Par exemple:

"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" 
} 

A votre couche d'application, vous analyser le run_eval donc vous retrouver avec quelque chose comme (5 articles, 10 $ chacun).

10 * 5 

ensuite eval() qui, et revenir à la conversation quelque chose comme ce qui suit:

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

Il va sans dire que vous devez gérer les dangers de l'exécution eval.