メインコンテンツへスキップ

Documentation Index

Fetch the complete documentation index at: https://dify-6c0370d8-docs-hitl-2.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

⚠️ このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、英語版 を参照してください。
人間の入力ノードは、ワークフローを重要なポイントで一時停止し、カスタマイズ可能なリクエストフォームを配信します。受信者はフォームを使って情報を確認し、入力を提供し、ワークフローの進行方法を決定する事前定義された選択肢から選ぶことができます。 重要な場面に人間の判断を直接組み込むことで、 自動化による効率と人間による監視のバランス をとることができます。
ワークフロー設計の完全な例については、例:コンテンツレビューワークフロー を参照してください。

設定

ノードがどのように人間の入力を要求し処理するかを定義するために、以下を設定します。
  • 配信方法:リクエストフォームがどのように受信者に届くか。
  • フォーム内容: 受信者に表示される情報と、操作できる内容。
  • ユーザーアクション:受信者が行える決定と、それに応じたワークフローの進行方法。
  • タイムアウト戦略:待機時間と、受信者が応答しなかった場合の処理。

配信方法

リクエストを配信するチャネルを選択します。現在利用可能な方法は次のとおりです。
  • Webapp :WebApp のエンドユーザーにリクエストフォームを表示します。トリガーで開始されたワークフローでは利用できません。
    外部クライアントは Service API 経由で WebApp フォームのライフサイクルを駆動できます。詳細は API 連携フロー を参照してください。
  • メール :特定のワークスペースメンバー、外部のメールアドレス、またはワークスペース全員にリクエストリンクをメールで送信します。リンクを持っている人は誰でも応答でき、Dify アカウントは不要です。
配信方法に関わらず、最初の応答があった時点でリクエストはクローズされます。

フォーム内容

受信者が見て操作するフォームをカスタマイズします:
  • Markdown によるフォーマットと構造化 見出し、リスト、太字、リンクなどの Markdown 要素を使用して、情報を明確に提示します。
  • 変数による動的データの表示 ワークフロー変数を参照して、レビュー用の AI 生成テキストや上流ノードの必要なコンテキスト情報などの動的コンテンツを表示します。 WebApp 配信方法では、フォーム自体がエンドユーザーに直接表示されます。参照した変数はフォーム内にそのまま値として描画されるため、 人間の入力ノードの前に回答や出力ノードを追加する必要はありません
    推論モデルは最終回答とともに思考プロセスも出力します。text 出力変数を参照するとデフォルトで両方が表示されます。回答のみを表示するには、対応する LLM ノードで 推論タグの分離を有効にする をオンにします。
  • フォームフィールドによる入力の収集 リクエストフォームにフィールドを追加して、受信者からのさまざまなタイプの入力を取得します。各フィールドは下流で使用できる変数になります。 たとえば、ブログレビューワークフローでは、受信者のフィードバックを下流の LLM ノードに渡してコンテンツの修正に使用できます。
    フィールドタイプ説明
    段落テキスト入力。空のまま開始することも、変数(例:修正対象の LLM 出力)や静的テキスト(例やデフォルト値)で事前入力することもできます。

    最大長の制限はありませんが、非常に長い入力は下流の LLM のコンテキストウィンドウを超える可能性があります。
    選択選択肢のリストから 1 つを選びます。選択肢を手動で定義するか、array[string] 変数を参照してその項目を選択肢として使用します。
    単一ファイル / ファイルリスト単一または複数のファイルアップロード。
    セルフホスト環境では、ファイルアップロードの上限を環境変数で調整できます。UPLOAD_FILE_SIZE_LIMITUPLOAD_IMAGE_FILE_SIZE_LIMITUPLOAD_VIDEO_FILE_SIZE_LIMITUPLOAD_AUDIO_FILE_SIZE_LIMIT は拡張子ごとの 1 ファイルのサイズ上限を設定します。WORKFLOW_FILE_UPLOAD_LIMIT はファイルリストフィールドで受け付けられる最大ファイル数の上限を設定します。デフォルト値については 環境変数 を参照してください。
    段落のみ任意で、選択、単一ファイル、ファイルリストは必須です。すべての必須フィールドが入力されるまで、フォームのアクションボタンは無効のままになります。
受信者が応答すると、すべての値が入力されたフォーム内容は下流変数 __rendered_content として利用できます。ファイル系フィールドの値はプレーンテキストのプレースホルダーとして表示されます。単一ファイルは [file]、ファイルリストは [N files] です。

ユーザーアクション

受信者がクリックできる決定ボタンを定義します。各ボタンはワークフローを異なる実行パスにルーティングします。 たとえば、Post ブランチはコンテンツの公開をトリガーするノードにつながり、Regenerate ブランチはコンテンツを修正するために LLM ノードへループバックします。 各ボタンには表示タイトルとアクション ID があります。ボタンがクリックされると、その ID が __action_id、タイトル(ボタンテキスト)が __action_value として下流に公開されます。
アクションボタンの設定
各ボタンには表示タイトルとアクション ID があります。ボタンがクリックされると、その ID は下流変数 __action_id、タイトル(ボタンテキスト)は __action_value として利用できます。
アクションボタン設定
プリセットのボタンスタイルを使用して、アクションを視覚的に区別します。たとえば、Approve のような重要なアクションには目立つスタイルを、二次的なオプションには控えめなスタイルを使用します。

タイムアウト戦略

リクエストが期限切れになるまでの時間を設定します。デフォルトは 3 日です。 タイムアウトまでに受信者が応答しなかった場合、ワークフローはノードのタイムアウトブランチに進みます。このブランチをフォールバックパス(通知の送信やリトライループなど)に接続してください。 タイムアウトブランチが接続されていない場合、ワークフローは終了します。

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

ワークフローの例
メールで配信されるリクエストフォーム
このワークフローでは、ワークフローの起動者が入力した topiclanguage からブログ記事の草稿を作成します。その草稿をメールでレビュアーに送信し、レビュアーの選択に応じて最終出力を確定します。 このノードでレビュアーが行えるようにすべき次の 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 Editedits フィールドでレビュアーが編集した内容
  • Regenerate:下流の LLM パイプラインからの修正草稿
System
Write a marketing blog post around the given topic in the specified language.
User
Topic: {{#user_input.topic#}}
Language: {{#user_input.language#}}