GraphAI - Static Node と injectValue について
static nodeのvalueは、GgraphData内に定義される固定値/変数です。
通常は初期値や定数として使ったりLoopで前の実行結果を受け取り次のloopの値として利用します。
一方、injectValueは、実行時に外部から注入される値です。
static nodeのvalueとして、GraphAIのインスタンスのAPIとして呼び出してStatic Nodeの値をセットします。
また、static nodeのupdate属性にgod記法(:nodeName.property
など)を記述すると、ループ時に前回の結果を更新することができます。
パターン別の使い方
初期値のみ(ループなし、または2回目以降も同じ値の場合)
{ value: "abc" }
毎回 abc
を返します。
初期値と更新対象の値を両方持つ場合
{ value: "abc", update: ":node1.prev1" }
1回目に abc
を、2回目以降はnode1のprev1の値を返します。
初期値も更新対象も持たない場合
{ }
この場合は、injectValueによって値が更新されることを期待します。
特に、ネストされたnodeでは、親グラフから値が渡されることが想定されています。(本来は定義しなくても動作します)
injectValueによって値がセットされない場合がGraphAI.run()でvalidationエラーとなります
更新対象の値のみを持つ場合
{ update: "node1.prev1" }
この場合、1回目はinjectValueで値がセットされ、2回目以降は別の値が使われます。
たとえば次のように定義した場合、
{ value: "123" }
この場合、何回ループしても常に"123"が設定され続けます。
一方、injectValueの場合、初回実行時にのみ値がセットされます。
たとえば次のように空の定義をし、injectValueで"123"を渡す場合、
{ }
初回はinjectValueの値("123")が使われますが、2回目以降はundefinedになります。
injectValueはあくまでも実行時に値を注入するものであり、static nodeに定義されている値ではありません。
selfNodeを使ったupdate指定について
ノード自身の値を参照して更新を行いたい場合は、以下のように記述します。(selfNodeは実際はそのnodeのnodeId)
{ update: ":selfNode" }
たとえば、messageというノードの場合は次のように書きます。
nodes: {
message: { update: ":message" }
}
このように設定すれば、初回はinjectValueによって値がセットされ、2回目以降はそのノード自身の最新の値を参照して更新することができます。結果として2回目以降も初回にinjectValueした値がセットされます。

人工知能を活用したアプリケーションやサービスを活用し、内発的動機付けで行動するエンジニア、起業家、社会起業家をサポートするコミュニティーです。 singularitysociety.org Supported by 週刊 Life is beautiful
Discussion