1.13.0 - Human-in-the-Loopとワークフロー実行の最新アップグレード (コミュニティ版)

:rocket: 新機能: Human-in-the-Loop (HITL) (コミュニティ版)

Source: Release 1.13.0 - Human-in-the-Loop and Workflow Execution Upgrades · langgenius/dify · GitHub

Difyワークフロー内でのAIと人間のコラボレーションを変革する主要なアップデートであるHuman Inputノードを導入します。

背景

これまで、ワークフローは完全に自動化されているか、完全に手動であるかの二者択一でした。これにより、AIの速度が必要とされる一方で人間の判断が不可欠な、リスクの高いシナリオで「信頼のギャップ」が生じていました。HITLにより、人間による監視をワークフローアーキテクチャのネイティブな部分とし、レビュー手順を実行グラフに直接埋め込むことができるようになります。

主な機能

  • ネイティブなワークフローの一時停止: 重要な決定ポイントでワークフローの実行を一時停止するために「Human Input」ノードを挿入します。
  • レビューと編集: このノードは、人間がAIの出力をレビューし、プロセスが続行される前に変数を変更(例:ドラフトの編集やデータの修正)できるUIを生成します。
  • アクションベースのルーティング: ワークフローの次のパスを決定するカスタムボタン(「承認」、「却下」、「エスカレート」など)を設定します。
  • 柔軟な配信方法: 人間入力フォームは、WebappまたはEmailを介して配信できます。クラウド環境では、Email配信の利用可能性はプラン/機能設定に依存する場合があります。

:hammer_and_wrench: アーキテクチャの更新

HITLで必要とされるステートフルな一時停止/再開メカニズムをサポートし、イベントサブスクリプションAPIを提供するために、実行エンジンをリファクタリングしました。ワークフローベースのストリーミング実行と高度なチャット実行は、Celeryワーカーで実行されるようになりました。一方、非ストリーミングのWORKFLOW実行は引き続きAPIプロセスで実行されます。
すべての一時停止/再開パス(例:HITL)はCeleryを介して再開され、イベントはRedis Pub/Subを介してストリーミングで返されます。

大規模デプロイメントおよびセルフホストユーザー向け:

workflow_based_app_executionという新しいCeleryキューを導入しました。標準的なセットアップはすぐに機能しますが、高スループット環境では、安定性とパフォーマンスを確保するために以下の最適化を検討する必要があります。

  1. ワーカーのスケール: 特定のワークロードに基づいて、workflow_based_app_executionキューを消費するワーカーの数を調整します。
  2. 専用Redis (オプション): 大規模なデプロイメントの場合、新しいPUBSUB_REDIS_URL環境変数を専用のRedisインスタンスを指すように設定することをお勧めします。水平スケーラビリティを確保するために、Sharded PubSubを備えたRedis Clusterモードの使用を強く推奨します。

:warning: 重要なアップグレードに関する注意

新しいCeleryキューが必要: workflow_based_app_execution

デプロイメント構成(Docker Compose、Helm Chartなど)に、新しい**workflow_based_app_execution**キューをリッスンするワーカーが含まれていることを確認してください。
このキューは、ワークフローベースのストリーミング実行とすべての再開フロー(例:HITL)に必要です。そうでない場合、ストリーミング実行と再開タスクは処理されません。

:wrench: 運用上の注意

追加のCeleryキュー: api_token

ENABLE_API_TOKEN_LAST_USED_UPDATE_TASK=trueの場合、デプロイメントに**api_token**をリッスンするワーカーも含まれていることを確認してください。
このキューは、APIトークンのlast_used_atタイムスタンプのスケジュールされたバッチ更新タスクによって使用されます。

:gear: 構成の変更

アーキテクチャの変更をサポートするために、いくつかの新しい環境変数を導入しました。スケーラビリティを確保するために、大規模なデプロイメントではPubSub Redisの構成に特に注意を払う必要があります

  • PUBSUB_REDIS_URL (重要): APIとCeleryワーカー間のPubSub通信に使用されるRedis URLを指定します。空の場合、標準のREDIS_*構成がデフォルトとして使用されます。
  • PUBSUB_REDIS_CHANNEL_TYPE (重要): ストリーミングイベントのチャネルタイプを定義します。オプションはpubsub(デフォルト)またはshardedです。高スループット環境ではshardedの使用を強くお勧めします。
  • PUBSUB_REDIS_USE_CLUSTERS (重要): PubSubのRedisクラスターモードを有効にするにはtrueに設定します。sharded PubSubと組み合わせることで、水平スケーリングに不可欠です。

その他の追加:

  • WEB_FORM_SUBMIT_RATE_LIMIT_MAX_ATTEMPTS: レート制限ウィンドウ内でIPごとに許可されるWebフォーム送信の最大数(デフォルト: 30)。
  • WEB_FORM_SUBMIT_RATE_LIMIT_WINDOW_SECONDS: Webフォーム送信レート制限の時間ウィンドウ(秒単位)(デフォルト: 60)。
  • HUMAN_INPUT_GLOBAL_TIMEOUT_SECONDS: グローバルタイムアウトが発生する前に、ワークフロー実行が人間からの入力を待って一時停止できる最大秒数(デフォルト: 604800、7日間)。
  • ENABLE_HUMAN_INPUT_TIMEOUT_TASK: 期限切れの人間入力リクエストをチェックするバックグラウンドタスクを有効にします(デフォルト: true)。
  • HUMAN_INPUT_TIMEOUT_TASK_INTERVAL: タイムアウトチェックタスクの間隔(分単位)を設定します(デフォルト: 1)。
  • ENABLE_API_TOKEN_LAST_USED_UPDATE_TASK: APIトークンのlast_used_atタイムスタンプをバッチ更新する定期的なバックグラウンドタスクを有効にします(デフォルト: true)。
  • API_TOKEN_LAST_USED_UPDATE_INTERVAL: APIトークンのlast_used_atタイムスタンプをバッチ更新する間隔(分単位)を設定します(デフォルト: 30)。
  • SANDBOX_EXPIRED_RECORDS_CLEAN_BATCH_MAX_INTERVAL: DBの負荷スパイクを軽減するために、保持クリーンアップバッチ間の最大ランダム遅延(ミリ秒単位)(デフォルト: 200)。

:pushpin: その他の変更ログのハイライト

信頼性と正確性

  • テナントのデフォルトモデルの重複レコードを防ぐために、移行時の重複排除と一意制約を追加しました。
  • プロバイダーIDタイプミスマッチによって引き起こされるツール削除のエッジケースを修正しました。
  • 認証済みユーザーがリモートファイルAPIで匿名として解決されるFastOpenAPI統合の回帰を修正しました。
  • ファイル関連の応答のメッセージイベントタイプ検出を修正し、マネージャー以外のユーザーに対してワークスペース招待アクションを非表示にしました。

パフォーマンスとスケーラビリティ

  • プラグインマニフェストのプリキャッシュとAppListApiクエリの最適化により、バックエンドの負荷とコンソールのレイテンシを削減しました。
  • DBセッションの分割、バッチ処理されたクリーンアップ実行、インデックスチューニング、および保持クリーンアップジョブのバッチ間スロットリングの構成により、大規模データタスクの安定性を向上させました。

APIとプラットフォーム機能

  • テナント/アプリスコープの適用を伴うエンドユーザー検索用のサービスAPIエンドポイントを追加しました。
  • 実行状態遷移中のワークフロー実行履歴の更新動作を改善しました。
  • MCP応答から使用状況メタデータ(例:トークン/コストフィールド)を抽出し、報告することでMCPツール統合を強化しました。

セキュリティ

  • ECharts解析からの動的なnew Function評価を削除し、サポートされていないチャートコードに対して明示的な解析エラーを返すようになりました。

ローカリゼーション

  • バックエンド言語マッピングとWebローカリゼーションリソース全体で、オランダ語(nl-NL)のサポートを追加しました。

アップグレードガイド

重要

カスタムCELERY_QUEUESを使用している場合は、workflow_based_app_executionが含まれていることを確認してください。
ENABLE_API_TOKEN_LAST_USED_UPDATE_TASK=trueの場合、api_tokenも含まれていることを確認してください。

背景と詳細については、上記の:warning: 重要なアップグレードに関する注意および:wrench: 運用上の注意を参照してください。

Docker Composeデプロイメント

  1. カスタマイズしたdocker-compose YAMLファイルをバックアップします(オプション)
cd docker
cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
  1. メインブランチから最新のコードを取得します
git checkout main
git pull origin main
  1. サービスを停止します。dockerディレクトリで実行してください
docker compose down
  1. データをバックアップします
tar -cvf volumes-$(date +%s).tgz volumes
  1. サービスをアップグレードします
docker compose up -d

以下のようなエラーが発生した場合2025/11/26 11:37:57 /app/internal/db/pg/pg.go:30 [error] failed to initialize database, got error failed to connect to host=db_postgres user=postgres database=dify_plugin: hostname resolving error (lookup db_postgres on 127.0.0.11:53: server misbehaving) 2025/11/26 11:37:57 /app/internal/db/pg/pg.go:34 [error] failed to initialize database, got error failed to connect to host=db_postgres user=postgres database=postgres: hostname > resolving error (lookup db_postgres on 127.0.0.11:53: server misbehaving) 2025/11/26 11:37:57 init.go:99: [PANIC]failed to init dify plugin db: failed to connect to host=db_postgres user=postgres database=postgres: hostname resolving error (lookup db_postgres on 127.0.0.11:53: server misbehaving) panic: [PANIC]failed to init dify plugin db: failed to connect to host=db_postgres user=postgres database=postgres: hostname resolving error (lookup db_postgres on 127.0.0.11:53: server misbehaving)

代わりに以下のコマンドを使用してください。詳細については、こちらの #28706 をお読みください。

docker compose --profile postgresql up -d

ソースコードのデプロイ

  1. APIサーバー、Worker、およびWebフロントエンドサーバーを停止します。
  2. リリースブランチから最新のコードを取得します。

git checkout 1.13.0

  1. Pythonの依存関係を更新します。

cd api uv sync

  1. 次に、マイグレーションスクリプトを実行します。

uv run flask db upgrade

  1. 最後に、APIサーバー、Worker、およびWebフロントエンドサーバーを再度実行します。

変更点* リファクタリング(api): trial.pyでreqparseをPydanticモデルに置き換え by @Sean-Kenneth-Doherty in #31789

  • リファクタリング: 保守性とコード整理を向上させるため、プラグイン詳細パネルコンポーネントをリファクタリング。 by @CodingOnStar in #31870
  • 修正: APIリファレンスドキュメントリンクのenプレフィックスを削除 by @hyoban in #31910
  • 修正: console_nsのインポート漏れ by @hjlarry in #31916
  • 修正: mcpサーバーのステータスが正しくない問題を修正 by @fatelei
  • テスト: テスト修正を試行、CIでテストログをクリア by @hyoban in #31912
  • 修正: mcp出力スキーマがユニオン型でフロントエンドがクラッシュする問題を修正 by @fatelei
  • 修正: 環境の自動要約 by @zxhlyh in #31930
  • リファクタリング(datasets): 包括的なテストでフックとコンポーネントを抽出 by @CodingOnStar in #31707
  • 修正: useExploreAppListでのローカライズサポートのため、appListクエリキーにロケールを含める by @CodingOnStar in #31921
  • 雑務: テストディレクトリのコードオーナーを割り当て by @laipz8200
  • リファクタリング(web): 複雑なコンポーネントを包括的なテストを備えたモジュラー構造に抽出 by @CodingOnStar in #31729
  • 修正: delete_draft_variables_batchが無限ループする問題を修正 by @fatelei
  • 雑務: docker-composeとパッケージマネージャーのバージョンを1.12.1に更新 by @QuantumGhost in #31947
  • 雑務: 基本コンポーネントのテストファイルパターンを指定するためにCODEOWNERSを更新 by @CodingOnStar in #31941
  • 機能: ドラフト同期に最新のハッシュを使用 by @fatelei
  • 修正: トリガークエリフックからstaleTime/gcTimeのオーバーライドを削除し、orpc契約を使用 by @lyzno1
  • 機能: アカウント削除のクリーンアップ by @GareArc in #31519
  • テスト: テストを修正 by @hyoban in #31975
  • 修正: db.sessionの誤用を修正 by @fatelei
  • 雑務: 探索ページでアプリリストヘッダーを固定 by @iamjoel in #31967
  • 修正(web): Serwistのプリキャッシュ404エラーを修正するための書き換えルールを追加 by @majiayu000
  • 修正: uuid_generate_v4がPostgreSQLでのみ使用される問題を修正 by @fatelei
  • 雑務: eslint-better-tailwindに移行 by @hyoban in #31969
  • 機能: 更新を確認する前にすべてのプラグインマニフェストをプリキャッシュ by @Stream29
  • パフォーマンス(api): AppListApiエンドポイントの応答時間を最適化 by @QuantumGhost
  • 雑務: 変数型記述の冗長な二重スペースを削除 (core/variables/variables.py) by @WH-2099 in #32002
  • リファクタリング: ワークフローテンプレート変換で外部インポートを削除 by @WH-2099 in #32017
  • 雑務: .codex/skillsディレクトリを削除 by @longway-code in #32022
  • 修正: エージェントノードのツールタイプが正しくない問題を修正 by @fatelei
  • 修正: flask upgrade-dbがエラー時に失敗するようにする by @longbingljw in #32024
  • 雑務: HITL自動デプロイワークフローを更新 by @QuantumGhost in #32040
  • 修正: ツールタイプが欠落している問題を修正 by @fatelei
  • パフォーマンス: 単一削除の代わりにバッチ削除メソッドを使用 by @QuantumGhost in #32036
  • 修正(api): DELETEエンドポイントで適切なHTTP 204ステータスコードを返す by @NeatGuyCoding in #32012
  • テスト: CIでテキストカバレッジのみを削除 by @hyoban in #32043
  • 雑務: deploy-hitl.yamlのデプロイブランチを更新 by @QuantumGhost in #32051
  • 修正: APIトークンのRedis by @zyssyz123 in #31861
  • 修正: バッチドキュメント削除dbセッションブロック by @JohnJyong in #32062
  • 修正: KB検索設定の予期しないスクロールバーを削除 by @crazywoola in #32082
  • リファクタリング: 不要な型を削除: async_workflow_service.py by @kongdayan in #32081
  • リファクタリング: Celeryタスクセッションをより小さく、個別の実行に分割… by @fatelei
  • 機能: mcpツールの使用状況を抽出 by @fatelei
  • 修正: モデルプロバイダーリストを検索 by @zxhlyh in #32106
  • リファクタリング: document_indexing_update_taskでデータベースセッションを分割 by @fatelei
  • テスト: 安定したテスト by @hyoban in #32108
  • リファクタリング: 知識検索ノードからデータベース操作を分離 by @fatelei
  • 機能: サービスAPI - エンドユーザー検索エンドポイントを追加 by @BeautyyuYanli in #32015
  • 修正: アプリコンテキストからユーザータイムゾーンを日付ピッカーコンポーネントに渡す. by @ZeroZ-lab in #31831
  • fix: トリガー出力スキーマの欠落を修正 by @fatelei in #32116
  • feat: ヒューマン入力ノード by @QuantumGhost in #32060
  • chore(api): launch.json.template を更新 by @QuantumGhost in #32124
  • style: バナーアイテムのスタイルを更新し、ダーク/ライトテーマの変数を強化 by @Yessenia-d in #32111
  • chore: #i18n での useTranslation の型を修正 by @hyoban in #32134
  • refactor: document_indexing_sync_task で DB セッションを分割 by @fatelei in #32129
  • fix(api): ナレッジパイプラインサービス API ルートを登録 by @tokezooo in #32097
  • fix(api): パイプラインファイルアップロードの created_at をシリアル化 by @tokezooo in #32098
  • chore: CSS 内のユーティリティを検出 by @hyoban in #32143
  • chore: CSS アイコンを導入 by @hyoban in #32004
  • refactor(api): OTel デコレータの型付けを厳格化 by @shuv-amp in #32163
  • fix(api): メンバー削除時に孤立した保留中のアカウントをクリーンアップ by @eureka928 in #32151
  • fix: ユーザーがサンドボックス以外のユーザーで有料残高がある場合、… by @zyssyz123 in #32173
  • refactor: globals.css にコンポーネント CSS をインポート by @hyoban in #32180
  • fix(api): ワークフローツールファイル出力にファイルマーカーを含める by @OiPunk in #32114
  • fix(web): スキーマからワークフローツール出力の説明を埋める by @OiPunk in #32117
  • fix: ページを閉じる際の自動保存のために sendBeacon を fetch keepalive に置き換え by @veeceey in #32088
  • test: ヒューマン入力ノード機能の包括的なテストを追加 by @WTW0313 in #32191
  • chore(api): 新しい workflow_based_app_execution を含めるように launch.json.example を更新 by @Nov1c444 in #32184
  • refactor: UpdateDSLModal および Metadata コンポーネントからサブコンポーネントとカスタムフックを抽出 by @CodingOnStar in #32045
  • fix: Dify ホームディレクトリがないことによる権限エラーを修正 by @fatelei in #32169
  • refactor: 型安全な環境、zod v4 に更新 by @hyoban in #32035
  • feat: Celery 設定の強化 by @ruanimal in #32145
  • fix(console): 既読マーク時に会話の updated_at を変更しないようにする by @OiPunk in #32133
  • chore: 他のノードに接続せずに単一ノードのドラフト実行を許可 by @hjlarry in #31977
  • chore(deps): /sdks/nodejs-client で axios を 1.13.2 から 1.13.5 にバンプ by @dependabot[bot] in #32199
  • fix: 基本ノードの状態アイコンの表示を修正 by @WTW0313 in #32208
  • chore(api): start-worker スクリプトで workflow_based_app_execution キューのタスクを消費 by @QuantumGhost in #32214
  • fix(api): RedisClientWrapper による過剰な高 CPU 使用率を修正 by @QuantumGhost in #32212
  • fix: すべてのツールが削除される問題を修正 by @fatelei in #32207
  • fix: 重複を防ぐために tenant_default_models に一意制約を追加… by @qiaofenlin in #31221
  • feat: nl-NL 言語をサポート by @fatelei in #32216
  • fix: get_message_event_type が誤ったメッセージタイプを返す問題を修正 by @fatelei in #32019
  • docs(api): 設計上、SetupApi を非認証としてマーク by @41tair in #32224
  • feat(workflow): ワークフロー実行履歴管理と UI 更新を強化 by @WTW0313 in #32230
  • chore(deps): /api で cryptography を 46.0.3 から 46.0.5 にバンプ by @dependabot[bot] in #32218
  • chore(deps): /api で google-api-python-client を 2.90.0 から 2.189.0 にバンプ by @dependabot[bot] in #32102
  • feat(tests): パイプライン実行テストで useInvalidateWorkflowRunHistory のモックを追加 by @WTW0313 in #32234
  • fix: fastopenapi の使用がユーザーを匿名にする問題を修正 by @fatelei in #32236
  • fix: メッセージクリーンアップのパフォーマンスを最適化するためにインデックスを更新 by @hj24 in #32238
  • fix: 現在のユーザーがワークスペースマネージャーでない場合、招待ボタンを非表示にする by @douxc in #31744
  • chore: バージョンを 1.13.0 にバンプ by @QuantumGhost in #32147

新しい貢献者

完全な変更履歴: 1.12.1…1.13.0

こんにちは。これはもうクラウドにリリースされましたか?どこにも見当たらないのですが。

提出方法のWebアプリが利用できない原因は何ですか?