変数代入を使えば、Difyのチャットボットが過去の会話内容を記憶し、ユーザーごとにパーソナライズされた応答が可能になります。
Difyでは通常、前のステップの情報を次のステップで引き継ぐことができません。しかし、変数代入機能を使うことで、必要な情報をワークフロー内のどこからでも自由に取り出して活用できるようになります。

Tom(@0x__tom)
代表取締役 CEO
Dify を活用した企業の DX 支援や AI エージェント事業などに取り組む株式会社MYUUUという生成AIスタートアップの代表。生成AIユーザーが1,400名所属し、Difyの最新ユースケースを学び合うコミュニティ「FRACTAL LAB」を運営しています。
Difyにおける変数代入とは?
Difyにおける変数代入とは、ユーザーの発言やAIの応答といった特定の情報を「変数」という箱に保存し、ワークフロー内の他のステップでいつでも取り出して使えるようにするための機能です。
通常、Difyの各処理(ノード)は独立しているため、前のステップの情報を次のステップで利用するには、この変数代入を使って明示的に情報を引き継がせる必要があります。忘れてほしくない情報はDifyの場合、会話変数に保存する必要があります。Difyでは変数代入というブロックを使います。


変数代入を使うことによりキチンと大切なことを覚えておいてくれます
変数代入ノードを使うことにより新たに情報を上書きしたり、追加したり、削除したり自由に情報をアップデートできます。
情報の保存方法は3種類あります。
- Overwrite (上書き): ソース変数の内容を会話変数に上書きします。
- Append (追加): 配列型の会話変数に新しい情報を追加します。
- Clear (クリア): 会話変数の内容をクリアします
Difyで変数代入はどうやったらできる?具体的な方法とノードの設定を解説!
変数代入は、ワークフロー編集画面で「+アイコン > 変数の代入」を選択して変数代入ノードを追加することで利用できます。


変数代入ノードでは、主に以下の設定を行います。
- 変数
- 値を代入する会話変数を選択(または新規作成)
- ソース変数を設定
- 代入する値の取得元となる変数を選択
- 操作モード
- データの操作方法を選択(データ型によって選択肢が変化)
データ型と操作モードの用途別設定
変数代入ノードでは、変数のデータ型に応じて、様々な操作モードを選択できます。
データ型 | 操作モード | 説明 |
---|---|---|
文字列型 (String) | 上書き (Overwrite) | ソース変数の値で対象変数の値を置き換えます。 |
クリア (Clear) | 対象変数の値を削除します。 | |
設定 (Set) | 手動で入力した値を対象変数に割り当てます。 | |
数値型 (Number) | 上書き (Overwrite) | ソース変数の値で対象変数の値を置き換えます。 |
クリア (Clear) | 対象変数の値を削除します。 | |
設定 (Set) | 手動で入力した値を対象変数に割り当てます。 | |
算術 (Arithmetic) | 対象変数に対して、足し算、引き算、乗算、割り算を行います。 | |
オブジェクト型 (Object) | 上書き (Overwrite) | ソース変数の値で対象変数の値を置き換えます。 |
クリア (Clear) | 対象変数の値を削除します。 | |
設定 (Set) | 手動で入力した値を対象変数に割り当てます。 | |
配列型 (Array) | 上書き (Overwrite) | ソース変数の値で対象変数の値を置き換えます。 |
クリア (Clear) | 対象変数の値を削除します。 | |
追加 (Append) | 対象変数の配列に新しい要素を追加します。 | |
拡張 (Extend) | 新しい配列を対象変数に追加し、一度に複数の要素を追加できます。 |









操作モードはデータ型によって変わるので注意!用途に合わせて選びましょう。
操作モード例
例1:ユーザー名の保存
文字列型の変数 user_name に、ユーザーが入力した名前を保存する場合、操作モードは「上書き」 を選択します。
例2:カウントアップ
数値型の変数 count の値を1ずつ増やしたい場合、操作モードは「算術」 を選択し、演算子を「+」、値を「1」に設定します。
例3:商品リストに追加
配列型の変数 items に新しい商品を追加する場合、操作モードは「追加」 を選択します。
エスケープ機能:LLM出力を配列にする
LLMノードの出力を配列型の変数に代入する際、エスケープ機能を使うことで、出力形式をarray形式に変換できます。
例えば、LLMノードの出力が {“name”: “apple”, “price”: 100} という形式の場合、以下のように記述することで配列に変換できます。
{{#each outputs.llm_output.result as |item|}}
{
"name": "{{item.name}}",
"price": {{item.price}}
}
{{/each}}



LLMノードと組み合わせる時は、エスケープ機能が便利!です
変数代入ノードの3つのメリット
変数代入を活用することで、チャットボットには3つのメリットがあります。
パーソナライズされた応答
ユーザーの属性や過去の会話履歴に基づいた、一人ひとりに最適化された応答を生成できます。
例: 過去の購入履歴からおすすめ商品を提案します。
動的な会話フロー
会話変数の値に応じて会話の流れを柔軟に変化させ、状況に応じた対話を実現できます。
例: ユーザーの年齢層によって異なる会話スクリプトに分岐します。
効率的な情報管理
ユーザー情報や会話履歴を変数で一元管理することで、必要な情報に素早くアクセスし、スムーズな対応が可能です。
例: 過去の問い合わせ内容を参照して、迅速なサポートを提供します。



変数代入は、ユーザー体験を向上させるための必須テクニックです!
変数代入の注意点
変数代入は強力な機能ですが、利用にあたっては以下の3つの注意点があります。
データ型
変数に格納する値のデータ型を正確に設定しましょう。
変数のスコープ
会話変数はワークフロー全体で共有されます。変数の値を変更する際は、他のノードへの影響を考慮する必要があります。
容量制限
会話変数には容量制限があります。大量のデータを保存する場合は、外部データベースとの連携や、LLMによる要約を検討しましょう。
変数代入の活用事例
変数代入は、様々なユースケースで活用できます。
例1:ユーザーの好みを記憶
好きな色や食べ物を記憶して、おすすめを提案できます。
例2:会話履歴の管理
過去の会話内容を記録し、一貫性のある会話を実現できます。
例3:多段階の質問
複数の質問を順番に行い、回答を変数に保存して複雑な処理を実行できます。
例4:条件分岐
変数の値でシナリオを分岐させ、ユーザー一人一人に最適なパーソナルな体験を提供できます。
これらの活用例はほんの一例です。変数代入をマスターすることで、アイデア次第で様々なチャットボットを開発できます。
よくある質問
Difyのチャットボットが、前の会話を覚えていないのはなぜですか?
Difyでは、各処理(ノード)が独立しているため、通常は前のステップの情報を次のステップに引き継ぐことができません。会話内容を記憶させるには、「変数代入」機能を使って、意図的に情報を保存する必要があります。
変数代入を使うと、どのようなことができますか?
ユーザーの名前や過去の発言などを「変数」として保存し、いつでも取り出せるようになります。これにより、ユーザーごとにパーソナライズされた応答や、会話の流れを動的に変更することが可能になります。例えば、ユーザーの好みを記憶しておすすめ商品を提案したり、過去の問い合わせ内容を参照してスムーズなサポートを提供したりできます。
保存した情報を更新するにはどうすればいいですか?
変数代入ノードには「上書き」「追加」「クリア」といった操作モードがあり、保存した情報を自由に更新、追加、削除できます。例えば、ユーザー名の情報を新しいものに更新したり、商品リストに新しい項目を追加したりすることが可能です。
変数代入を使う上で、何か注意点はありますか?
はい、3つの注意点があります。まず、保存するデータの種類(文字列、数値など)を正確に設定すること。次に、変数はワークフロー全体で共有されるため、変更が他の部分に影響しないか考慮すること。最後に、保存できるデータ量には限りがあるため、大量の情報を扱う場合は外部データベースとの連携なども検討しましょう。