🐈

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

2024/12/04に公開

はじめに

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

Discussion