ファイルアップロード

チャットのテキストとは異なり、ドキュメントには学術的な報告や法的な契約など、より複雑で多量の情報が含まれることがよくあります。しかし、大規模言語モデル(LLM)は、テキストや画像の処理に限られているため、これらの文書に含まれる豊富なコンテキストを理解するのが難しいです。結果として、ユーザーはよく、多くの情報を手動でコピー&ペーストしてLLMに入力し、それによって運用上の負担が増えてしまいます。

ファイルアップロード機能はこの問題に対応し、ワークフローアプリ内でファイルをアップロードし、解析し、参照し、ダウンロードすることを可能にします。これにより、開発者は画像、音声、映像など、さまざまなタイプのメディアを理解し、扱えるより複雑なワークフローを容易に構築できるようになります。

アプリのシナリオ

  1. 文書分析: 学術的な研究報告をアップロードし、LLMがその内容から重要なポイントを迅速にまとめて、関連する質問に回答できます。

  2. コードレビュー: 開発者がコードファイルをアップロードし、最適化の提案やバグの発見を受け取れます。

  3. 学習のサポート: 学生が課題や学習資料をアップロードし、パーソナライズされた説明や指導を受けられます。

  4. 法律のアシスタント: 完全な契約書のテキストをアップロードし、LLMが条項をレビューし、潜在的なリスクを指摘します。

ファイルアップロードとナレッジベースの基本的な違い

ファイルアップロードとナレッジベースは、いずれもLLMに追加情報を提供する方法ですが、それらを活用するシチュエーションと各々が持つ特性が大きく異なります:

  1. 情報の出所

    • ファイルアップロード:利用者が会話の流れの中でリアルタイムにファイルをアップロードすることができ、その場に応じたカスタマイズされた情報を提供します。

    • ナレッジベース:開発者によってあらかじめ準備され、一定の情報が含まれています。

  2. 柔軟性の面での違い

    • ファイルアップロード:よりフレキシブルに対応可能で、利用者は自身のニーズに応じて様々な種類のファイルをアップロードできます。

    • ナレッジベース:内容は基本的に固定されていますが、異なるセッションでも再利用が可能です。

  3. 情報の取り扱い

    • ファイルアップロード:アップロードされたファイルの内容をLLMが理解できる形式のテキストに変換するため、文書の抽出ツールなどが必要になります。

    • ナレッジベース:通常、事前に整理され、インデックスが作成されており、直接的にアクセス可能です。

  4. 適用シナリオ

    • ファイルアップロード:利用者特有のドキュメントを扱う必要がある状況に適しており、例えば文書の分析やパーソナライズされた学習支援などがあります。

    • ナレッジベース:大量の既定情報へアクセスが必要な場合に適しており、顧客サポートや製品に関する問い合わせなどが該当します。

  5. データの持続性

    • ファイルアップロード:基本的には一時的な使用を目的としており、システム内での長期保持はされません。

    • ナレッジベース:アプリに長期間組み込まれ、定期的に更新され、管理されることが期待されます。

はじめに: ファイルアップロード機能を持つチャットフロー/ワークフローアプリの簡単な作り方

Difyは、ファイルアップロードをサポートするチャットフローワークフロータイプのアプリ開発を可能にし、特別な変数を用いてこれらのファイルを処理します。アプリ開発者は次の手順に従って、アップロード機能を組み込むことができます。

  • ワークフローアプリの場合:

  • チャットフローアプリの場合:

    • チャットウインドウで直接ファイルをアップロードできるように、追加機能でファイルアップロードを有効にする

    • 開始ノードにファイル変数を設定する

    • 注意点:この2つの設定は独立しており、両方同時に行うことができます。追加機能でのファイルアップロード設定(アップロードの方式や制限数を含む)は、開始ノードで設定したファイル変数には影響を与えません。例えば、開始ノードでのみファイル変数を作成したい場合は、追加機能でファイルアップロードを有効にする必要はありません。

これにより、アプリはさまざまな使用シナリオに対応するための柔軟なファイルアップロードオプションを提供します。

ファイルタイプ

File変数とarray[file]変数は、以下のファイルタイプおよびフォーマットをサポートしています:

方法1:ファイル処理機能を持つ言語モデルの使用

Claude 3.5 Sonnetのような言語モデルは、ファイルの内容を直接処理・分析する機能をサポートしており、言語モデルのプロンプトでファイル変数を利用できます。

トラブルを避けるため、開発者は言語モデルを使う前にサポートされるファイルタイプを公式サイトで確認することが推奨されます。

  1. チャットフローまたはワークフローアプリの作成をクリックします。

  2. 言語モデルノードを追加し、ファイル処理機能を持つ言語モデルを選択します。

  3. 開始ノードにファイル変数を追加します。

  4. 言語モデルノードのシステムプロンプトにファイル変数を設定します。

  5. 設定を完了します。

方法2:ファイル変数を追加してファイルアップロード機能を有効にする (チャットフローのみ)

  1. チャットフローアプリの右上にある「機能」ボタンを押すと、新しい機能を追加できます。この機能を使うことで、ユーザーは会話中にファイルのアップロードや更新が可能になります。最大10ファイルまで一度にアップロードでき、一つのファイルは15MBまでのサイズ制限があります。

ただし、この機能をオンにしても、LLMがファイルを直接読むわけではありません。テキストに変換してLLMが理解できるようにするためにはテキスト抽出ツールが必要です。

  • 音声ファイルはgpt-4o-audio-previewのようなマルチモーダル入力をサポートするモデルによって直接処理可能ですが、追加のエクストラクターは必要ありません。

  • 映像やその他のファイルタイプには対応するエクストラクターがないため、アプリ開発者は処理のために外部ツールを統合する必要があります。

  1. 「テキスト抽出ツール」ノードを追加し、sys.files変数を入力変数として選択します。

  2. LLMノードを追加し、そのシステムプロンプトでテキスト抽出ツールからの出力変数を選びます。

  3. 最後に、「回答」ノードを設置し、LLMノードからの出力変数を入力します。

機能を有効にした後は、ユーザーがファイルをアップロードし、ダイアログボックスを通じて会話に参加することが可能になります。ただし、この機能では、LLMアプリケーションがファイル内容を保持することができず、会話のたびにファイルの再アップロードが必要になります。

会話中にLLMがファイル内容を記録しておく機能を希望する場合は、別の方法として方法3を参照してください。

方法3:ファイル変数を追加してファイルアップロード機能を有効にする

1. 「開始」ノードにファイル変数を追加する

アプリの「開始」ノードに、「単一ファイル」 または 「ファイルリスト」 といったフィールドタイプの変数を追加します。

  • 単一ファイル

    ユーザーが1つのファイルだけをアップロードできるようにします。

  • ファイルリスト

    ユーザーが複数のファイルを一度にアップロードできるようにします。

操作を簡単にするため、ここでは「単一ファイル」変数の例を用います。

ファイルの解析方法

ファイル変数を扱う際には、主に2つのアプローチがあります:

  1. ツールノードを活用してファイルの内容を変換する方法:

    • 文書ファイルに対しては、「ドキュメントエクストラクター」ノードを使用して内容をテキスト形式に変換可能です。

    • この手法は、モデルが解釈可能な形(例:文字列や文字列の配列)にファイル内容を変換する必要がある場合に適しています。

  2. LLMノードを使ってファイル変数を直接参照する方法:

    • 画像などの特定のファイルについては、LLMノードを通じてファイル変数を直接扱うことができます。

    • 画像ファイルの場合、LLMノード内でビジョン機能を有効にし、該当するファイル変数を変数セレクターから直接選択できます。

どちらの方法を選ぶかは、扱うファイルの種類と具体的なニーズによって異なります。以下では、これらの手法を具体的にどのように実行するかについて解説します。

2. テキスト抽出ツールノードの追加

ファイルをアップロードすると、そのファイルは「単一ファイル」変数に保存されます。しかし、LLMは変数内のファイルを直接読み込むことができないため、まず「テキスト抽出ツール」ノードを追加する必要があります。

このノードは、アップロードしたドキュメントファイルから内容を抽出し、LLMノードに送信して情報処理を行います。

「開始」ノード内のファイル変数を 「テキスト抽出ツール」 ノードの入力変数として使用します。

「テキスト抽出ツール」ノードの出力変数をLLMノードのシステムプロンプトに貼り付けます。

これらの設定が完了すると、ユーザーはWebApp内でファイルのURLを貼り付けるか、ローカルファイルをアップロードでき、その後、ドキュメントの内容に基づいてLLMとの対話が可能になります。ユーザーは対話の過程でいつでもファイルを置き換えることができ、LLMは常に最新のファイル内容を取得します。

LLMノードにおけるファイル変数の参照

特定のファイルタイプ(例えば画像ファイル)を扱う際、LLMノードを利用してファイル変数にアクセスすることが可能です。このアプローチは、視覚データの分析が求められるシナリオに特に適しています。具体的には次のステップに従います:

  1. LLMノードで視覚機能をオンにします。これにより、モデルが画像データの解析を行えるようになります(ただし、モデルが視覚機能をサポートしている必要があります)。

  2. LLMノードの変数セレクターを使用して、事前に設定したファイル変数を選択します。ファイルのアップロード機能が有効になっている場合、sys.files変数を選択することになります。

  3. システムによる指示で、モデルに対して画像データの扱い方を伝えます。例えば、画像の内容を説明させたり、画像に基づいた質問に答えさせたりすることができます。

以下に設定例を示します:

LLMノードを介してファイル変数を利用する際には、開発者がファイル変数に含まれるのが画像ファイルだけであることを確認する必要があります。そうでない場合、エラーが発生する可能性があります。異なるタイプのファイルがアップロードされる可能性がある場合は、ファイルを適切にフィルタリングするためにリストオペレーターノードの使用が必要です。

ファイルのダウンロード

応答ノードや終了ノードにファイル変数を設定すると、そのノードがトリガされた際に会話ウィンドウにファイルダウンロードのカードが表示されます。カードをクリックすることで、ファイルをダウンロードできます。

上級者向けの使用方法

アプリが複数のファイル形式に対応できるようにしたい場合、例えば、ユーザーがドキュメントファイル、画像、音声、動画ファイルを同時にアップロードできるようにするには、「開始」ノードに「ファイルリスト」変数を追加し、「リスト操作」ノードを使用して異なるファイルタイプを処理する必要があります。詳細については、リスト操作ノードを参照してください。

Last updated