DifyのファイルアップロードAPIでアップロードしたファイルを、ワークフローで扱う方法

DifyのファイルアップロードAPIでアップロードしたファイルを、ワークフローで扱う方法

Dify + Next.jsで天気に合わせた服を提案するアプリを作ってみた の記事で紹介したアプリでDifyのファイルアップロードAPIを使用しました。

今回はファイルアップロードAPIを使用して、アップロードしたローカルファイルをワークフローAPIで使用する方法について簡単に紹介します。

※ DifyやDifyのワークフローについての説明は省略しています 🙏

ファイルアップロードAPI

Difyでアプリを作成して公開すると、以下のスキーマのファイルアップロードAPIもデフォルトで公開されます。

request body

※ Difyアプリ内のAPIドキュメントから引用

このインターフェースはmultipart/form-dataリクエストを必要とします。

  • file (File) 必須 アップロードするファイル。
  • user (string) 必須 ユーザー識別子、開発者のルールで定義され、アプリケーション内で一意でなければなりません。

response

※ Difyアプリ内のAPIドキュメントから引用

アップロードが成功すると、サーバーはファイルのIDと関連情報を返します。

  • id (uuid) ID
  • name (string) ファイル名
  • size (int) ファイルサイズ(バイト)
  • extension (string) ファイル拡張子
  • mime_type (string) ファイルのMIMEタイプ
  • created_by (uuid) エンドユーザーID
  • created_at (timestamp) 作成タイムスタンプ、例:1705395332

responseを見ると分かるように、DifyのファイルアップロードAPIでは、ファイルアップロード先のURLは取得できません。

ファイルのidが発行されるので、このidをワークフローAPIに投げることで、ワークフローでローカルファイルを扱うことができます。

ワークフローAPI

ワークフローAPIも、Difyでワークフローアプリを作成すると、デフォルトで公開されます。

request body

※ Difyアプリ内のAPIドキュメントから引用

  • inputs (object) 必須 アプリで定義されたさまざまな変数値の入力を許可します。
    • type (string) サポートされているタイプ:
      • document ('TXT', 'MD', 'MARKDOWN', 'PDF', 'HTML', 'XLSX', 'XLS', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB')
      • image ('JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG')
      • audio ('MP3', 'M4A', 'WAV', 'WEBM', 'AMR')
      • video ('MP4', 'MOV', 'MPEG', 'MPGA')
      • custom (他のファイルタイプ)
    • transfer_method (string) 転送方法、画像URLの場合はremote_url / ファイルアップロードの場合はlocal_file
    • url (string) 画像URL(転送方法がremote_urlの場合)
    • upload_file_id (string) アップロードされたファイルID、事前にファイルアップロードAPIを通じて取得する必要があります(転送方法がlocal_fileの場合)

ワークフローAPIにファイルをリクエストする場合は、上記の inputs パラメータを使用します。

APIドキュメントの内容通りですが、ローカルファイルを使用したい場合は、type、transfer_method、upload_file_id を指定してください。

transfer_method に local_file を指定することで、ファイルアップロードAPIでアップロードしたファイルを扱うことが可能です。

また、upload_file_id には、ファイルアップロードAPIを通じて取得したファイルIDを設定してください。

{
  inputs: {
    file: {
      type: 'image',
      transfer_method: 'local_file',
      upload_file_id: file_id,
    }
  }
}

また、ローカルファイルではなく、リモートにアップロードされたファイルを扱う場合は、transfer_methodをremote_urlにして、upload_file_idの代わりに、urlを指定します。

{
  inputs: {
    file: {
      type: 'image',
      transfer_method: 'remote_url',
      url: url,
    }
  }
}

最後に

今回の内容はDifyのAPIドキュメントをしっかり読めば分かる内容ですが、自分がアプリを実装していた当時は、ここまでドキュメントが充実していませんでした。

そのため、Dify のファイルアップロードAPIを通じて取得したファイルIDをワークフロー API に渡す、という点を理解するのに少し詰まってしまい、備忘録的な意味も込めて、今回は記事にさせていただきました!

Anycloudではプロダクト開発の支援を行っています

プロダクト開発をお考えの方はぜひAnycloudにご相談ください。

まずは相談する

記事を書いた人

そうま

エンジニア

そうま

Anycloudでエンジニアをしています。