🤖

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した値がセットされます。

シンギュラリティ・ソサエティ

Discussion