AIパーソナル・ラーニング
と実践的なガイダンス
豆包Marscode1

Difyワークフローにおける変数集約と変数割り当てノード

変数集約

定義する

複数のブランチの変数を1つの変数に集約し、下流ノードを統一的に構成。

Variable Aggregation ノード(旧 Variable Assignment ノード)は、異なるブランチの出力を統合し、どのブランチが実行されたかに関係なく、単一の統一された変数を通して結果が参照され、アクセスされることを保証する、ワークフローの重要なノードです。これは複数のブランチがある場合に非常に便利で、異なるブランチ下で同じ役割を持つ変数を単一の出力変数にマッピングすることで、下流ノードでの重複定義を避けることができます。

取る

変数の集約は、問題の分類や条件分岐などの複数の出力を、プロセスの下流のノードが使用および操作できるように1つの出力に集約できるようにすることで、データフロー管理を簡素化します。


問題分類後の複数集計

変数集約を追加しないと、下流のLLMと直接応答ノードは、異なる知識ベースから検索された後、分類1と分類2のブランチに対して繰り返し定義する必要があります。

Dify工作流中的变量聚合节点-1
問題の分類(変数を使わない集計)

 

変数集約を追加すると、2つの知識検索ノードの出力を1つの変数に集約できます。

Dify工作流中的变量聚合节点-1
問題分類後の複数集計

 

IF/ELSE 条件分岐後の複数集約

Dify工作流中的变量聚合节点-1
問題分類後の複数集計

 

フォーマット要件

変数アグリゲータは、文字列 (String)、数字(Number)、ドキュメント(File)オブジェクト(Object)と配列(Array)

変数集約子は、同じデータ型の変数だけを集約することができます。 変数集約ノードに追加される最初の変数のデータ形式が変数データ形式の場合変数集約ノードに追加される最初の変数のデータ形式が String変数をリストに追加したい場合は、右側の「追加」ボタンをクリックすればリストに追加できる。 String タイプ

グループ化

集約グループ化をオンにすると、変数集約は複数の変数グループを集約することができ、各グループ内の集約には同じデータ型が必要です。

 

変数代入

定義する

変数割り当てノードは、書き込み可能な変数への変数割り当てを行うために使用され、以下の書き込み可能な変数がサポートされています:

使用法: Variable Assignment ノードにより、ワークフロー内の変数をセッション変数に割り当て、一時的に保存し、後続のダイアログで継続的に参照することができます。

Dify工作流中的变量聚合和变量赋值节点-1

サンプルシナリオ

の対話プロセスを設定することができます。コンテキスト、ダイアログボックスにアップロードされたファイル、ユーザーが入力したプリファレンスなどは、変数代入ノードを介してセッション変数に書き込まれ、後続のダイアログの参照情報として使用される。

シーン1

ダイアログの情報の抽出と保存を自動的に決定する LLMは、セッション変数の配列を介して、セッション内でユーザーが入力した重要な情報を記録し、LLMがセッション変数に保存された履歴情報に基づいて、後続の会話で返信をパーソナライズすることができます。

例:対話を開始した後、LLMはユーザー入力に記憶すべき事実、好み、履歴が含まれているかどうかを自動的に判断する。もしそうであれば、LLMはその情報を抽出し、保存してから回答の文脈として使用する。保存すべき新しい情報がない場合、LLMは自身の関連する記憶知識を用いて直接質問に答えます。

Dify工作流中的变量聚合和变量赋值节点-1

設定プロセス:

  1. セッション変数の設定 セッション変数の配列を設定する memoriesarray[object]型で、ユーザーの事実、好み、履歴を保存するために使用される。
  2. 判断記憶と抽出記憶 ::
    • LLMを使用して、ユーザー入力に記憶する必要のある新しい情報が含まれているかどうかを判断する条件判断ノードを追加する。
    • もし新しい情報があれば、枝を歩き、LLMノードを使ってその情報を抽出する。
    • 新しい情報がなければ、枝を下っていき、既存の記憶を使って直接答える。
  3. 可変課題/ライティング ::
    • 上のブランチでは、抽出された新しい情報は、変数代入ノードを使用して、次のように追加(append)される。 memories を配列に入れる。
    • LLMが出力するテキスト文字列をarray[object]に格納するのに適した形式に変換するには、エスケープ関数を使用します。
  4. 変数の読み取りと使用 ::
    • 後続のLLMノードでは memories 配列の内容は文字列に変換され、コンテキストとしてLLMのプロンプトに挿入されます。
    • LLMは、この履歴情報を使用してパーソナライズされた応答を生成します。

図中のノードコードは以下の通り:

  1. 文字列をオブジェクトにエスケープする

コピー

import json
defmain(arg1:str) ->object:
try:
# Parse the input JSON string
input_data = json.loads(arg1)
# Extract the memory object
memory = input_data.get("memory", {})
# Construct the return object
result ={
"facts": memory.get("facts", []),
"preferences": memory.get("preferences", []),
"memories": memory.get("memories", [])
}
return{
"mem": result
}
except json.JSONDecodeError:
return{
"result":"Error: Invalid JSON string"
}
exceptExceptionas e:
return{
"result":f"Error: {str(e)}"
}
  1. オブジェクトを文字列にエスケープする

コピー

import json
defmain(arg1:list) ->str:
try:
# Assume arg1[0] is the dictionary we need to process
context = arg1[0]if arg1 else{}
# Construct the memory object
memory ={"memory": context}
# Convert the object to a JSON string
json_str = json.dumps(memory, ensure_ascii=False, indent=2)
# Wrap the JSON string in <answer> tags
result =f"<answer>{json_str}</answer>"
return{
"result": result
}
exceptExceptionas e:
return{
"result":f"<answer>Error: {str(e)}</answer>"
}

シーン2

ユーザーの初期プリファレンス情報を記録する これは、セッション内でユーザーが入力した言語設定を記憶し、その後のダイアログで一貫してその言語タイプを使用して返信します。

例 language 入力ボックスに「中国語」が指定された場合、その言語はセッション変数に書き込まれ、LLMは次のダイアログで返答する際にセッション変数の情報を参照し、次のダイアログでも「中国語」で返答し続ける。

Dify工作流中的变量聚合和变量赋值节点-1

設定プロセス:

セッション変数の設定 最初にセッション変数を設定する languageを判断するために、セッションフローの最初に条件判断ノードを追加する。 language 変数の値がヌルかどうか。

変数の書き込み/割り当て 最初の対話の冒頭で、もし language 変数の値がNULLの場合、LLMノードがユーザーによって入力された言語を抽出するために使われ、次に変数割り当てノードがセッション変数に言語タイプを書き込むために使われる。 language 真ん中だ。

可変リーディング その後の対話では language 変数にはすでにユーザーの言語プリファレンスが格納されています。それ以降のダイアログでは、LLMノードは言語変数を参照することで、ユーザーの好みの言語タイプを返信します。

シーン3

補助チェックリスト・チェック さらに、セッション変数を介してセッション内のユーザー入力を記録し、チェックリストの内容を更新し、後続のダイアログで不足している項目をチェックする。

例:ダイアログを開始した後、LLMはユーザにチェックリストの項目をダイアログボックスに入力するよう求め、ユーザがチェックリストの項目に言及すると、その項目は更新され、セッション変数に格納される。

Dify工作流中的变量聚合和变量赋值节点-1

設定プロセス:

  • セッション変数の設定 最初にセッション変数を設定する ai_checklistこの変数は、LLMの中で検査されるコンテキストとして参照される。
  • 可変課題/ライティング: 対話の各ラウンドで、LLMノード内の ai_checklist ユーザーが新しい情報を提供した場合、チェックリストを更新し、その出力を ai_checklist 中だ。
  • 可変読み: 各ラウンドのダイアログはこうだ。 ai_cheklist チェックリストの値を比較し、すべてのチェックリストが完了するまでユーザー入力を比較する。

変数を使ったノードの割り当て

ノードの右側をクリック  いいえ、選択してください "変数割り当て" ノードでは、ソース変数に代入する必要がある変数を設定します。Variable Assignment ノードは、同時に複数の変数に値を割り当てることをサポートします。

Dify工作流中的变量聚合和变量赋值节点-1

変数の設定

変数: 値を割り当てる必要のある変数を選択する。

設定変数: 代入する変数を選択する、つまり変換元の変数を指定する。

上図の変数割り当てロジック:初期ページでユーザーが記入した言語設定が考慮される。 Start/language システムレベルのセッション変数への変数の割り当て language 中だ。

変数の書き込みモードを指定する

ターゲット変数のデータ型は、変数の書き込みモードに影響する。異なる変数間の書き込みモードを以下に示す:

  1. ターゲット変数のデータ型は String.
  • オーバーライト ソース変数はターゲット変数に直接上書きされる。
  • クリア 以下は、選択した変数のリストです。
  • セットアップ 手動で値を指定したい場合は、ソース変数を設定する必要はない。
  1. ターゲット変数のデータ型は Number.
  • オーバーライト ソース変数はターゲット変数に直接上書きされる。
  • クリア 以下は、選択した変数のリストです。
  • セットアップ 手動で値を指定したい場合は、ソース変数を設定する必要はない。
  • デジタル処理 ターゲット変数加减乘除リグ
  1. ターゲット変数のデータ型は Object.
  • オーバーライト ソース変数の内容は、ターゲット変数に直接上書きされる。
  • クリア 以下は、選択した変数のリストです。
  • セットアップ 手動で値を指定したい場合は、ソース変数を設定する必要はない。
  1. ターゲット変数のデータ型は Array.
  • オーバーライト ソース変数の内容は、ターゲット変数に直接上書きされる。
  • クリア 以下は、選択した変数のリストです。
  • 追加の諡号 ターゲットの配列変数に新しい要素を追加する。
  • エクステンション ターゲットの配列変数に新しい配列を追加したい場合、つまり一度に複数の要素を追加したい場合は、そうすればよい。
無断転載を禁じます:チーフAIシェアリングサークル " Difyワークフローにおける変数集約と変数割り当てノード
ja日本語