DeepSeek의 비전 지원은 2026년 9월 10일부터 사이드 프로젝트가 아니게 되었습니다. DeepSeek-V4.1-Flash의 GA(General Availability) 릴리스와 함께, 이미지 입력은 이제 단일 ID인 deepseek-flash 뒤에 있는 메인 모델에 포함됩니다. 별도의 비전 빌드나 "Exp" 접미사는 없습니다. 릴리스 노트에 따르면 deepseek-v4-flash와 deepseek-v4-flash-vision-exp는 모두 은퇴하며, 이제 이 두 이름으로 들어오는 요청은 V4.1-Flash로 연결됩니다.
이는 3주 전에 실험용 엔드포인트를 기반으로 구축했다면 중요한 변경사항입니다. V4-Flash-Vision-Exp에 대해 작성했던 요청 형식은 여전히 작동하지만, 이미지를 읽는 모델은 새로워졌습니다: 763B 매개변수를 가지며, 텍스트 백본과 함께 처음부터 훈련된 비전 인코더를 포함합니다. 이 가이드는 "네이티브 멀티모달"이 실제로 무엇을 의미하는지, 이미지를 전달하는 세 가지 방법, detail 매개변수, 이미지 비용, 그리고 Apidog에서 이전 이름과 새 이름이 동일하게 작동함을 증명하는 반복 가능한 비전 테스트를 구축하는 방법을 다룹니다.
요약 (TL;DR)
- 모델 ID:
deepseek-flash. 기존의deepseek-v4-flash-vision-exp이름도 여전히 해석되지만 V4.1-Flash에 의해 서비스됩니다. - 이미지는 사용자 메시지
content배열에 들어갑니다: base64 데이터 URL (최대 32MiB), 외부 URL (최대 8,192자), 또는 파일 ID. - 선택적
detail필드:low,high(별칭original), 또는auto. - DeepSeek이 보고한 비전 벤치마크: MMMU-Pro 56.5, CVBench 77.9, DocVQA 95.6, RefCOCO 86.0.
- 가격은 표준 Flash 요율입니다: 피크 시간 외 100만 캐시 미스 입력 토큰당 $0.15, 피크 시간 $0.30.
- 컨텍스트는 100만 토큰, 최대 출력은 384K로, 텍스트 전용 호출과 동일합니다.
여기서 "네이티브 멀티모달"이 의미하는 것
Vision-Exp는 완성된 텍스트 모델에 이미지 인코더를 연결했습니다. V4.1-Flash는 그 반대입니다. 모델 카드에 따르면, 이미지는 처음부터 45T 토큰 사전 훈련 코퍼스의 일부였으며, 인코더는 기존 비전 모델에서 빌려온 것이 아니라 DeepSeek-ViT를 처음부터 훈련시킨 것입니다. 백본은 552B 매개변수의 전문가 혼합 모델이며, 인코더가 부착되면 총 763B에 이릅니다. 사전 충전 중에는 8B 매개변수만 활성화되고 디코딩 중에는 16B 매개변수만 활성화되는데, 이것이 이 거대한 모델이 Flash 속도와 Flash 가격으로 계속 실행되는 이유입니다. V4-Flash API 가이드의 텍스트 전용 모델인 V4-Flash는 Vision-Exp가 확장했던 기반 모델이었습니다.
DeepSeek은 모델 카드에 이 네 가지 비전 점수를 보고합니다. 이는 공급업체 자체 측정치이므로, API를 통해 자체 문서를 푸시해보기 전까지는 주장으로 간주하십시오.
| 벤치마크 | 측정 대상 | V4.1-Flash |
|---|---|---|
| MMMU-Pro | 이미지와 텍스트 모두 필요한 대학 수준 질문에 답하기 | 56.5 |
| CVBench | 자연 사진에서의 카운팅, 깊이 순서, 공간 관계 | 77.9 |
| DocVQA | 스캔된 문서 및 양식에 대한 질문 답변 | 95.6 |
| RefCOCO | 이미지 내에서 구문이 참조하는 객체 위치 파악 | 86.0 |
API 사용자에게는 DocVQA와 RefCOCO가 주목해야 할 행입니다. 문서 QA는 송장 및 양식 추출 뒤에 있는 점수입니다. RefCOCO는 접지(grounding)입니다: "이메일 필드 아래의 제출 버튼"이 주어졌을 때, 모델이 그것을 찾을 수 있을까요? 이 기술은 스크린샷을 에이전트 액션으로 전환합니다. 아키텍처 개요는 텍스트 측면과 기술 보고서를 더 자세히 다룹니다.
요청 형식: 이미지를 전달하는 세 가지 방법
와이어 형식은 변경되지 않았습니다. OpenAI SDK를 사용하여 https://api.deepseek.com의 Chat Completions 엔드포인트를 호출하고, 텍스트와 이미지 부분을 동일한 content 배열에 넣고, 모델을 deepseek-flash로 설정합니다. 다음은 송장을 JSON으로 변환하는 전체 호출 예시입니다:
import base64, json
from openai import OpenAI
client = OpenAI(api_key="YOUR_DEEPSEEK_KEY", base_url="https://api.deepseek.com")
with open("invoice-2026-0912.png", "rb") as f:
image_b64 = base64.b64encode(f.read()).decode()
schema_hint = (
"Return only JSON with keys: invoice_number (string), issue_date (YYYY-MM-DD), "
"vendor (string), currency (string), line_items (array of {description, quantity, "
"unit_price, amount}), subtotal, tax, total (numbers)."
)
response = client.chat.completions.create(
model="deepseek-flash",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": schema_hint},
{
"type": "image_url",
"image_url": {
"url": f"data:image/png;base64,{image_b64}",
"detail": "high",
},
},
],
}],
temperature=1.0,
max_tokens=2048,
)
invoice = json.loads(response.choices[0].message.content)
print(invoice["invoice_number"], invoice["total"])
print(response.usage.prompt_tokens, "prompt tokens")
이것이 첫 번째 옵션, base64 인라인입니다: 자체 포함되며, 이미지당 32MiB로 제한되며, 일회성 호출이나 네트워크를 떠나지 않는 파일에 적합합니다.
두 번째 옵션은 외부 URL입니다. 이미지가 CDN이나 객체 저장소에 공개 링크가 이미 있는 경우, 인코딩을 건너뛰고 링크를 전달합니다 (최대 8,192자). 이 curl 요청은 호스팅된 가격표를 읽습니다:
curl https://api.deepseek.com/chat/completions \
-H "Authorization: Bearer $DEEPSEEK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-flash",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "List every plan name and its monthly price from this chart as a JSON array."},
{"type": "image_url", "image_url": {"url": "https://assets.example-saas.com/pricing/plans-q3.png", "detail": "auto"}}
]
}]
}'
세 번째 옵션은 파일 ID입니다. DeepSeek의 파일 API를 통해 이미지를 한 번 업로드한 다음, 바이트를 다시 보내는 대신 file 부분으로 참조합니다:
{"type": "file", "file": {"file_id": "file-api-xxxxxxxxxxxxxxxx"}}
동일한 이미지가 여러 요청에 나타날 때(예: 테스트 스위트의 모든 테스트가 비교하는 참조 스크린샷), 파일 ID를 선택하십시오. 전체 매개변수 설명은 V4.1-Flash API 가이드에 있습니다.
detail 매개변수 및 요청 제한
detail은 선택 사항이며 image_url 객체 안에 있습니다. Vision-Exp에서 이월된 세 가지 값은 다음과 같습니다:
"low"는 512x512로 다운스케일합니다. 가장 저렴하고 빠르며, "이것이 대시보드인가 영수증인가"와 같은 질문에 적합합니다."high"(별칭"original")는 원본 해상도를 유지합니다. 밀집된 문서, 작은 글씨, 12px 레이블이 중요한 UI 스크린샷에 사용하십시오."auto"는 API가 선택하도록 합니다.
가장 먼저 접하게 될 상한선:
| 제약 사항 | 값 |
|---|---|
| 인라인 base64 이미지 | 최대 32MiB |
| 외부 URL 길이 | 최대 8,192자 |
| 파일 ID 참조 | 파일 API를 통해 지원됨 |
| 컨텍스트 창 | 100만 토큰 |
| 최대 출력 | 384K 토큰 |
detail 값 |
low, high/original, auto |
Vision-Exp 가이드는 이미지 수, 본문 크기 및 픽셀 치수에 대한 추가 상한선을 나열했습니다. 이들은 실험 모델용으로 게시되었으므로, V4.1-Flash에 의존하기 전에 API 변경 로그를 확인하십시오. 한 가지 규칙은 변경되지 않았습니다: 이미지는 사용자 메시지에 속합니다. 시스템 또는 어시스턴트 메시지에 이미지를 넣으면 400 오류가 발생합니다.
deepseek-flash에서 이미지 비용
별도의 비전 가격은 없습니다. 이미지는 2026년 9월 10일 UTC 04:00부터 유효한 가격 페이지의 Flash 요율로 입력 토큰으로 청구됩니다:
| deepseek-flash, 100만 토큰당 | 피크 시간 외 | 피크 시간 |
|---|---|---|
| 입력, 캐시 히트 | $0.003 | $0.006 |
| 입력, 캐시 미스 | $0.15 | $0.30 |
| 출력 | $0.60 | $1.20 |
피크 시간은 월요일부터 금요일, UTC 01:00부터 04:00 및 06:00부터 10:00까지이며; 피크 시간 외에는 절반 가격입니다. Vision-Exp에서는 각 이미지가 최대 384개의 입력 토큰으로 청구되었습니다. 이 상한선이 V4.1-Flash로 변경 없이 이월되는지는 문서와 [확인]이 필요합니다. 모든 응답의 usage.prompt_tokens는 실제 개수를 보고하며, 이것이 Python 예시에서 이를 출력하는 이유입니다.
384 토큰 상한선이 유지된다면, 이미지 하나는 피크 시간 캐시 미스 요율에서 약 $0.000115, 피크 시간 외에는 그 절반의 비용이 듭니다. 따라서 천 개의 송장은 대략 $0.12의 이미지 입력 비용이 발생합니다. 실제 파이프라인에서는 출력이 지배적입니다: 송장당 400 토큰의 JSON은 피크 시간에 이미지 자체보다 약 4배 더 많은 비용이 듭니다. 레버는 이미지 다운스케일링이 아니라 엄격한 응답 스키마입니다. 피크 시간, 피크 시간 외, 캐시 히트 계산은 DeepSeek-V4.1-Flash 가격 설명에서 자세히 다루며; 요약하자면, 캐시 미스 입력은 8월에 Vision-Exp가 청구했던 것보다 32% 저렴합니다.
시범 운영할 가치가 있는 세 가지 사용 사례
문서 추출. 송장, 영수증, 배송 메모, 보험 양식. 고정된 JSON 스키마를 요청하고, detail: "high"로 보내고, 기록을 신뢰하기 전에 품목들이 소계를 합산하는지 확인합니다.
어설션 테스트를 위한 UI 스크린샷. 배포 후 페이지를 캡처하고, 예상 요소가 존재하고 어디에 있는지 묻고, 답변을 통과/실패로 전환합니다. RefCOCO는 관련 벤치마크입니다: 작업은 명명된 요소를 찾는 것입니다.
차트 읽기. 차트 이미지에서 시리즈 이름, 축 레이블, 플롯된 값을 테이블로 추출합니다. 겹치는 선이나 레이블 없는 축은 사람의 육안 검사가 필요합니다.
Apidog에서 비전 엔드포인트 테스트하기
비전 요청은 손으로 반복하기 고통스럽습니다: base64 blob은 JSON 본문을 읽을 수 없게 만들고, detail 설정을 비교하는 것은 거의 동일한 페이로드를 저글링하는 것을 의미합니다. 다음은 읽기 가능하고 한 번의 클릭으로 다시 실행되는 루프입니다.

- 환경 설정.
base_url,api_key,model(deepseek-flash),detail(high) 변수를 생성합니다. 나중에 detail 레벨을 전환하는 것은 페이로드 편집이 아닌 드롭다운 변경입니다. - 요청 전 스크립트에서 이미지 인코딩. 본문에 base64를 붙여넣는 대신, 요청 전 스크립트가 샘플 파일을 인코딩하고 결과를
image_b64변수에 작성하게 합니다. 보이는 본문은 몇 줄 길이로 유지되며, 테스트 이미지를 교체하는 것은 한 경로를 변경하는 것을 의미합니다. - 변수를 사용하여 요청 본문 저장.
"model": "{{model}}","detail": "{{detail}}","url": "data:image/png;base64,{{image_b64}}"를 사용합니다. 재사용 가능하도록 테스트 케이스로 저장합니다. - JSON 형태에 대한 어설션. 응답이 JSON으로 구문 분석되는지,
invoice_number가 비어 있지 않은 문자열인지,line_items가 비어 있지 않은 배열인지,total이 숫자인지,usage.prompt_tokens가 선택한 임계값 아래에 있는지 어설션합니다. 이는 "괜찮아 보임"을 통과/실패로 전환합니다. - 레거시 이름이 동일한 모델로 라우팅되는지 확인. 저장된 요청을 복제하고,
model을deepseek-v4-flash-vision-exp로 설정하고, 동일한 이미지에 대해 하나의 테스트 시나리오에서 둘 다 실행합니다. 추출된 필드와usage.prompt_tokens개수를 비교합니다. 일치하는 결과는 릴리스 노트의 내용을 확인시켜줍니다: 두 이름 모두 V4.1-Flash를 호출하므로, 안심하고 구성에서 이름을 변경할 수 있습니다. - CI에서 실행. 프롬프트 변경이 있을 때마다
apidog-cli로 시나리오를 실행하여, 스키마 회귀가 프로덕션 전에 드러나도록 합니다.
Apidog 다운로드를 통해 이 설정을 구축하는 데 약 15분이 소요됩니다. Apidog는 모델 호스트가 아닌 API 계층을 테스트하므로, 동일한 시나리오는 나중에 라우팅하는 모든 OpenAI 호환 엔드포인트에 대해 작동합니다.
마무리하며
실험용 엔드포인트는 요청 형식과 가격대를 입증했습니다. V4.1-Flash는 둘 다 유지하고, 첫 훈련 토큰부터 이미지를 보았던 모델로 교체합니다. 클라이언트를 deepseek-flash로 지정하고, detail을 변수에 유지하고, 반환되는 JSON에 대해 어설션하며, 한 번은 레거시 이름을 동일한 Apidog 시나리오를 통해 실행하여 재라우팅을 확인하십시오. 그 후 남은 유일한 질문은 자체 문서의 정확성이며, 이제 이를 답할 수 있는 테스트를 갖게 되었습니다.
