> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dify.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 人間の入力

> ワークフローを一時停止して人間の入力を要求します

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

人間の入力ノードは、ワークフローを重要なポイントで一時停止し、カスタマイズ可能なリクエストフォームを配信します。受信者はフォームを使って情報を確認し、入力を提供し、ワークフローの進行方法を決定する事前定義された選択肢から選ぶことができます。

重要な場面に人間の判断を直接組み込むことで、 **自動化による効率と人間による監視のバランス** をとることができます。

<Tip>
  ワークフロー設計の完全な例については、[例：コンテンツレビューワークフロー](#例：コンテンツレビューワークフロー) を参照してください。
</Tip>

## 設定

ノードがどのように人間の入力を要求し処理するかを定義するために、以下を設定します。

* **配信方法**：リクエストフォームがどのように受信者に届くか。

* **フォーム内容**： 受信者に表示される情報と、操作できる内容。

* **ユーザーアクション**：受信者が行える決定と、それに応じたワークフローの進行方法。

* **タイムアウト戦略**：待機時間と、受信者が応答しなかった場合の処理。

### 配信方法

リクエストを配信するチャネルを選択します。現在利用可能な方法は次のとおりです。

* **Web app** ：WebApp のエンドユーザーにリクエストフォームを表示します。トリガーで開始されたワークフローでは利用できません。

  <Info>
    外部クライアントは Service API 経由で WebApp フォームのライフサイクルを駆動できます。詳細は [API 連携フロー](/ja/cloud/use-dify/nodes/hitl-api-integration-flow) を参照してください。
  </Info>

* **メール** ：特定のワークスペースメンバー、外部のメールアドレス、またはワークスペース全員にリクエストリンクをメールで送信します。リンクを持っている人は誰でも応答でき、Dify アカウントは不要です。

<Note>
  配信方法に関わらず、最初の応答があった時点でリクエストはクローズされます。
</Note>

### フォーム内容

受信者が見て操作するフォームをカスタマイズします：

* **Markdown によるフォーマットと構造化**

  見出し、リスト、太字、リンクなどの Markdown 要素を使用して、情報を明確に提示します。

* **変数による動的データの表示**

  ワークフロー変数を参照して、レビュー用の AI 生成テキストや、誰かが上流の人間の入力ノードでアップロードした承認用のファイルなどの動的コンテンツを表示します。

  WebApp 配信方法では、フォーム自体がエンドユーザーに直接表示されます。参照した変数はフォーム内にそのまま値として描画されるため、 **人間の入力ノードの前に回答や出力ノードを追加する必要はありません**。

  <Tip>
    推論モデルは最終回答とともに思考プロセスも出力します。`text` 出力変数を参照するとデフォルトで両方が表示されます。

    回答のみを表示するには、対応する LLM ノードで **推論タグの分離を有効にする** をオンにします。
  </Tip>

* **フォームフィールドによる入力の収集**

  リクエストフォームにフィールドを追加して、受信者からのさまざまなタイプの入力を取得します。各フィールドは下流で使用できる変数になります。

  たとえば、ブログレビューワークフローでは、受信者のフィードバックを下流の LLM ノードに渡してコンテンツの修正に使用できます。

  | フィールドタイプ         | 説明                                                                                                                                       |
  | :--------------- | :--------------------------------------------------------------------------------------------------------------------------------------- |
  | 段落               | テキスト入力。空のまま開始することも、変数（例：修正対象の LLM 出力）や静的テキスト（例やデフォルト値）で事前入力することもできます。<br /><br />最大長の制限はありませんが、非常に長い入力は下流の LLM のコンテキストウィンドウを超える可能性があります。 |
  | 選択               | 選択肢のリストから 1 つを選びます。選択肢を手動で定義するか、`array[string]` 変数を参照してその項目を選択肢として使用します。                                                                 |
  | 単一ファイル / ファイルリスト | 単一または複数のファイルアップロード。<br /><br />1 ファイルあたりのアップロード上限：画像 10 MB、ドキュメントおよびその他のファイル 15 MB、音声 50 MB、動画 100 MB。ファイルリストフィールドは最大 10 ファイルまで受け付けられます。 |

  <Note>段落のみ任意で、選択、単一ファイル、ファイルリストは必須です。すべての必須フィールドが入力されるまで、フォームのアクションボタンは無効のままになります。</Note>

受信者が応答すると、すべての値が入力されたフォーム内容は下流変数 `__rendered_content` として利用できます。ファイル系フィールドの値はプレーンテキストのプレースホルダーとして表示されます。単一ファイルは `[file]`、ファイルリストは `[N files]` です。

### ユーザーアクション

受信者がクリックできる決定ボタンを定義します。各ボタンはワークフローを異なる実行パスにルーティングします。

たとえば、`Post` ブランチはコンテンツの公開をトリガーするノードにつながり、`Regenerate` ブランチはコンテンツを修正するために LLM ノードへループバックします。

各ボタンには表示タイトルとアクション ID があります。ボタンがクリックされると、その ID が `__action_id`、タイトル（ボタンテキスト）が `__action_value` として下流に公開されます。

<Frame>
  <img src="https://mintcdn.com/dify-6c0370d8/lwIzCowco7hnsTRZ/images/use-dify/workflow/human-input-action-button-config.png?fit=max&auto=format&n=lwIzCowco7hnsTRZ&q=85&s=59333898aec4d46bab326b83fe93b589" alt="アクションボタンの設定" width="1088" height="192" data-path="images/use-dify/workflow/human-input-action-button-config.png" />
</Frame>

<Tip>
  プリセットのボタンスタイルを使用して、アクションを視覚的に区別します。

  たとえば、`Approve` のような重要なアクションには目立つスタイルを、二次的なオプションには控えめなスタイルを使用します。
</Tip>

### タイムアウト戦略

リクエストが期限切れになるまでの時間を設定します。デフォルトは 3 日です。

タイムアウトまでに受信者が応答しなかった場合、ワークフローはノードのタイムアウトブランチに進みます。このブランチをフォールバックパス（通知の送信やリトライループなど）に接続してください。

タイムアウトブランチが接続されていない場合、ワークフローは終了します。

## 例：コンテンツレビューワークフロー

<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
  <Frame caption="ワークフローの例">
    <img src="https://mintcdn.com/dify-6c0370d8/kGlB52nIHTqxEdjP/images/use-dify/workflow/human-input-workflow-example.png?fit=max&auto=format&n=kGlB52nIHTqxEdjP&q=85&s=48cd296671394258ae626a59a68d229a" alt="ワークフローの例" width="3102" height="1388" data-path="images/use-dify/workflow/human-input-workflow-example.png" />
  </Frame>

  <Frame caption="メールで配信されるリクエストフォーム">
    <img src="https://mintcdn.com/dify-6c0370d8/kGlB52nIHTqxEdjP/images/use-dify/workflow/human-input-request-form-example.png?fit=max&auto=format&n=kGlB52nIHTqxEdjP&q=85&s=6affcae54d33092e8a930078bf24559f" alt="メールで配信されるリクエストフォーム" width="923" height="1704" data-path="images/use-dify/workflow/human-input-request-form-example.png" />
  </Frame>
</div>

このワークフローでは、ワークフローの起動者が入力した `topic` と `language` からブログ記事の草稿を作成します。その草稿をメールでレビュアーに送信し、レビュアーの選択に応じて最終出力を確定します。

このノードでレビュアーが行えるようにすべき次の 3 つを軸に設計されています。

1. **AI が生成した草稿を確認する**：フォームで上流の LLM ノードの `text` 変数を参照し、レンダリングされたフォームに草稿の本文をそのまま表示させます。

2. **必要に応じて草稿を直接編集する**：フォームに `edits` という段落フィールドを追加し、同じ `text` 変数で事前入力します。これによりレビュアーは草稿を出発点として、その場で編集できます。

   ブログ記事は通常長いため、フォームの Markdown 表示（第 1 点）の方が、単独の段落フィールドよりも読みやすくなります。コンテンツが短い場合は、事前入力した段落フィールド 1 つで閲覧と編集の両方を兼ねられます。

3. **AI による修正のためにフィードバックを提供する**：

   1. レビュアーのフィードバックを集めるため、フォームに `feedback` という段落フィールドを追加します。
   2. 下流の LLM ノードを 2 つ順に接続します。
      1. Regenerate ノード：元の草稿 `text` とレビュアーの `feedback` を受け取って修正された草稿を生成します。
      2. Check Revision ノード：`feedback` と修正された草稿を受け取り、修正がフィードバックに沿っているかを確認します。検証された結果が最終出力として下流に流れます。

レビュアーは受け取ったリクエストフォームで、判断に基づいて該当する段落フィールドを入力（または空のまま）し、対応するアクションボタンをクリックします。各アクションは異なる出力に接続されます。

* **Approve**：上流の LLM からの元の草稿
* **Apply Edit**：`edits` フィールドでレビュアーが編集した内容
* **Regenerate**：下流の LLM パイプラインからの修正草稿

<Accordion title="LLM ノードのプロンプト（参考）">
  <Tabs>
    <Tab title="Generate Draft">
      **System**

      ```text wrap theme={null}
      Write a marketing blog post around the given topic in the specified language.
      ```

      **User**

      ```text theme={null}
      Topic: {{#user_input.topic#}}
      Language: {{#user_input.language#}}
      ```
    </Tab>

    <Tab title="Regenerate">
      **System**

      ```text wrap theme={null}
      Regenerate the draft based on user feedback.
      ```

      **User**

      ```text theme={null}
      Draft: {{#generate_draft.text#}}
      User Feedback: {{#human_input.feedback#}}
      ```
    </Tab>

    <Tab title="Check Revision">
      **System**

      ```text wrap theme={null}
      Check whether the draft below addresses the user's feedback. Return the draft unchanged if it does; revise it to address the feedback if it doesn't.
      ```

      **User**

      ```text theme={null}
      User Feedback: {{#human_input.feedback#}}
      Regenerated Draft: {{#regenerate.text#}}
      ```
    </Tab>
  </Tabs>
</Accordion>
