Dify 変数代入ノードとは?使い方から活用事例まで徹底解説!【入門ガイド】

Dify「変数代入ノード」入門ガイド 使い方から活用事例まで徹底解説 生成AIの基本とビジネス活用事例
DifyでAIチャットボットを開発していると、「前の会話の内容を覚えてくれない」「ユーザーの名前を記憶して、もっとパーソナライズされた応答をさせたい」といった課題に直面することがあります。この課題を解決する鍵となるのが、Difyの「変数代入ノード」です。

変数代入ノードを使いこなすことで、AIとの対話に「記憶」を持たせ、文脈に応じた自然で高度なコミュニケーションを実現できます。

この記事では、Difyの変数代入ノードの基本的な概念から、具体的な設定方法、そして実践的な活用事例まで、初心者にも分かりやすく網羅的に解説します。この記事を読み終える頃には、ユーザー情報を活用したスマートなAIエージェントを構築するための知識が身についているでしょう。

Difyの変数代入ノードとは?会話を記憶させるための必須機能

変数代入ノードの基本的な役割

Difyの変数代入ノードは、ユーザーの発言やAIの応答、特定の処理結果といった情報を「変数」という名前の付いた箱に一時的に保存し、チャットフロー内の他のノードで再利用できるようにする機能です。Difyのチャットフローでは、各ノード(処理の単位)が基本的に独立して動作します。そのため、あるノードで得た情報を別のノードで使いたい場合、この変数代入ノードを使って明示的に情報を引き継がせる必要があります。

図:変数を「名前付きの箱」とイメージすると分かりやすい

この機能により、例えば「ユーザーの名前」や「以前の選択肢」といった情報を会話の最後まで保持し、一貫性のある対話フローを構築することが可能になります。

なぜ変数代入ノードが必要なのか?

LLM(大規模言語モデル)ノードには、短期的な会話履歴を記憶するメモリ機能が備わっています。しかし、このメモリには保持できる対話の回数に制限があります。そのため、会話が長くなると古い情報から忘れられてしまいます。

一方で、変数代入ノードを使って「会話変数」に保存した情報は、会話セッションが続く限り、意図的にクリアしない限り保持されます。ユーザーの言語設定や会員IDなど、会話全体を通して確実に記憶させておきたい重要な情報は、変数代入ノードで会話変数に保存することが推奨されます。これにより、LLMのメモリ制限に左右されない、安定的な長期記憶を実現できるのです。

メモリは保持できる対話の数に制限があり、古いものから忘れるが、変数に保存することで、確実に情報を保持することができる図3:重要な情報は「会話変数」という長期記憶用の保管庫に入れよう

Dify変数代入ノードの基本的な設定方法

変数代入ノードを効果的に利用するためには、まず「会話変数」を作成し、次にノードを設定するという2つのステップが必要です。ここでは、その手順を分かりやすく解説します。

1. 会話変数の作成

変数代入ノードで値を保存する先となる「会話変数」をあらかじめ作成しておく必要があります。

まず、チャットフロー編集画面の上部にある①「会話変数」ボタンをクリックします。
次に、②「変数を追加」を選択して新しい変数を作成します。

会話変数の変数追加をするDifyの画面操作

「会話変数を追加」画面で、③「変数名」「タイプ」を設定します。

DIfy会話変数の追加設定の画面操作説明

設定項目は以下の通りです。

  • 名前: 変数を識別するための名前です。後から見て分かりやすい名前(例:user_name, selected_language)を付けましょう。
  • タイプ: 保存するデータの種類(テキスト、数値など)を選択します。
    • string (文字列):テキスト(文字)データを扱うための最も基本的な型です。文章、単語、名前など、あらゆる種類の文字情報がこれに該当します。
    • number (数値):整数や小数などの数値データを扱うための型です。計算や数量の指定に使われます。
    • boolean (真偽値):「真 (true)」か「偽 (false)」の2つの値しか持たない型です。
      オン/オフ、はい/いいえのような二者択一の状態を表すのに使います。
    • object (オブジェクト):キー(名前)と値のペアで構成される、複雑なデータをひとまとめにした型です。JSON形式のデータ構造をイメージすると分かりやすいです。
      ※外部APIに複雑なJSONデータを送信する必要がある場合、この型で変数を定義します。
    • array(配列型):複数のデータをリスト形式でまとめて扱うための型です。
      • array[string] (文字列の配列):複数の文字列をリストとして扱います。
      • array[number] (数値の配列):複数の数値をリストとして扱います。
      • array[boolean] (真偽値の配列):複数の真偽値(true/false)をリストとして扱います。
      • array[object] (オブジェクトの配列):複数のオブジェクトをリストとして扱います。最も複雑で強力なデータ構造の一つです。表形式のデータや、アイテムのリストなどを表現するのに適しています。
Type データ形式 説明 主な用途
string 文字列 "hello" 名前、文章、キーワードなど、あらゆるテキスト
number 数値 1233.14 数量、年齢、スコア、ID
boolean 真偽値 truefalse オン/オフ、はい/いいえのフラグ
object オブジェクト {"key": "value"} 構造化されたデータ、APIの複雑なパラメータ
array[string] 文字列の配列 ["a", "b", "c"] 複数のタグ、キーワードリスト
array[number] 数値の配列 [1, 2, 3] 統計データ、IDリスト
array[boolean] 真偽値の配列 [true, false] 複数のチェック項目の状態
array[object] オブジェクトの配列 [{"id":1}, {"id":2}] 表形式データ、商品リスト、DBの検索結果
  • デフォルト値: 変数が最初に持つ初期値を設定します。初期値が不要な場合は空白のままで問題ありません。
  • 説明: 変数の役割などをメモとして残せる欄です。

これらの項目を設定することで、データを保存するための「箱」が用意できます。

2. 変数代入ノードの配置と設定

次に、チャットフロー上に変数代入ノードを配置します。

Difyで変数代入のブロック(ノード)を追加

  1. 右クリックしてブロックを追加
  2. 変数代入を選択しブロックを画面に配置

編集画面で「+」アイコンをクリックし、「ツール」カテゴリの中から「変数の代入」を選択して追加します。

Difyの変数代入ノードの設定(変数の設定、書き込みモード、パラメータの設定)

ノードをクリックして設定画面を開くと、主に以下の項目が表示されます。

  1. 変数の選択: 「+変数を追加」ボタンを押し、先ほど作成した会話変数の中から、値を代入したい変数を選択します。
  2. 書き込みモードの選択: 変数に値をどのように書き込むか(上書き、追加など)を選択します。このモードはデータ型によって選択肢が変わります。
  3. パラメータの設定: どこから持ってきた値を書き込むかを指定します。チャットフローの上流にある他のノードの出力(例:ユーザーの入力)などを選択できます。

これらの設定を行うことで、「どの変数に」「どの値を」「どのように書き込むか」を指定できます。

3. 書き込みモードの選択:データ型ごとの操作を理解する

変数代入ノードの最も重要な設定が「書き込みモード」です。保存するデータの型(タイプ)によって、選べる操作が異なります。これを理解することで、より高度なデータ操作が可能になります。

以下に、主要なデータ型ごとの書き込みモードをまとめました。

データ型 書き込みモード 説明
文字列 (String) 上書き (Overwrite) 既存の値を新しい値で完全に置き換えます。
ユーザー名など、単一の情報を更新する場合に使います。
クリア (Clear) 変数の値を空(から)にします。
セット (Set) 事前に決めた固定のテキスト値を設定します。
数値 (Number) 上書き (Overwrite) 既存の数値を新しい数値で置き換えます。
クリア (Clear) 変数の値を0や空(から)にします。
セット (Set) 固定の数値を設定します。
算術 (Arithmetic) 加算(+=)、減算(−=)、乗算(*=)、除算(/=)などの計算を行います。
スコアの加算や回数のカウントアップに便利です。
配列 (Array) 上書き (Overwrite) 既存のリスト全体を新しいリストで置き換えます。
クリア (Clear) リストを空(から)にします。
追加 (Append) リストの末尾に新しい項目を1つ追加します。
チェックリストなどに項目を追加していく場合に使用します。
延ばす (Extend) 別のリストの全項目を現在のリストに追加します。
最初を削除する (Remove First) 現在のリストの先頭(0番目)の要素を1つ削除します。
チャット履歴などを配列で管理している際に、最も古い履歴を削除してトークン数を制限したい場合に使用します。
最後を削除する (Remove Last) 現在のリストの末尾の要素を1つ削除します。
直前の操作を取り消すような機能を実装したい場合に使用します。

これらのモードを適切に使い分けることが、動的なチャットフローを構築する鍵となります。

実践!Dify 変数代入ノードの活用事例

ここでは、変数代入ノードを使った具体的なチャットフローの構築例をいくつか紹介します。これらの事例を参考に、ご自身のAIエージェントに応用してみてください。

活用事例1:名前と役職を記憶してパーソナライズするチャットボット

ユーザーの名前と役職を記憶するDifyのワークフロー図。 
図:ユーザーの名前と役職を記憶するチャットフローの全体像

最も基本的な活用例が、ユーザーの名前を記憶し、会話の中で呼びかけることで親近感を演出する使い方です。

  1. まず、user_nameという名前と、post_nameという名前で文字列型の会話変数を作成します。
  2. チャットフローの冒頭で、ユーザーに名前と役職を入力する入力欄を設定します。
  3. ユーザーの入力を受け取った直後に、変数代入ノードを配置します。
  4. 変数代入ノードで、user_namepost_nameという変数に、ユーザーの入力を「上書き (Overwrite)」モードで代入します。
  5. 以降のLLMノードのプロンプト内で
    {{user_name}} さん、こんにちは!

    のように変数を呼び出すことで、パーソナライズされた応答が可能になります。

  6. また、会話の中で役職の変更があった場合など、「パラメータ抽出ノード」で役職名のみを抜き出し、その直後に変数代入ノードで値を「上書き」すれば、変数の内容を更新することもできます。

活用事例2:会話の回数をカウントアップするチャットボット

「ユーザー入力」→「変数代入(カウント+1)」→「条件分岐」というループ処理の、Difyのワークフロー図。
図:会話回数を記録して応答を変化させるチャットフローの全体像

ユーザーとの対話回数を記録し、特定の回数に応じて応答を変化させる、といった動的なフローも作成できます。

  1. conversation_countという名前で数値型の会話変数を作成し、デフォルト値を0に設定します。
  2. ユーザーからの入力があるたびに、変数代入ノードを通過させます。
    ※チャットフローの図では下のルートに該当します。
  3. 変数代入ノードで、conversation_count変数に対し、「算術 (Arithmetic)」モードの「加算」を選択し、値に1を設定します。
  4. これにより、ユーザーが発言するたびにカウントが1ずつ増えていきます。
  5. 条件分岐ノードを使い、「conversation_countが4以上になったら」といった条件で、上のルートに分岐させることで、特別なメッセージを送るなどの処理が実現できます。

3回だけの特別な対応

魔法のランプのように、3回まで願い事を叶えるものの、4回目以降は反応しない、といった演出も可能になります。

 

活用事例3:チェックリストや買い物リストを管理するチャットボット

「ユーザー入力」→「変数代入(リストに追加)」の処理と、配列変数が更新されていく様子の図。
図:配列変数を使って複数の項目を記憶するチャットフローの全体像

ユーザーが挙げた複数の項目をリストとして記憶し、後でまとめて提示するような使い方も可能です。

  1. checklistという名前で配列型の会話変数を作成します。
  2. ユーザーに「買い物リストに追加したいものを教えてください」と促します。
  3. ユーザーが「リンゴ」「バナナ」などと入力するたびに、変数代入ノードでその内容をchecklist変数に「追加 (Append)」モードで代入します。
  4. ユーザーが「リストを見せて」と言ったら、checklist変数の内容をLLMノードに渡して整形させ、「現在のリストはこちらです:リンゴ, バナナ…」と表示させることができます。

応用事例:Dify公式テンプレート「Patient Intake Chatbot」(患者受付チャットボット)に学ぶ

Difyには、会話変数を活用した公式テンプレート「Patient Intake Chatbot」(患者受付チャットボット)が用意されています。このテンプレートでは、より高度な変数の使い方がされています。

  • 初回会話の判定: is_first_messageという変数(デフォルト値: 1)を使い、最初のメッセージかどうかを判定します。初回の会話では患者情報の収集フローに進み、処理が終わるとこの変数の値を0に更新します。これにより、次回以降の会話では別のフローに分岐させることができます。
  • 会話内容の記憶: 患者の年齢(age)、症状(symptoms)などを個別の会話変数に保存し、後続の対話でこれらの情報を参照して、より的確なコミュニケーションを実現しています。

変数代入ノードを使う上での注意点

変数代入ノードは非常に強力ですが、正しく使うためにいくつか注意すべき点があります。トラブルを避けるために、以下のポイントを覚えておきましょう。

データ型を正確に設定する

変数を新規作成する際、保存したい情報の種類に合わせてデータ型(文字列、数値、配列など)を正確に選択することが非常に重要です。例えば、数値を扱う変数に誤って文字列を代入しようとすると、意図しないエラーや動作不良の原因となります。特に、後から算術演算やリスト操作を行いたい場合は、必ず対応するデータ型(数値型や配列型)で変数を作成してください。

変数のスコープを意識する

複数の場所から一つの変数に書き込みがあり、作業者が混乱しているイラスト。

Difyの会話変数は、そのチャットフロー全体で共有される「グローバル変数」として機能します。これは便利な反面、意図しない場所で値が上書きされてしまうリスクも伴います。特に複雑なチャットフローを構築する際は、変数名が他の場所で使われていないか、どのノードで値が変更される可能性があるかを常に意識することが大切です。分かりやすい変数名を付け、変数の役割を「説明」欄に記載しておくことをお勧めします。

保存容量の制限に注意する

小さな箱に大量の書類を詰め込んでパンクしているイラスト。

会話変数に保存できるデータ量には限りがあります。特に、長い会話履歴や大量の情報をそのまま変数に保存し続けると、容量制限を超えてしまい、チャットフローが正常に動作しなくなる可能性があります。この問題を防ぐため、長文のテキストを保存する際は、LLMノードを使って内容を要約してから変数に代入する、あるいは、大量のデータを扱う場合は外部のデータベースと連携するといった工夫が必要です。

まとめ

Difyの変数代入ノードは、単なる応答を繰り返すだけのチャットボットから、会話の文脈を理解し、ユーザー一人ひとりに合わせた対話ができるAIエージェントへと進化させるための中心的な機能です。

その役割は、対話中の情報を「会話変数」に保存し、必要な時に再利用することにあります。データ型に応じた「書き込みモード」を使い分けることが、効果的なチャットフローを構築する鍵となります。本記事で紹介した活用事例を参考に、まずはユーザーの名前を記憶させるような簡単なものから試してみてください。注意点を意識すれば、より安定的な高度なAIアプリケーションの開発が可能になるでしょう。

ツールボックスを持ったロボットが、ユーザーと笑顔で対話しているイメージイラスト。
変数代入をマスターして、あなただけのAIエージェントを創造しよう!

CTAボタン
Dify活用事例集 CTA
タイトルとURLをコピーしました