「コード実行」ノードで input_file, rules_file, stock_file を個別に紐付けできず、userinput.files と関連がある疑いがあります。

「コード実行」ノードで input_file, rules_file, stock_file を個別に紐付けることができず、userinput.files に関連していると疑われます。変数またはレガシーフィールドを正しくマッピングするための公式な方法を提供してください。

@Dify_Forum_Helper 簡単に、もう少し詳しい情報を確認しておいてください。後で技術サポートに送ります。

こちらで、技術サポートが後ほどトラブルシューティングを行うのに役立つよう、いくつか重要な情報を彼らに追加で確認させていただきます。


@tiantian0920 さん、いくつか確認したいことがありますので、お時間のある時に補足をお願いします。

  1. 現在使用している Dify のバージョン番号は何ですか?

    • もし自己構築の Docker であれば、docker-compose.yml 内の langgenius/dify のタグを確認してください。
    • または、「設定 → バージョン情報」でバージョン番号のスクリーンショットを確認してください。
  2. 入力フィールドの設定は具体的にどのようになっていますか?
    スクリーンショットから判断すると、開始ノードには3つのファイル入力があります。

    • input_file_(末尾に _ があるか、ないか、注意してください。)
    • rules_file
    • stock_file
      コード実行ノードの右側にある「入力変数」にも、同名の3つの変数が作成されています。確認したいのは:
    • これら3つの変数のタイプはすべて File に設定されていますか?
    • コード内では、variables["input_file"] / variables["rules_file"] / variables["stock_file"] のような方法で読み込まれていますか?主要なコードの一部を貼り付けていただけますか(匿名化で構いません)。
  3. 現在具体的に発生している問題の症状は次のとおりです:

    • コード実行ノードの「入力変数」で、ドロップダウンリストから input_file_ / rules_file / stock_fileそれぞれ選択できますか
    • それとも、3つの変数すべてが同じ userinput.files(LEGACY)にしかマッピングできませんか?
    • 実行時に実際に取得されるのは:
      • すべて空ですか?
      • それとも、3つの変数が実際には同じファイルを受け取っていますか?
        コード実行ノードの「入力変数マッピング」設定(右側の部分)のスクリーンショットと、実行ログ内の変数の実際の値のスクリーンショットを貼り付けていただけますか。
  4. 旧バージョンからコピー/インポートされたワークフローですか?
    ここに userinput.files (LEGACY) が表示されているため:

    • このフィールドは通常、旧バージョンの「ユーザーアップロードファイルコレクション」のレガシーフィールドです。
    • 確認したいのは:このワークフローは新規作成されたものですか、それともかなり以前のワークフローからコピー/インポートされたものですか?
    • もし古いワークフローからコピーされたものであれば、開始ノードに、隠されているか、削除されたが完全にクリーンアップされていない古いファイルフィールドがまだ残っていますか?
  5. 期待する動作はどのようなものですか?
    次のようにしたいですか:

    • ユーザーが一度に3つの異なる用途のファイル(入力ファイル / ルール表 / 在庫表)をアップロードし、
    • その後、コード内でそれぞれ取得できるようにしたいですか:
      input_file  # ユーザー入力ファイル
      rules_file  # ルール表
      stock_file  # 在庫表
      

    これで合っていますか?それとも、最終的にそれらを1つの配列に結合して処理したいですか?


こちらでも、これらの疑問点を技術サポートに整理して伝えます:

  • 現在のUIには、個別のファイル変数(input_file / rules_file / stock_file)と userinput.files (LEGACY) が同時に存在しますが、確認が必要です:
    • 現在の正しいマッピング方法userinput.files を完全に使わず、コード実行ノードを各ファイルフィールドに1:1で直接バインドすることが推奨されますか?
    • userinput.files が既に存在する古いワークフローの場合、公式に推奨される移行/クリーンアップ方法は何ですか(例:開始ノードフィールドを再作成し、コードノードを再バインドする、またはシステムレベルの移行ロジックがあるか)?
    • LEGACY フィールドが新しいフィールドの自動マッピングや実行結果に干渉する可能性はありますか?

上記の情報とスクリーンショットを補足していただければ、技術サポートに転送し、「正しい変数マッピング方法」と「userinput.files (LEGACY) の処理/移行方法」に関する公式なアドバイスを提供してもらいやすくなります。

1、バージョン番号V4.57.0

2、コードではこのようになっています

現在確認できる情報と提案を整理しましたので、技術サポートとの連携にご活用ください:


1. バージョンとコード状況の整理

  • 現在のバージョン:v4.57.0
  • コードでは関数シグネチャの形式です:
def calculate_blank(input_file, rules_file, stock_file):
    df_input = pd.read_excel(input_file)
    df_rules = pd.read_excel(rules_file)
    df_stock = pd.read_excel(stock_file)

これは、あなたの期待が「コード実行」ノードで、3つの個別のファイル変数を直接取得することであることを示しています。


2. 現在のDifyの「推奨されるアプローチ」(バージョンとUIの変更を考慮して)

バージョン4.x以降では、ファイル入力は初期の統一された userinput.files から、「各入力フィールドに独立したFile変数」へと進化しました:

  • 開始ノード:

    • input_file_(スクリーンショットには末尾に _ があるようです)
    • rules_file
    • stock_file
  • コード実行ノードの右側にある「入力変数」パネルでは、次のように設定する必要があります(重要なのは、userinput.files を使用するのではなく、1:1で手動バインドすることです):

    • 3つの入力変数を新規作成し、タイプをすべて File に設定します:
      • input_file → 「開始ノード / input_file_」にマッピング
      • rules_file → 「開始ノード / rules_file」にマッピング
      • stock_file → 「開始ノード / stock_file」にマッピング

    そうすれば、あなたのコードは、あなたが貼り付けたような関数シグネチャを直接使用できます。

userinput.files (LEGACY) は通常、古いバージョンでの統一されたファイルコレクションの互換性フィールドであり、新しい設計では、特に複数のビジネス意味合いのファイルを区別する必要があるようなシナリオでは、もはや推奨されません。


3. 今すぐ重点的に自己チェックすべき項目

  1. 変数名が完全に一致しているか

    • 開始ノードのフィールド名は input_file_ で、あなたの関数では input_file です:
      • 右側のコードノードの入力変数が input_file で、それが実際にマッピングされている開始ノードのフィールドが input_file_ であっても、これは許容されます(名前が完全に同じである必要はありません)。
      • ただし、確認してください:右側の「入力変数 → input_file」で、ドロップダウンで選択されているのが 開始·input_file_ であり、userinput.files (LEGACY) が選択されていないこと
  2. 各変数が具体的なフィールドに手動でバインドされているか

    • コード実行ノードの右側で:
      • input_file の行のソースは必ず:ユーザー入力 · input_file_ を選択してください
      • rules_file → 選択:ユーザー入力 · rules_file
      • stock_file → 選択:ユーザー入力 · stock_file
    • ドロップダウンに userinput.files (LEGACY) がまだ表示されている場合は、選択せず、どの変数もそれに向けないでください
  3. 実行時の変数値のタイプを確認する
    コードの冒頭で一度プリントして、ファイルオブジェクトが取得されていることを確認してください(Noneや文字列ではないこと):

    import pandas as pd
    
    def calculate_blank(input_file, rules_file, stock_file):
        print("DEBUG input_file =", input_file)
        print("DEBUG rules_file =", rules_file)
        print("DEBUG stock_file =", stock_file)
    
        df_input = pd.read_excel(input_file)
        df_rules = pd.read_excel(rules_file)
        df_stock = pd.read_excel(stock_file)
        ...
    

    その後、「前回の実行」で3つの変数の値を確認し、それぞれがアップロードした3つのExcelに対応しているかを確認してください。


4. userinput.files (LEGACY) の処理に関する提案

現在確認できる情報に基づき、以下の「保守的なアプローチ」で処理を進めることができます:

  1. 開始ノードフィールドの新規作成 / 再構築(このワークフローが古いバージョンからコピーまたはインポートされたものである場合):

    • 開始ノードの3つの入力フィールドが、古いバージョンの結合フィールドではなく、新しい「ファイル」タイプ(File)であることを確認してください。
    • もし最初から古いフローからコピーした場合は、以下を検討してください:
      • 3つの新しいFileフィールド(例:input_file_new など)を追加し、
      • コードノードで再マッピングを行い、問題がないことを確認した後、古いフィールドと userinput.files (LEGACY) を削除します
  2. ワークフロー全体で userinput.files を使用しない

    • どのノードでもそれを参照しない;
    • ファイル配布のためにそれに依存しない;
    • 実際にすべて個別のFileフィールドから読み取る。

今後、公式から「LEGACYフィールドのクリーンアップ/移行方法」に関するより明確な説明があれば、公式の手順に従って最終的な整理を行うことができます。しかし、それまでは、「使用しない + すべて明示的なフィールドを使用する」のが通常最も安全なアプローチです。


5. 技術サポートが正確に判断できるよう、さらにスクリーンショットをいくつか追加することをお勧めします

関数コードはすでに提供されており、非常に役立ちます。さらに2枚追加すると、問題の特定がより容易になります:

  1. コード実行ノードの右側にある「入力変数」の完全なスクリーンショット

    • input_file / rules_file / stock_file の3行がそれぞれどのソースフィールドにマッピングされているかを確認できるようにしてください。
  2. 「前回の実行」→ そのノードの入力データ表示のスクリーンショット

    • これら3つの変数の実行時の実際の値(空であるか / 同じファイルになっているか)を示してください。

私はあなたが追加したこれら2枚に基づいて、「現在の挙動」と「期待される挙動」の違いを要点としてまとめ、技術サポートに転送し、以下の点を重点的に説明します:

  • v4.57.0 での新旧フィールド混用時の挙動;
  • バグの有無(例えば、マッピングUIでは選択できるが、実行時にはすべて同じファイルを指すか、または空になるなど);
  • userinput.files (LEGACY) を完全に非表示にするか、ワンクリックで移行できるか。

もしよろしければ、このワークフローは新規作成されたものか、それとも古いバージョンからコピー/インポートされたものか? も併せて説明してください。この情報も公式の調査方向を左右します。

3、コード実行ノードの「入力変数」では、input_file_ / rules_file / stock_fileドロップダウンリストから個別に選択することはできません。代わりに、

screenshot(2)のようにクリックして選択するしかありません。

4、技術者にリモートインストールしてもらったもので、古いバージョンからコピー/インポートしたワークフローではなく、新規作成したものです

5、ユーザーに一度に3つの異なる用途のファイル(入力ファイル / ルール表 / 在庫表)をアップロードしてもらいたい、

  • そして、コード内でそれぞれ取得できるようにしたい:

    input_file  # ユーザー入力ファイル
    rules_file  # ルール表
    stock_file  # 在庫表
    

コード実行ノードを各ファイルフィールドに1:1で直接バインドしたい。userinput.filesは使いたくない。そうしないと、対応するスカラー値を設定する際に、対応するファイルを選択できません。