第6章 条件分岐
第5章までで、基本形「ユーザー入力 → LLM → 出力」と、資料を根拠に答えさせる知識検索を組めるようになりました。この章では、入力の内容によって処理を変えたいときに基本形へ追加する、条件分岐のノードを説明します。第3章3-4で示した 「ユーザー入力 → 分岐 → 各処理 → 変数集約器 → 出力」 の形を、自分で作れるようになることが目標です。
分岐に使うノードは、IF/ELSEノードと質問分類器の2つです。条件の性質でどちらを使うかを決めます(使い分けは6-3)。分岐のあと、実行のたびに動くのはどれか1つの経路だけで、分かれた経路の結果は変数集約器で1つにまとめてから出力ノードへつなぎます(6-4)。
図6-1 条件分岐の基本の形。分岐のあと動くのは1つの経路だけで、結果は変数集約器で1つにまとめる
6-1. IF/ELSEノード(明確な条件で分ける)
IF/ELSEノードは、誰が判定しても同じ結果になる明確な条件で処理を分けるノードです。次のような場合に使います。
- 特定の文字が含まれている:問い合わせ文に「至急」の文字が含まれていたら、優先して案内する経路へ回す。
- 入力値が指定した値と一致する:文書の種類の選択欄で「通知文」を選んだ場合は、通知文用の指示文の経路へ回す。
- 入力が空である:備考欄が空の場合は、備考を使わない処理へ進める。
- 添付ファイルがある:資料のファイルが添付されている場合だけ、ファイルの内容を読み取る処理へ進める。
- 数値が指定した範囲に入っている:入力された件数が一定の範囲に入っている場合だけ、一覧を作る処理へ進める。
条件の設定は、「どの変数を」「どう比べて」「当てはまったらどの経路へ進めるか」 の3点で考えます。比べ方には「含む」「で始まる」「で終わる」「一致する」「空である」「より大きい」「より小さい」などがあり、判定に使う変数の型に応じて選びます(添付ファイルの有無の判定など、使える条件は変数の型や環境により異なります)。数値の範囲は、「より大きい」と「より小さい」の2つの条件をAND(すべて満たす)で組み合わせて表せます。複数の条件は、AND(すべて満たす)またはOR(どれか1つ満たす)で組み合わせられます。
経路は、IF(条件に当てはまったとき)のほかに、ELIF(さらに別の条件を追加したとき)と**ELSE(どの条件にも当てはまらなかったとき)**があります。条件は上から順に確かめられ、最初に当てはまった経路へ進みます。どの条件にも当てはまらない入力は必ずELSEの経路へ進むため、ELSEの経路にも処理をつないでおくことを忘れないでください。設定項目の詳細は第10章10-3を参照してください。
6-2. 質問分類器(意味・意図で分ける)
質問分類器は、入力された文章があらかじめ決めた分類(クラス)のどれに当たるかをAIが判定し、分類ごとの経路に振り分けるノードです。文字の一致では書き表せない、問い合わせの意味や意図による振り分けに使います。次のような場合に使います。
- 手数料・使用料に関する問い合わせと、それ以外を分けて、料金の案内専用の経路へ回す。
- 操作方法に関する問い合わせを、操作手順を答える経路へ回す。
- 不具合に関する問い合わせを、不具合の受付・確認の経路へ回す。
- 担当部署ごとの振り分け:問い合わせの内容から担当の部署を判定し、部署ごとの案内の経路へ回す。
- 質問内容に応じたナレッジの切り替え:施設の質問は施設の手引きのナレッジ、手当の質問は手当の要綱のナレッジ、というように、経路ごとに検索するナレッジを変える。
IF/ELSEノードとの一番の違いは、言い回しが違っても振り分けられることです。「料金はいくらですか」「お金はかかりますか」「無料ですか」は、どれも同じ言葉を含みませんが、質問分類器なら同じ「料金に関する問い合わせ」の経路へ振り分けられます。
設定では、分類ごとにタイトル(画面上の表示)と説明(AIが判定の手がかりにする文章)を書きます。この説明の書き方が振り分けの正確さを決めるため、分類同士の境目があいまいなときは「〜に関するもの全般」「〜は含まない」のように範囲をはっきり書きます。また、どの分類にも当てはまらない入力の受け皿として、「その他」のような分類を1つ用意しておくと安全です。設定項目の詳細は第10章10-3を参照してください。
6-3. IF/ELSEと質問分類器の使い分け
2つのノードの違いを整理します。
| 比べる点 | IF/ELSEノード | 質問分類器 |
|---|---|---|
| 判定のしかた | 決めた条件のとおりに機械的に判定する | AIが文章の意味を読んで判定する |
| 向いている場合 | 文字の有無・値の一致・空かどうか・数値の範囲など、条件をはっきり書ける分岐 | 問い合わせの内容・意図による振り分けなど、条件を言葉の一致では書けない分岐 |
| 結果の確実さ | 同じ入力なら必ず同じ経路に進む | AIの判断のため、まれに意図と違う分類になることがある |
迷ったときは、「この分岐の条件を、誰が読んでも同じ判定になる文で書けるか」 で決めてください。書けるならIF/ELSEノード、書けない(意味を読まないと判定できない)なら質問分類器です。質問分類器を使う場合は、公開前のテスト実行で、想定する言い回しをいくつか入力して、意図した経路へ振り分けられるかを確かめてください。
6-4. 分岐の合流:変数集約器
分岐した経路それぞれで処理(LLMノードなど)を行うと、経路の数だけ結果の変数ができます。変数集約器(公式ドキュメントの表記は「変数集約器」。第3章3-1)は、これらを1つの変数にまとめるノードです。
分岐のあと、実行のたびに動くのはどれか1つの経路だけです(第3章3-4)。そのため、変数集約器にまとめた変数のうち、実行のたびに値が入っているのは1つだけで、その値がそのまま変数集約器の出力になります。まとめずに経路ごとに出力ノードを用意することもできますが、合流させると後ろの処理を1系統で済ませられます。つなぎ方は次のとおりです。
- 各経路の処理(LLMノードなど)の後ろに、変数集約器を1つ追加し、すべての経路をつなぎます。
- 変数集約器の設定欄で、各経路からまとめたい変数(各LLMノードの
textなど)を追加します。まとめる変数は同じデータ型である必要があります。 - 変数集約器の後ろに出力ノードをつなぎ、変数集約器の出力変数を、最終結果として返す変数に割り当てます。
6-5. 例:問い合わせを2種類に振り分けるワークフロー
小さな例を1本、通して組みます。職員からの問い合わせを、質問分類器で「施設の利用に関する質問」と「それ以外」に振り分け、前者は第5章で作った手引きのナレッジを根拠に答え、後者は担当窓口へ問い合わせるよう案内する、というワークフローです。
前提:ワークフローを新規作成し、ユーザー入力ノードに質問の入力欄(変数名 question・型は段落)を作ってあること(第4章4-1)。第5章5-2のナレッジ(会議室利用の手引き)を作ってあること。
手順1:質問分類器を追加して分類を定義する
- ユーザー入力ノードの後ろに質問分類器を追加します(ノードの追加操作は第5章の手順6と同じです)。
- 入力変数に、ユーザー入力ノードの変数
questionを指定します。 - 判定に使うAIモデルを選びます。
- 分類を2つ定義します。1つ目はタイトル「施設の利用に関する質問」、説明に「会議室などの施設の予約・利用時間・備品に関する質問全般」と書きます。2つ目はタイトル「それ以外」、説明に「施設の利用に関するもの以外のすべての質問」と書きます。
完了した状態:質問分類器に変数 question とAIモデルが設定され、2つの分類が定義されている。

手順2:分類ごとの経路に処理をつなぐ
- 「施設の利用に関する質問」の経路に、知識検索ノードとLLMノードをつなぎます。設定は第5章の手順7・8と同じです(検索クエリに
question、LLMノードのコンテキストに知識検索のresultを割り当て、SYSTEM欄に資料だけを根拠に答えさせる指示文を書く)。 - 「それ以外」の経路には、LLMノードを1つつなぎます。SYSTEM欄には、たとえば「あなたは庁内の問い合わせ窓口の担当です。この質問には直接答えず、質問の内容を確認したうえで、担当の窓口へ問い合わせるよう丁寧に案内してください。」のように、施設の質問とは別の指示文を書きます。
完了した状態:2つの経路それぞれに処理がつながり、経路ごとに別の指示文のLLMノードが置かれている。
手順3:変数集約器で合流させて出力する
- 2つの経路のLLMノードの後ろに変数集約器を追加し、両方の経路をつなぎます。
- 変数集約器の設定欄で、2つのLLMノードの
textを、まとめる変数として追加します。 - 変数集約器の後ろに出力ノードをつなぎ、変数集約器の出力変数を、最終結果として返す変数に割り当てます(第4章4-3)。
完了した状態:「ユーザー入力 → 質問分類器 → 各処理 → 変数集約器 → 出力」がつながっている。

手順4:テスト実行で振り分けを確かめる
テスト実行で、次の2つを確かめます。
- 施設の質問(例:「プロジェクターを借りるには?」)→ 手引きを根拠にした回答が返ること。
- それ以外の質問(例:「出張旅費の精算方法は?」)→ 担当窓口へ問い合わせるよう案内する回答が返ること。
言い回しを変えた質問(例:「会議室の機材は借りられますか」)でも試し、意図した経路へ振り分けられるかを確かめてください。
まとめ
- 条件分岐は「ユーザー入力 → 分岐 → 各処理 → 変数集約器 → 出力」の形で組む。実行のたびに動くのは1経路だけ。
- 明確な条件(文字が含まれる・値が一致する・空である・数値の範囲など)で分けるならIF/ELSEノード。どの条件にも当てはまらない入力はELSEの経路へ進む。
- 問い合わせの意味・意図で分けるなら質問分類器。言い回しが違っても振り分けられるが、AIの判断のためテスト実行での確認が必要。分類の説明の書き方が正確さを決める。
- 分かれた経路の結果は、変数集約器で1つの変数(同じデータ型)にまとめてから出力ノードへつなぐ。
次に進む
次は、第7章「ノードの配置と接続」で、ここまでの章で使ってきたノードの追加・接続・削除など、キャンバス上の操作をまとめて説明します。
出典一覧
本章の記述の根拠です(いずれも確認日:2026-09-02)。
| 内容 | 出典 |
|---|---|
| IF/ELSEノード(IF/ELIF/ELSEの経路・条件は順に確かめる・比べ方=含む/含まない/で始まる/で終わる/一致する/一致しない/空である/空でない/より大きい/より小さい/等しい/等しくない・AND/ORの組み合わせ) | https://docs.dify.ai/en/cloud/use-dify/nodes/ifelse.md |
| 質問分類器(入力変数・モデル選択・分類ごとのタイトルと説明・説明が判定の手がかりになり境目は範囲をはっきり書く・補足の指示欄) | https://docs.dify.ai/en/cloud/use-dify/nodes/question-classifier.md |
| 変数集約器(実行されるのは1経路のみ・値が入っている変数が出力になる・まとめる変数は同じデータ型・IF/ELSE/質問分類器の合流に使い後ろの処理を1系統にする・グループ機能) | https://docs.dify.ai/en/cloud/use-dify/nodes/variable-aggregator.md |
※本章の画面手順は、上記の公式ドキュメントの記述のみを根拠としています(本章の執筆にあたっての実機確認は行っていません)。比べ方の選択肢の文言・欄の名称・画面の構成は、環境・バージョンにより異なることがあります(序章「本書の確認環境」参照)。6-1・6-2の自治体業務の例、6-3の使い分けの決め方、6-5の分類の説明文と指示文の例は、公式ドキュメントの仕様ではなく本書の書き方の提案です。