第60話:【Dify応用】第31話の知識を解き放て!変数×条件分岐で作る「ドクターストップ機能」

分かれ道の標識の画像。一方の矢印は「ビールを楽しむ(緑)」を指し、もう一方は「飲むのをやめる(赤)」を指している。交差点にロボットが立っており、「6」という数字が表示されたカウンターを持っている。) AI活用

前回(第59話)は、注文のたびに数字が増える「ビールカウンター」を作りました。 これでAIは記憶力(変数)を手に入れましたが、今のままだと「100杯目です!乾杯!」と、お客さんが倒れるまでお酒を出し続ける危険なAIになってしまいます(笑)。

そこで今回は、以前第31話で覚えたあの機能を思い出してください。 そう、**「条件分岐(IF/ELSE)」**です!

今回は、

この2つを組み合わせて、**「6杯目になったら強制的に注文を止める機能」**を実装します。

また今回は、私が前回の記事でやってしまっていた**「ある設定ミス」が原因で、「AIはカウントしてくれるのに、なぜかドクターストップがかからない」**という不思議な現象の解決法もシェアします。


1. 今回のミッション:「6杯目の壁」を作れ

今のアプリの動きはこうなっています。 「注文」➡「+1する」➡「ビールを出す(LLM)」 これだと、永遠にビールが出続けます。

これを、次のように改造します。 「注文」➡「+1する」➡【運命の分かれ道(IF)】

  • ルートA(5杯以下):今まで通りビールを出す。
  • ルートB(6杯以上)「もう飲みすぎです!お水にしますね」と断る。

2. 実践:線路を切り替えろ!

前回の「ビールカウンター」の続きから編集します。 31話でやった手順を思い出しながら進めてください。

DifyのIF/ELSEノードを用いた条件分岐の設定画面。累計杯数変数(total_beer)が一定値を超えた場合に、通常の対話から警告メッセージへと処理を切り替えるためのロジック構築手順を図解しています。

ステップ1:「条件分岐」ブロックを入れる

現在の流れは 変数代入LLM とつながっていますね。この間に「分岐」を割り込ませます。

  1. 「変数代入(+1)」 ブロックの後ろにある 「+」 をクリックします。
  2. リストから 「条件分岐(IF/ELSE)」 を選びます。

ステップ2:条件(ルール)を決める

ここが今回のポイントです。 31話では「ユーザーの言葉」で分岐させましたが、今回は**「変数の数字」**で分岐させます。

  1. 追加された「条件分岐」ブロックをクリックします。
  2. 条件を追加
    • 変数: 前回作った {x} beer_count (会話変数)を選びます。
      • ※リストの下の方にある、アイコンが {x} のものを必ず選んでください!
    • 記号 (以上) を選びます。
    • : 半角数字で 6 と入力します。

【この設定の意味】 「もし、beer_count の数字が 6 以上(6, 7, 8…)になったら、IF(上)の道へ進む」 「そうじゃなかったら(1〜5)、ELSE(下)の道へ進む」 という意味になります。


3. 実践:2つの結末を作る

道が分かれたので、それぞれの行き先を作ります。

Difyの条件分岐ノードと連動するLLMの設定画面。累計杯数が一定値(6杯)未満の「通常時」に、AIがどのように接客するかを定義したプロンプト内容。記憶された変数に基づき、自然な会話を生成するロジックを説明しています。

ルートA:通常営業(ELSEの道)

5杯目までの「優しい店員」ルートです。

  1. 条件分岐ブロックの 「ELSE(下側の丸)」 から線を引っ張り、今まであった「LLM」ブロックにつなぎます。
    • (既存のブロックを再利用する形です)
  2. 設定は前回のままでOKです(「乾杯!」と言う係)。
DifyのIF/ELSEノードを活用した「飲みすぎ防止アラート」の実装画面。累計杯数が制限値(6杯)を超えた際、AIが自動で通常対話をストップし、健康を気遣う警告メッセージを出力するロジックを説明しています。

ルートB:ドクターストップ(IFの道)

次に、6杯目以降の「鬼の店員」ルートを作ります。 ここは「決まったセリフ」を言うだけなので、わざわざLLM(AI)を使う必要はありません。「回答」ブロックを直接つなぎます。

  1. 条件分岐ブロックの 「IF(上側の丸)」 の横にある 「+」 をクリックし、**「回答(Answer)」**を追加します。
  2. この回答ブロックに、お断りのメッセージを直接書き込みます。Plaintext⚠️ 飲みすぎです! 健康のため、今回はビールの提供を停止します。 代わりにお水をどうぞ🚰

【ポイント】 毎回内容が変わる会話には「LLM」を使いますが、今回のような固定メッセージなら「回答」ブロックだけで十分です。動作も速く、シンプルになります!


Difyの「記憶(会話変数)」と「判断(条件分岐)」を組み合わせた、ビール注文カウンターAIの動作テスト。累積杯数が設定値を超えた際、AIが自動で警告モードに切り替わり、健康を気遣うメッセージを返している成功画面です。

4. テスト実行:運命の6杯目

さあ、正しく動くか実験です! (※テスト前に必ずチャット画面上の「ほうきマーク」で記憶をリセットしてください)

  1. 1杯目:「生ひとつ!」 ➡ AI「1杯目ですね、乾杯!」(ELSEルート)
  2. 5杯目:「もっと!」 ➡ AI「5杯目ですね、乾杯!」(ギリギリELSEルート)
  3. 6杯目:「うぃ〜、もう一杯……」

ここでAIの態度が急変するはずです。

AI:「⚠️ 飲みすぎです!健康のため、今回はビールの提供を停止します。代わりにお水をどうぞ🚰」

大成功です! 31話で学んだ「条件分岐」が、変数を手に入れたことで**「状況判断」**へと進化しました。私はテストなので3杯までに変更しましたが。


5. 【失敗談】AIは数えてくれるのに、なぜか止まらない?

実は私、この設定をする時に一度つまづきました。 「テストでおかわりをしたら、AIはちゃんと『2杯目ですね』『3杯目ですね』と言ってくれる。なのに、6杯目になってもドクターストップがかからない!

原因は、前回の記事で作った**「変数代入ブロックの設定」**にありました。

落とし穴:「足す数」を「0」が間違っていた

前回、テストをした時にいきなり「2杯目」と表示されてしまったため、調整しようとして**「足す数」を「0」**に設定変更していました。

  • AI(LLM): 会話の履歴を見て「あ、おかわりだから次は2杯目だな」と気を利かせて答えてくれる。(だから気づかない!)
  • 変数(システム)1 + 0 = 1 なので、裏側の数字はずっと「1」のまま。
  • 結果: AIは「10杯目です!」と言うのに、条件分岐ブロックは「まだ変数1だからOK」と通してしまう。

AIが賢すぎて、裏側のミスを隠蔽してしまっていたんですね。

正しい解決策

  1. 数値を「1」に戻す: 変数代入ブロックの設定は、必ず += 1 にしてください。
  2. 「いきなり2杯目」問題の解決法: 数字をいじるのではなく、チャット画面上の「ほうきマーク」を押して記憶をクリアしてください。これで正しく「1杯目」から始まります。

この「0にして誤魔化していた設定」を「1」に戻した瞬間、AIの口先だけでなく、システムとしてドクターストップ機能が動き出しました!


まとめ:点と点がつながった!

お疲れ様でした! 今回は、過去の記事(31話)の知識と、最新の知識(変数)を組み合わせてみました。

  • 31話: 言葉で分岐する(「Aと言ったらB」)
  • 今回: 状況で分岐する(「6回以上ならストップ」)

同じ「条件分岐」でも、変数と組み合わせることで**「ゲームオーバー判定」「会員ランク判定」**など、作れるアプリの幅が一気に広がります。 ブログを長く続けてきたからこそできる「合わせ技」ですね!

次回は…… 【Difyの基礎】「作る」前に「探せ」!チャットフローの開始ブロックに隠された「6つの便利ツール」を完全解説という記事をアップしようと思います。是非お楽しみに!

コメント

タイトルとURLをコピーしました