ガイド / DeepSeek Files API
DeepSeek Files API (2026): 制限事項、アップロード、実践的なfile_idの活用
DeepSeekは2026年8月21日、ビジョンモデルとともに初のファイルエンドポイントを静かにリリースしました。これにより多くの古いガイドは時代遅れとなっています(未だにDeepSeekのAPIには「ファイルアップロード用のルートがない」と説明しているものもあります)。本ガイドでは、検証済みの制限事項、curlおよびPythonによるアップロードと参照の例、そしてbase64ではなくファイルを使用すべきタイミングを解説します。
DeepSeek Files APIは画像を1度アップロードすると、チャット内で参照可能なfile_idを返します。
purpose="user_data" を指定してアップロードします。1ファイルあたり最大 64 MiB(アップロード制限時間10分)、ストレージは ユーザーあたり25 GiB / 10,000ファイル まで、保持期間は1時間〜30日間(expires_after を省略した場合は無期限)です。
deepseek-v4-flash-vision-exp のチャットからは {"type":"file","file_id":...} ブロック経由でファイルを参照します。file_id指定の画像は1リクエストあたり最大64 MiBまで対応しており、インラインの32 MiBより大容量を扱えます。Anthropic互換エンドポイントから利用する場合は、anthropic-beta: files-api-2025-04-14 ヘッダーを追加してください。
制限事項の概要
| 制限項目 | 値(公式ドキュメント、2026-08-21) |
|---|---|
| 対応フォーマット | JPEG、PNG、GIF、WebP — 拡張子ではなくファイル内容から自動判別 |
| 1ファイルあたり | 最大 64 MiB(10分以内にアップロード完了が必要) |
| ユーザーあたり | 25 GiBストレージ、保存ファイル数10,000件 |
| 保持期間 | 1時間〜30日間、または無期限(expires_afterを省略した場合) |
| 用途(Purpose) | user_data 必須(サポートされている唯一のpurposeであり、一覧のフィルタリングにも使用) |
| リクエスト内サイズ | file_id画像は1リクエストあたり最大64 MiB、インラインのbase64/URL画像は最大32 MiB |
| API互換性 | OpenAI互換およびAnthropic互換。Anthropicの /messages には files-api beta ヘッダーが必要 |
出典:公式 Files API ガイド(2026-08-21確認)。
一度アップロードすれば何度でも参照可能(最大30日間)
スクリーンショットをアップロードしてfile_idを取得:
curl https://api.deepseek.com/files \
-H "Authorization: Bearer $DEEPSEEK_API_KEY" \
-F "purpose=user_data" \
-F "file=@dashboard.png"
続いてvision-expのチャットで参照 — base64データは不要で、後続のターンで再アップロードする必要もありません:
curl https://api.deepseek.com/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DEEPSEEK_API_KEY" \
-d '{
"model": "deepseek-v4-flash-vision-exp",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "Which metric regressed in this dashboard?"},
{"type": "file", "file_id": "file-api-xxxx"}
]
}]
}'
OpenAI SDKを使用したPythonの例 — アップロードしてチャット:
from openai import OpenAI
client = OpenAI(api_key="YOUR_KEY", base_url="https://api.deepseek.com")
f = client.files.create(file=open("dashboard.png", "rb"), purpose="user_data")
resp = client.chat.completions.create(
model="deepseek-v4-flash-vision-exp",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "Which metric regressed?"},
{"type": "file", "file_id": f.id},
],
}],
)
print(resp.choices[0].message.content)
- インラインでの代替手段:ファイルブロックには、
file_idの代わりにfile_data(base64)を渡すことも可能です(排他的フィールド)。なお、filenameは file_data と一緒にのみ指定できます。 - Anthropicスタイルのスタック:
anthropic-beta: files-api-2025-04-14ヘッダーを付けることで、/messages でも同一のファイルブロックが動作します。
ファイル / base64 / URL の使い分け
| 方式 | 最大サイズ | 最適な用途 |
|---|---|---|
| base64 インライン | 32 MiB | プロセス内で動的生成される単発画像向け。コード実装が最も簡単 |
| 外部URL | 32 MiB、URL上限8,192文字、フェッチ60秒 | 公開ホスティングされた画像向け。アップロード処理が一切不要 |
| Files API | 64 MiB | エージェントのスクリーンショットループ、繰り返し参照する画像、複数ターンで再利用されるあらゆる場面 |
FAQ
DeepSeekにはファイルエンドポイントがないと聞いたのですが、新機能ですか?
2026年8月21日まではその通りでした。「/v1/files ルートはなく、自分でテキストを抽出する必要がある」と説明していた古いガイドは当時の情報としては正確でしたが、現在は古くなっています。Files API はビジョン機能のリリースに合わせて提供が開始されました。
PDFやドキュメントをアップロードできますか?
いいえ — Files API が現在受け付けるのは画像フォーマット(JPEG/PNG/GIF/WebP)のみです。PDFの場合は、呼び出し元側で各ページを画像にレンダリングしてから、アップロードまたはインライン指定してください。
ファイルの保存期間はどのくらいですか?
expires_after を指定した場合は1時間〜30日間、省略した場合は無期限です(25 GiB / 10,000ファイルのクォータ内)。
ビジョン以外のモデルでもファイルを利用できますか?
ファイルブロックは deepseek-v4-flash-vision-exp で処理されます。通常の V4-Flash / V4-Pro はテキスト専用のままです。テキストモデルに対してファイル参照を渡さないでください。