> For the complete documentation index, see [llms.txt](https://docs.digitalhumans.jp/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.digitalhumans.jp/dify-guide/chatflow/dify-docs-configure-if-else-node.md).

# 条件分岐ノードの設定

条件分岐ノードは、**条件に基づいてワークフローを2つのパス（IF/ELSE）に分岐**させるためのノードです。AIによる曖昧な判断を行う「質問分類器」とは異なり、変数の値に基づいた\*\*明確なルール（条件式）\*\*によって厳密に制御を行います。

## 使用シーン

* **実行結果の判定**: 検索結果が空でなかったか、APIリクエストが成功したか。
* **入力値の検証**: ユーザーの入力内容に特定のキーワードが含まれているか。
* **フラグ制御**: 前段の処理で設定された特定の変数値に基づく処理の切り替え。

## 設定手順

1. **ノードの追加**: フローキャンバス上で「IF/ELSE」ノードを追加し、分岐させたい位置に配置します。
2. **変数の選択**: 条件判定に使用する変数（例: 前のノードの出力結果、ユーザー入力変数など）を選択します。
3. **演算子の選択**: 変数の型に応じた比較演算子（等しい、含む、空である 等）を選びます。
4. **値の入力**: 比較対象となる固定値、または別の変数を設定します。

## 利用可能な条件（演算子）

変数のデータ型に応じて、以下の演算子が利用可能です。

### テキスト型 (String)

| 演算子                         | 説明                  |
| --------------------------- | ------------------- |
| **含む (contains)**           | 指定した文字列が含まれている場合    |
| **含まない (does not contain)** | 指定した文字列が含まれていない場合   |
| **で始まる (start with)**       | 指定した文字列で始まっている場合    |
| **で終わる (end with)**         | 指定した文字列で終わっている場合    |
| **等しい (is)**                | 文字列が完全に一致する場合       |
| **等しくない (is not)**          | 文字列が一致しない場合         |
| **空である (is empty)**         | 値が空（null または空文字）の場合 |
| **空でない (is not empty)**     | 値が存在する場合            |

### 数値型 (Number)

| 演算子   | 説明    |
| ----- | ----- |
| **=** | 等しい   |
| **≠** | 等しくない |
| **>** | より大きい |
| **<** | より小さい |
| **≥** | 以上    |
| **≤** | 以下    |

## 設定例：ナレッジ検索結果による分岐

ナレッジベース（Knowledge Retrieval）からの検索結果があるかどうかで回答方法を変える設定です。

```jsx
条件: knowledge_retrieval.result (検索結果リスト) が「空でない (is not empty)」

[IFルート] (結果がある場合)
└─ LLMノード: 「以下のコンテキストに基づいて回答してください...」

[ELSEルート] (結果がない場合)
└─ 回答ノード: 「申し訳ありません、関連する情報が見つかりませんでした。」
```

## フロー構成例

```
[開始] → [ナレッジ検索] → [IF/ELSE] ─┬─ IF(結果あり) → [LLM] → [回答]
                               　　└─ ELSE → [回答(情報なし)]
```

## 複数条件の組み合わせ（AND / OR）

複数の条件を組み合わせて、より複雑なロジックを組むことができます。

* **AND条件**: 追加した**すべての条件**を満たす場合に「IF」へ進みます。

```jsx
条件1 AND 条件2 AND 条件3
```

* **OR条件**: 追加した条件の**いずれか1つ**でも満たす場合に「IF」へ進みます。

```jsx
条件1 OR 条件2 OR 条件3
```

{% hint style="info" %}
条件グループをネストさせることで、(A AND B) OR C のような複雑な構成も可能です。
{% endhint %}

## ベストプラクティス

1. **シンプルな条件設計**: 自然言語のニュアンスによる分岐が必要な場合は、IF/ELSEではなく「質問分類器」の使用を検討してください。
2. **エラーハンドリング（ELSE）**: 「ELSE」ルートは、条件に合致しなかったすべてのケースを受け取ります。予期せぬ入力やエラー時のフォールバックとして機能するように構成することを推奨します。
3. **デバッグ**: プレビュー実行機能を使い、変数が空の場合や想定外の値が入った場合に、意図したルートに進むかテストを行ってください。
