가이드 / DeepSeek Files API
DeepSeek Files API (2026): 제한 사항, 업로드 및 file_id 실전 활용
DeepSeek는 비전 모델과 함께 2026년 8월 21일 첫 파일 엔드포인트를 조용히 출시했습니다. 이로 인해 많은 기존 가이드가 구버전이 되었습니다(일부는 여전히 DeepSeek API에 "파일 업로드 경로가 없다"고 안내함). 이 가이드에서는 검증된 제한 사항, curl 및 Python 업로드/참조 예제, base64 대신 파일을 사용하는 시점을 다룹니다.
DeepSeek Files API는 이미지를 한 번 업로드하고 채팅에서 참조할 수 있는 file_id를 반환합니다.
purpose="user_data"로 업로드하며, 파일 크기는 최대 64 MiB(10분 업로드 제한 시간)까지 지원됩니다. 저장 용량은 사용자당 25 GiB / 10,000개 파일이며, 보관 기간은 1시간~30일 또는 expires_after를 지정하지 않을 경우 영구 보관됩니다.
deepseek-v4-flash-vision-exp 채팅에서는 {"type":"file","file_id":...} 블록을 통해 파일을 참조합니다. 인라인 이미지가 32 MiB인 것에 비해 file_id 이미지는 요청당 최대 64 MiB까지 가능합니다. Anthropic 호환 엔드포인트를 사용할 때는 anthropic-beta: files-api-2025-04-14 헤더를 추가하세요.
한눈에 보는 제한 사항
| 제한 항목 | 값 (공식 문서 기준, 2026-08-21) |
|---|---|
| 지원 형식 | JPEG, PNG, GIF, WebP — 확장자가 아닌 파일 콘텐츠 기반 감지 |
| 파일당 | 최대 64 MiB; 업로드는 10분 이내에 완료되어야 함 |
| 사용자당 | 25 GiB 저장 용량; 10,000개 파일 저장 |
| 보관 기간 | 1시간~30일 또는 영구 보관 (expires_after 생략 시) |
| 용도 (Purpose) | user_data여야 함 (유일하게 지원되는 purpose, 목록 필터링에도 사용) |
| 요청 내 크기 | file_id 이미지는 요청당 최대 64 MiB; 인라인 base64/URL 이미지는 최대 32 MiB로 제한 |
| API 호환성 | OpenAI 호환 및 Anthropic 호환; Anthropic /messages 사용 시 files-api 베타 헤더 필요 |
출처: 공식 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에서도 동일한 파일 블록이 작동합니다.
파일 vs base64 vs URL 사용 시점
| 방식 | 최대 크기 | 추천 용도 |
|---|---|---|
| base64 인라인 | 32 MiB | 프로세스 내에서 생성된 일회성 이미지; 구현이 가장 간단함 |
| 외부 URL | 32 MiB, 8,192자 URL, 60초 가져오기 | 공개 호스팅된 이미지; 별도 업로드 단계 없음 |
| Files API | 64 MiB | 에이전트 스크린샷 루프, 반복 참조 이미지, 여러 턴에 걸쳐 재사용되는 모든 항목 |
FAQ
DeepSeek에 파일 엔드포인트가 없다고 들었는데 — 새로 나온 건가요?
2026년 8월 21일까지는 맞았습니다 — "/v1/files 라우트가 없으니 직접 텍스트를 추출하라"고 설명하던 이전 가이드는 당시에는 정확했으나 현재는 구버전입니다. Files API는 비전 모델 출시와 함께 제공되었습니다.
PDF나 문서를 업로드할 수 있나요?
아니요 — Files API는 현재 이미지 형식(JPEG/PNG/GIF/WebP)만 지원합니다. PDF의 경우 호출 측에서 페이지를 이미지로 렌더링한 후 업로드하거나 인라인으로 전달하세요.
파일 보관 기간은 얼마나 되나요?
25 GiB / 10,000개 파일 한도 내에서 expires_after를 통해 1시간에서 30일 사이로 설정하거나, 생략 시 영구 보관됩니다.
비전 모델이 아닌 모델에서도 파일이 작동하나요?
파일 블록은 deepseek-v4-flash-vision-exp에서 처리되며, 일반 V4-Flash/V4-Pro는 텍스트 전용으로 유지됩니다. 텍스트 모델에는 파일 참조를 지정하지 마세요.