Zenn
🐈

Dify 活用!多段階入力・途中入力・ボタン入力対応ワークフロー構築とコード例

2024/12/04に公開
5
1

はじめに

従来のDifyワークフローでは、最初の入力だけでフローが完結する設計が一般的でした。

# 従来の単純なフロー
start → LLM → answer

しかし、より自然な対話を実現するには、途中でユーザーに入力を促したい場面が出てきます。この記事では、3つのコア技術を組み合わせて多段階入力を実現する方法を解説します。

DSL

https://github.com/tregu148/public/blob/main/dify/多段階入力_会話変数.yml

3行で

  1. chatflowのdialogue_countで今何回目の対話かを管理
  2. 会話変数に選んだ内容を保存
  3. ボタンUIで入力ミスを防ぐ

多段階入力を実現する3つのコア技術

1. 対話回数による分岐制御

仕組み

ポイント

  • dialogue_countは自動でカウントアップ
  • 0回目:性格を選んでもらう
  • 1回目:名前を選んでもらう
  • 2回目:普通の会話を始める

なぜ良いの?

  • ユーザーの入力を段階的に受け取れる
  • 対話の流れを細かく制御できる
  • 途中で確実に止められる

2. 会話変数による状態管理

仕組み

変数の保存方法

なぜ良いの?

  • ユーザーの選択を記憶できる
  • 後の会話で使い回せる
  • 設定が途中で消えない

3. ボタンUIによる入力促進

LLMでボタンを生成

hogehoge の具体的性格・人格をレコメンドします。
一覧と選ぶためのボタンを添えます
all button are secondary.
no code block

模範例:
---
<button data-message="性格: hogehoge" data-variant="secondary">1.穏やかで優しい癒し系の女の子</button>
---

なぜ良いの?

  • ユーザーが迷わない
  • 入力ミスが防げる
  • 次の操作が分かりやすい

メリットと活用シーン

メリット:

  • 複雑な入力フローを自然な対話形式に分解できる
  • 段階的に選択できるので、ユーザーが迷わない
  • 会話変数で状態管理が簡単
  • ボタンUIで入力ミスを防げる
  • 各段階でのテスト・デバッグが容易

活用シーン:

  • 予約システム(日時→人数→オプション)
  • キャラクターメイキング(性格→名前→設定)
  • アンケート(一問一答形式)
  • 商品カスタマイズ(種類→サイズ→オプション)
  • カスタマーサポート(問題分類→詳細→希望対応)

まとめ:3つの技術の組み合わせ効果

このサンプルのワークフローは、チャットボットの性格と名前を設定する多段階の対話を実現するものです。

各フェーズでの動作:

  1. 最初の対話(dialogue_count = 0)

    • 性格の選択肢をボタンで表示
    • ユーザーが選択
    • 選んだ性格をcharacter変数に保存
  2. 2回目の対話(dialogue_count = 1)

    • 保存した性格に合わせて名前の選択肢を表示
    • ユーザーが選択
    • 選んだ名前をassistantname変数に保存
  3. 3回目以降(dialogue_count = 2~)

    • 保存した性格と名前を使って会話

この3つの技術(分岐・変数・ボタン)を組み合わせることで、ユーザーと段階的なやり取りができる柔軟なワークフローを実現できます。

1

Discussion

taiger_sozetaiger_soze

れぐさん
こんばんは。

お世話になります。
むかいと申します。

性格の出力に関して質問させてください。

不思議に思った点は、なぜ?毎回5個の性格が出力されるのか?
ということです。

開始ノードから拝見させていただきましたが
「LLM 性格」のノードで性格の指示が出ていると思うのですが
特に5個出してください等の指示も見当たりませんでした。

なぜあのプロンプトで毎回毎回、5個の性格が出力されるのか
謎すぎて、モヤモヤしてしまい質問させていただきました。
お忙しい所、大変恐縮ですがご教授いただけたら幸いです。
よろしくお願いいたします。

むかい

追伸
自分が作りたいチャットフローの参考にさせていただいております。
非常にありがたいです。
ありがとうございます。

れぐれぐ

むかいさん
こんにちは!

コメント、バッチありがとうございます! ありがたいお言葉もいただいて、励みになります!

さて、毎回5個の候補が出る件ですが、モデル特有の挙動みたいです!
ためしに他のLLMにすると、数が変わります。
あのLLMであのプロンプトにすると、なぜか5個になる、ようです。

すみません、答えになっているでしょうか💦
よろしくお願いいたします。

れぐ

taiger_sozetaiger_soze

れぐさん

こんにちは。

なるほど!理解しました。
モデル次第だったんですねww
ありがとございました。

まだ自分ボットは完成しませんが
れぐさんの記事と実際のチャットフロー参考に
着々と進んでいます!

ありがとうございます!!

taiger_sozetaiger_soze

れぐさん

ありがとうございます。
どうしても躓いてしまったときは
お言葉に甘えてチャットしてみます。

よろしくお願いいたします!!

ログインするとコメントできます