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) IDname
(string) ファイル名size
(int) ファイルサイズ(バイト)extension
(string) ファイル拡張子mime_type
(string) ファイルのMIMEタイプcreated_by
(uuid) エンドユーザーIDcreated_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 に渡す、という点を理解するのに少し詰まってしまい、備忘録的な意味も込めて、今回は記事にさせていただきました!