変数とコンテキスト管理
dify-docs-manage-variables-and-context
DifyのChatflow(チャットボット向けワークフロー)では、ノード間で値を受け渡したり、会話全体の状態(コンテキスト)を保持するために「変数」を使用します。
変数の種類
Difyのワークフローでは主に以下の3種類の変数を扱います。
1) システム変数 (System Variables)
システムが自動で提供する実行時情報です。ユーザー入力やセッションIDなどが含まれます。
変数 | 説明 |
sys.query | ユーザー入力メッセージ |
sys.files | アップロードファイル |
sys.conversation_id | 会話ID(セッション識別用) |
sys.user_id | ユーザーID |
2) ノード出力変数 (Node Output Variables)
各ノードの処理結果です。後続のノードから参照することで、フロー内でデータをバケツリレーのように渡せます。
{{#ノード名.出力変数名#}}
例:
{{#knowledge_retrieval.result#}}
{{#llm.text#}}- 参照の仕組み:
- 前段にあるノードの出力(
textやresultなど)を、後続ノードの入力欄で選択して使用します。 - 例: 「LLMノード」の生成テキストを、「HTTPリクエストノード」の入力として使う。
3) 会話変数 (Conversation Variables)
会話(セッション)全体で値を保持・更新できる変数です。ノード出力変数はその場限りですが、会話変数は会話のキャッチボールが続いても値が維持されます。
用途:
- 状態管理: ユーザー情報(名前、会員ランクなど)や選択、文脈の記憶(「現在どの話題について話しているか」など)、進行状況を保持
- 累積情報: 複数ターンにわたる情報収集
- カウンター: 質問回数などのカウント
変数の参照方法
プロンプトや入力フィールドでの参照
LLMノードのプロンプトや、各ノードの設定フィールド内で変数を埋め込みます。
DifyのUI上では、入力欄にある 「{x}」ボタン を押すか、{ を入力することで変数選択リストを呼び出せます。
## 参考情報
{{#knowledge_retrieval.result#}}
## ユーザーの質問
{{#sys.query#}}
//{{#ノード名.変数名#}} の形式で内部的に管理されます。条件分岐での参照
「IF/ELSE(条件分岐)」ノードで変数の値を評価し、処理を分岐させます。
- 例:
sys.query(ユーザー入力) に「予約」という単語が含まれているか
会話変数(Conversation Variables)の操作
1. 定義(作成)
ワークフローエディタのメニュー(通常は「開始(Start)」ノード付近や画面下部の「Conversation Variables」タブ)から変数を定義します。
設定手順
- フローエディタ上部の「変数」をクリック
- 「+ 変数を追加」をクリック
- 変数名とタイプを設定
設定項目:
- 変数名(例:
user_name)
- タイプ(String, Number, Array 等)
タイプ | 用途 |
文字列 | テキストデータ |
数値 | カウンターなど |
配列 | リストデータ |
- 説明(任意)
2. 更新(書き込み)
重要: 会話変数に値を保存するには、「変数割り当て (Variable Assigner)」ノードを使用します。
- フロー内に「変数割り当て」ノードを追加。
- 「ターゲット変数」に、定義した会話変数(例:
user_name)を選択。
- 「値」に、書き込みたい内容(例: 前段のLLMノードで抽出した名前)を設定。
3. 利用(読み出し)
他の変数と同様に、プロンプト内などで {{#conversation.user_name#}} のように選択して参照します。
実践例:ユーザー情報の記憶
ユーザーが名前を名乗った場合、それを記憶して以後の会話で利用するフロー例です。
- 抽出 (LLMノード)
- ユーザー入力
sys.queryから名前を抽出するよう指示。 - 出力:
extracted_name
- 保存 (変数割り当てノード)
- 会話変数
user_nameに、extracted_nameの値を代入。 - モード: 「上書き (Overwrite)」など。
- 応答 (LLMノード)
プロンプト:
{{#user_name#}}さん、こんにちは。
//以降のターンでも {{#user_name#}} は保持され続ける。- デジタルヒューマンでの活用例
ユーザー情報の保持
会話変数:
- user_name: ユーザーが名乗ったら保存
- inquiry_type: 問い合わせ種別コンテキストの引き継ぎ
プロンプト:
前回の会話で確認した情報:
- お名前: {{#user_name#}}
- お問い合わせ種別: {{#inquiry_type#}}ベストプラクティス
- 明確な命名規則
- ノード名や変数名は、後で見た時に理解しやすい英語名推奨(例:
extract_intent,user_category)。
- 会話変数は必要最小限に
- すべてを会話変数に入れると管理が複雑になります。セッションをまたいで保持する必要がある情報(ユーザー属性、現在のステータス等)に絞りましょう。
- 初期値の考慮
- 変数が空(null/empty)の場合の挙動をプロンプト内で考慮するか、IFノードでチェックするとエラーを防げます。
参考URL
- Dify 公式ドキュメント (Variables): https://docs.dify.ai/versions/3-0-x/en/user-guide/workflow/variables#variables
- Dify 公式ドキュメント (Conversation Variables): https://docs.dify.ai/versions/3-0-x/en/user-guide/workflow/variables#conversation-variables
最終更新日 February 20, 2026