適用シーン
- 文書分析: 学術研究報告書をアップロードすると、LLMはクイックにポイントを要約し、ファイルの内容に基づいて関連する質問に回答します。
- コードレビュー: 開発者がソースコードファイルをアップロードすると、最適化の提案やバグの検出を受けることができます。
- 学習サポート: 学生が課題や学習資料をアップロードし、個別の説明やガイダンスを得ることができます。
- 法的支援: 完全な契約書のテキストをアップロードし、LLMが条項をレビューし、潜在的なリスクを指摘します。
ファイルのアップロードとナレッジベースの違い
ファイルのアップロードとナレッジベースは、言語モデル(LLM)に追加のコンテキスト情報を提供する手段ですが、それぞれの使用シーンや機能には明確な違いがあります。- 情報のソース:
- ファイルのアップロード:エンドユーザーは対話中に動的にファイルをアップロードし、即座に個別化されたコンテキストを提供します。
- ナレッジベース:アプリケーション開発者が事前に設定・管理した、比較的固定された情報セットを含みます。
- 柔軟性:
- ファイルのアップロード:柔軟性が高く、ユーザーは特定のニーズに応じて様々なタイプのファイルをアップロードできます。
- ナレッジベース:内容は比較的固定されていますが、複数のセッションで再利用が可能です。
- 情報処理:
- ファイルのアップロード:ファイルの内容をLLMが理解できるテキストに変換するためには、ドキュメントエクストラクターなどのツールが必要です。このツールは、ファイルから必要な情報を抽出し、モデルが処理できる形式に整えます。
- ナレッジベース:通常、前処理とインデックス作業が完了しているため、直接検索して情報を取得できます。
- アプリケーションシーン:
- ファイルのアップロード:ユーザー固有の文書を処理する必要があるシーンで非常に有効です。例えば、文書分析やパーソナライズされた学習支援などが挙げられます。
- ナレッジベース:大量の事前設定情報にアクセスする必要がある場合に適しています。たとえば、カスタマーサービスや製品相談などです。
- データの永続性:
- ファイルのアップロード:通常は一時的な使用であり、システムに長期間保存されることはありません。
- ナレッジベース:アプリケーションの一部として長期間存在し、継続的に更新・メンテナンスされることが可能です。
はじめに
Difyは、チャットフロー と ワークフロー タイプのアプリでファイルをアップロードし、LLMに処理させる変数をサポートしています。アプリ開発者は、以下の2つの方法でアプリにファイルアップロード機能を追加できます:- ワークフローアプリの場合
- 開始ノードにファイル変数を追加する
- チャットフローアプリの場合
ファイルタイプ
以下のファイルタイプとフォーマットがサポートされています:| ファイルタイプ | サポートされるフォーマット |
| 文書 | TXT, MARKDOWN, PDF, HTML, XLSX, XLS, DOCX, CSV, EML, MSG, PPTX, PPT, XML, EPUB. |
| 画像 | JPG, JPEG, PNG, GIF, WEBP, SVG. |
| 音声 | MP3, M4A, WAV, WEBM, AMR. |
| 映像 | MP4, MOV, MPEG, MPGA. |
| その他 | カスタム拡張子がサポートされます。 |
方法1:チャットボックスでファイルアップロードを有効にする(チャットフローのみ対応)
- チャットフローアプリの右上隅にある 「機能」 ボタンをクリックして、アプリにさらに機能を追加できます。 この機能を有効にすると、アプリユーザーは対話中にいつでもファイルをアップロードおよび更新できます。最大10個のファイルを同時にアップロードでき、各ファイルのサイズ上限は15MBです。

ファイルアップロード機能
- 音声ファイルについては、
gpt-4o-audio-previewなどのマルチモーダル入力に対応したモデルを使用することで、音声を直接処理できます。この場合、追加のエクストラクタは必要ありません。 - 映像やその他のファイルタイプについては、対応するエクストラクタがまだ用意されておらず、外部ツールを統合するためには開発者が外部ツールにアクセスする必要があります。外部ツールを接続して処理する必要があります。
- テキスト抽出ツールノードを追加し、入力変数で
sys.files変数を選択します。 - LLMノードを追加し、システムプロンプトでテキスト抽出ツールノードの出力変数を選択します。
- 最後に「直接応答」ノードを追加し、LLMノードの出力変数を入力します。

ファイルアップロードののワークフロー

会話ボックスでのファイルのアップロード
方法2:ファイル変数を追加してファイルアップロード機能を有効にする
1. 「開始」ノードにファイル変数を追加する
アプリの「開始」ノードに、**「単一ファイル」**または 「ファイルリスト」 といったフィールドタイプの変数を追加します。- 単一ファイル ユーザーが1つのファイルだけをアップロードできるようにします。
- ファイルリスト ユーザーが複数のファイルを一度にアップロードできるようにします。
操作を簡単にするため、ここでは「単一ファイル」変数の例を用います。
ファイルの解析方法
ファイル変数の使用方法には主に2つのアプローチがあります:- ツールノードを利用してファイルの内容を変換する:
- ドキュメント形式のファイルの場合、「ドキュメントエクストラクタ」ノードを使ってファイルの内容をテキスト形式に変換できます。
- この方法は、ファイルの内容をモデルが理解できる形式(例: string、array[string]など)に変換する必要がある場合に適しています。
- LLMノード内でファイル変数を直接使用する:
- 特定の種類のファイル(例: 画像)の場合、LLMノード内でファイル変数を直接使用することができます。
- たとえば、画像形式のファイル変数を使用する場合、LLMノードで視覚機能を有効にし、変数セレクターで該当するファイル変数を直接参照できます。
2. テキスト抽出ツールノードの追加
ファイルをアップロードすると、そのファイルは「単一ファイル」変数に保存されます。しかし、LLMは変数内のファイルを直接読み込むことができないため、まず「テキスト抽出ツール」ノードを追加する必要があります。 「開始」ノード内のファイル変数を 「テキスト抽出ツール」 ノードの入力変数として使用します。
入力変数を追加する

システムプロンプトの単語を貼り付けます

URL を貼り付けて会話を開始します
- LLMノードで視覚機能を有効にします。これにより、モデルが画像入力を処理できるようになります(モデルが視覚機能をサポートしている必要があります)。
- LLMノードの変数セレクターで、以前に作成したファイル変数を直接参照します。ファイルのアップロードによって作成されたファイル変数を選択する場合は、sys.files変数を選択します。
- システムプロンプトで、モデルに画像入力の処理方法を指示します。たとえば、モデルに画像の内容を説明させたり、画像に関する質問に答えさせたりできます。

LLM ノードでファイル変数を直接使用する
ファイルのダウンロード方法
ファイル変数をanswerノードまたはendノードに配置すると、アプリケーションがそのノードに到達した際に、セッションボックスにファイルダウンロードカードが表示されます。このカードをクリックすることで、ファイルをダウンロードできます。
ファイルダンロード
上級者向けの使用方法
アプリが複数のファイル形式に対応できるようにしたい場合、例えば、ユーザーがドキュメントファイル、画像、音声、動画ファイルを同時にアップロードできるようにするには、「開始」ノードに「ファイルリスト」変数を追加し、「リスト操作」ノードを使用して異なるファイルタイプを処理する必要があります。詳細については、リスト操作ノードを参照してください。
複数のファイルタイプの処理