> ## Documentation index
> Fetch the complete documentation index at: https://dify-docs.docs7.io/llms.txt
> Ask it with GET https://dify-docs.docs7.io/ask?q=<keywords or question>. Short keywords rank best.
> Use these to discover all available pages before exploring further.

# レッスン 5：ワークフローの分岐点（分類と実行）

> このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/learn/tutorials/workflow-101/lesson-05) を参照してください。

現在、メールアシスタントはすべてのメールを同じワークフローで処理しています。これでは十分にスマートとは言えません。Dify の価格に関するメールと、バグ報告に関するメールでは、異なる対応が必要です。

アシスタントを本当にインテリジェントにするには、*状況を判断する能力*を教える必要があります。ここでは、メールの種類に応じて異なるトラックに振り分ける分岐点を設定します。

## If/Else ノード

<Frame>
  ![If/Else ノード](/images/use-dify/tutorial/workflow-101-lesson-05/if-else-node.png)
</Frame>

If/Else ノードは信号機のようなものです。条件をチェックし（例：このメールには価格に関する内容が含まれているか？）、その結果に応じてフローを左右に振り分けます。

### ハンズオン 1：分岐点を設定する

メールアシスタントをアップグレードして、Dify に関連するメールとそれ以外のメールを区別できるようにしましょう。

<Steps>
  <Step title="ノードを挿入する">
    開始ノードとナレッジ検索ノードの間の接続線にカーソルを合わせます。**プラス（+）** アイコンをクリックし、**If/Else** ノードを選択します。
  </Step>
  <Step title="ルールを設定する">
    1. ノードをクリックしてパネルを開きます。
    2. IF セクションの **\+ Add Condition** をクリックし、変数 `{x} email_content` を選択します。

    <Frame>
      ![条件を追加](/images/use-dify/tutorial/workflow-101-lesson-05/settings-01.png)
    </Frame>
    3. 判断ロジック：**Contains** のまま維持し、入力ボックスに **Dify** と入力します。

    <Frame>
      ![Contains 条件](/images/use-dify/tutorial/workflow-101-lesson-05/settings-02.png)
    </Frame>
    これで、IF 分岐の完全なロジックは次のようになります：`メール内容に Dify という単語が含まれている場合`。
  </Step>
</Steps>

<Info>
  **分岐点の判断ロジックを理解する**

  条件を設定する際、Dify では交差点の信号のように、情報を判断するためのさまざまな方法が用意されています。

  - **Is / Is Not**

    鍵と錠前の関係のようなものです。内容が設定した値と完全に一致する必要があります。
  - **Contains / Not Contains**

    虫眼鏡のようなものです。特定のキーワードがテキスト内のどこかに存在するかをチェックします。今回使用するのはこの方法です。
  - **Starts with / Ends with**

    テキストが特定の文字で始まるか、または終わるかをチェックします。
  - **Is Empty / Is Not Empty**

    変数に内容があるかどうかをチェックします。例：ユーザーが実際に添付ファイルをアップロードしたかどうかの確認。これらを理解することで、正確かつ柔軟なルールを設定し、よりスマートなワークフローを構築できます。
</Info>

### ハンズオン 2：異なるパスを設計する

分岐点ができたので、それぞれの道で何が起こるかを決める必要があります。

#### A. Dify 関連メールのトラック（IF 分岐）

IF 分岐の右側にある **プラス（+）** アイコンをクリックし、線をドラッグして **ナレッジ検索** ノードに接続します。

これは次のことを意味します：メールに Dify という単語が含まれている場合、前回のレッスンで構築した専門的な返信プロセス（ナレッジベースで情報を検索するプロセス）が実行されます。

<Frame>
  ![IF 分岐を接続](/images/use-dify/tutorial/workflow-101-lesson-05/connect-if-branch.png)
</Frame>

#### B. 無関係なメールのトラック（ELSE 分岐）

Dify に関連しないメールに対しては、シンプルで丁寧な汎用返信プロセスを作成します。

<Steps>
  <Step title="新しいノードを作成する">
    ELSE の横にある **（+）** をクリックし、新しい **LLM ノード（LLM 2）** を選択します。
  </Step>
  <Step title="この LLM ノードにプロンプトを追加する">
    以下のプロンプトをコピーして貼り付けます。

    ```plaintext wrap
    You are a professional customer service manager. Based on the customer's email, kindly inform the user that no relevant information was found and provide relevant guidance.

    Requirements:
    1. Address the customer name in a friendly tone.
    2. Thank them for their letter.
    3. Keep the tone professional and friendly.
    4. Sign off as "Anne."
    ```
  </Step>
  <Step title="ユーザーメッセージを追加する">
    1. システムの下にある **Add Message** ボタンをクリックします。
    2. ユーザーメッセージボックスに **customer name**：と入力します。
    3. キーボードで `/` を押します。
    4. 変数選択メニューが表示されるので、`customer_name` をクリックします。
    5. Enter キーを押して新しい行を開始し、**email content**：と入力します。
    6. もう一度 / キーを押して `email_content` をクリックします。

    <Frame>
      ![LLM 2 のプロンプト](/images/use-dify/tutorial/workflow-101-lesson-05/final-prompt-for-llm-02.png)
    </Frame>
  </Step>
</Steps>

これで、2 つのトラックがそれぞれ異なる返信を生成するようになりました。もし 10 個のトラックがあったら、ワークフローはスパゲッティのように複雑になってしまいます。

整理された状態を保つために、変数アグリゲーターを使用します。これは、すべての異なる道が 1 つの幹線道路に合流する交通ハブのようなものです。

## 変数アグリゲーター

<Frame>
  ![変数アグリゲーター](/images/use-dify/tutorial/workflow-101-lesson-05/variable-aggregator.png)
</Frame>

変数アグリゲーターは、すべての異なる道が 1 つの幹線道路に合流する交通ハブのようなものです。

### ハンズオン 3：変数アグリゲーターを追加する

<Steps>
  <Step title="アグリゲーターを追加する">
    1. 終了ノードと LLM ノードの間の接続線を選択して削除します。
    2. 「キャンバス」上で右クリックし、**Add Node** を選択して、**変数アグリゲーター**ノードを選びます。

    <Frame>
      ![変数アグリゲーターを追加](/images/use-dify/tutorial/workflow-101-lesson-05/add-variable-aggregator.png)
    </Frame>
  </Step>
  <Step title="パスを合流させる">
    LLM ノードと LLM 2 ノードを変数アグリゲーターに接続します。
  </Step>
  <Step title="出力を割り当てる">
    1. 変数アグリゲーターノードをクリックします。
    2. **Assign Variables** の横にある **プラス（+）**アイコンをクリックします。
    3. LLM 1 の **text** と LLM 2 の **text** を選択します。

    <Frame>
      ![変数の割り当て](/images/use-dify/tutorial/workflow-101-lesson-05/assign-variable.png)
    </Frame>
    これにより、どちらの LLM ノードが応答を生成しても、変数アグリゲーターノードが内容を集約し、出力ノードに渡します。
  </Step>
  <Step title="最後のステップ">
    1. 変数アグリゲーターを出力ノードに接続します。
    2. 出力変数を、以前の LLM の結果ではなく、変数アグリゲーターの結果に更新します。

    <Frame>
      ![出力変数を更新](/images/use-dify/tutorial/workflow-101-lesson-05/update-output-variable.png)
    </Frame>
    ワークフローは以下のようになります：

    <Frame>
      ![最終ワークフロー](/images/use-dify/tutorial/workflow-101-lesson-05/final-workflow.png)
    </Frame>
  </Step>
  <Step title="テストと実行">
    **Test Run** をクリックし、顧客名を入力して、キーワード Dify を含む入力と含まない入力の両方でテストし、異なる結果を確認してください。
  </Step>
</Steps>

## ミニチャレンジ

ビジネスに関する問い合わせメールに対して、適切な返信を生成するにはワークフローをどのように編集すればよいでしょうか？

<Tip>
  ナレッジベースにビジネス関連のファイルを追加することを忘れないでください。
</Tip>
