2017-05-05 10 views
2

私はWatson Conversationsのエキスパートに別の質問があります;)新しい問題があります。私は、変数名に文字列を評価する必要があります。評価方法ワトソン会話?

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

私は、ユーザの入力を解析すると、私は次のように連結します:

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

しかし、評価関数が認識され、Iされていない私は4つの静的な値を作成します変数の値を可能にする任意のドキュメントを見つけることができないpythonでのように、変数名の値に評価される:

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

私が行うことができれば、複数のノードとそっくりブロックelifのが、ユーザーのであればputが重要になると、必要とするノードの数が指数関数的に大きくなります。 Appビルダーパイプラインで見つけることができるapp.js srcコードでこれを使用する方法はありますか?

答えて

1

私は同様のものをテストし、次の回避策を思い付いた:

  • Iは、2つの内のノードを分割し、それぞれの評価(<? ?>
  • を使用して、第1のノードが空の出力を有するが、Aセットコンテキスト変数を評価値に設定します。ノードは、別のノード(第2のノード)にジャンプするように構成される。
  • 第2ノードは最終評価を行い、出力(応答)を生成します。
0

@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のを実行していることの危険性に対処する必要があり言うまでもないです。

関連する問題