Difyで会話変数を簡単に使い倒す方法を解説。どのようなユースケースが効果的?

2024年10月06日
2024年11月02日
Shumpei Okanoue / Noviq Inc.代表
Shumpei Okanoue / Noviq Inc.代表
Difyで会話変数を簡単に使い倒す方法を解説。どのようなユースケースが効果的?

Difyの会話変数とは?

会話変数は、Dify内でユーザーとの対話中に特定の情報を一時的に保存し、後続の会話で参照できる機能です。

公式のドキュメントが若干わかりにくいので実例を元に解説します。

これにより、会話の流れを管理し、ユーザーの好みや状況に基づいて個別の応答を生成することが可能です。変数の値は、ワークフロー全体で動的に変更でき、変数代入ノードを使用することで、その場で値を保存したり、他のノードでその値を利用したりできます。

変数代入ノードの使用

変数代入ノードは、Difyのワークフロー中に変数の値を設定するために使用されます。このノードを使用することで、対話中のコンテキストやユーザーの情報を会話変数に保存し、後の会話でその情報を参照できます。

例えば、ユーザーが好みの言語を指定すると、その情報を保存し、以降の会話では指定された言語でやり取りを続けることができます。

変数代入ノードは新たに情報を上書きしたり、追加したり、削除したり自由に情報をアップデートすることができます。

• Overwrite (上書き): ソース変数の内容を会話変数に上書きします。

• Append (追加): 配列型の会話変数に新しい情報を追加します。

• Clear (クリア): 会話変数の内容をクリアします。

172296cc5a6d6d018b2a8080e94eab38-738x1024.webp

実際のワークフローを見てみる

Difyのテンプレート(Patient Intake Chatbot)を読み解く

91046dded7e001e8f3b9a0310bdeebf8-1024x359.webp

キャッチアップに使えるようにdify側でテンプレートが用意されています。

ワークフローを開くと下記のようになっています。

簡単にいうと患者の受付用カスタマーサービスチャットボットのサンプルになっています。患者のデータは、ウェブページ上でのメッセージを通じて収集できるアプリケーションです。

4559743ae642d44aa67ec036e2fb0ce9-1024x388.webp

ポイント①(初回の会話かそうでないかを判定するロジックでの活用)

先頭のワークフローで赤枠の二つのブロックに注目してみましょう。

スクリーンショット2024-10-1022.25.43.webp

"is_first_message"という会話変数が設定されています。

スクリーンショット2024-10-1022.27.59.webp

ここで会話変数のデフォルトの値を見てみましょう。

スクリーンショット2024-10-1022.29.13.webp

"is_first_message"はデフォルトの値は1になっていますね。

スクリーンショット2024-10-1022.30.13.webp

ここでは1という値の場合は、初回のメッセージであり、後続の患者情報の収集に入るように作られています。

次に二つ目のOUTPUT 0というブロックを見ていきましょう。

スクリーンショット2024-10-1022.31.16.webp

下記のコードが設定されており、このブロックを通過すると0という値を必ず返すようになっています。

python - script.py
def main():
    data = 0
    return {
        "result": data,
    }

その後その結果を"is_first_message"という会話変数に代入するロジックが組まれています。

先ほどまでのおさらいをすると、デフォルトの値は1となっており、患者情報の収集をした後、0が代入されるようになっています。

このように会話変数は、会話の内容の記憶だけでなく、フローの中でシナリオを出し分けるためにも使えることがわかります。

ポイント②(会話の内容を記憶する)

次に赤枠部分に注目しましょう。

スクリーンショット2024-10-1022.32.22.webp

まずは、ユーザーのメッセージを解析して、パラメータ化するロジックが組み込まれています。

パラメータ化した後に、次の処理で"age"という会話変数に、パラメータの内容を保存しています。

ここで"age"の初期設定を見てみましょう。

以下では、初期値は空白になっています。ここにパラメータを上書きしています。

スクリーンショット2024-10-1022.33.31.webp

同様に、年齢と、症状についても会話変数に代入するロジックが続いています。

ここで保存した内容は二回目以降のメッセージでも使用されるため、その内容をベースに患者に対してコミュニケーションが取れます。

このように会話変数は、後続の処理に必要な情報を取り扱うための重要な設定になります。

その他の活用方法

シナリオ1: 会話中の情報を記録

会話中にユーザーが提供した情報(例:名前、好み、履歴)を記録し、後続の会話でその情報を参照します。たとえば、ユーザーが会話の初期段階で「日本語」を選んだ場合、その言語選択を会話変数として保存し、後続の対話では常に日本語で応答するようにします。

設定手順:

  1. 会話変数を設定: language という変数を作成し、会話開始時にこの変数が空かどうかを確認します。

  2. 変数の代入: ユーザーが言語を指定した時点で、その値を language 変数に代入します。

  3. 変数の参照: 以降の会話では、language 変数を参照し、選択された言語で応答します。

シナリオ2: チェックリストの管理

チェックリストを会話中に管理し、ユーザーが入力した内容を保存します。会話変数にチェックリストの項目を記録し、次の会話でチェックが完了していない項目をユーザーに確認することが可能です。

設定手順:

  1. チェックリストを会話変数に保存: ai_checklist という変数を設定し、チェックリストの内容を保持します。

  2. 変数の更新: 各会話ラウンドごとに、ユーザーの入力内容を ai_checklist に追加します。

  3. 変数の参照: チェックリストが完了するまで、後続の会話で ai_checklist を参照し、不足している項目を確認します。

注意点

会話変数への保存容量が決まっているケースもあります。

この場合会話変数の上限にヒットするとエラーが出ます。(セルフサーブ型では出ない場合もあるのでわかりにくくデバックが困難です。)

この容量をオーバーすると二回目のメッセージを送信してもメッセージが返されないケースもあるので、会話変数利用中に、なぜかWFが動かないというときは会話変数の容量を確認して、保存する内容をそのまま入れるのではなく、LLMブロックで要約してから変数代入するなどの工夫が必要です。

まとめ

今回はdifyのワークフローにおける重要な要素、会話変数について解説しました。

会話変数により、単一のワークフローから、複合的な条件分岐やユーザー体験のさらなる向上が目指せます。

好評であればさらに応用した活用方法を解説していきますので、記事のシェアなどをしていただけると励みになります。

記事をシェアする