딥시크-V4.1-플래시 비전 API: 딥시크 네이티브 멀티모달 모델에 이미지 전송 방법

deepseek-flash id, base64, URL 및 파일 ID 형식, detail 필드, 이미지 가격, 그리고 Apidog 테스트 루프를 통해 DeepSeek-V4.1-Flash로 이미지를 전송합니다.

Ashley Innocent

Ashley Innocent

10 September 2026

딥시크-V4.1-플래시 비전 API: 딥시크 네이티브 멀티모달 모델에 이미지 전송 방법

Apidog 엔터프라이즈

온프레미스 배포

SSO & RBAC

SOC 2 준수

Apidog Enterprise 살펴보기

DeepSeek의 비전 지원은 2026년 9월 10일부터 사이드 프로젝트가 아니게 되었습니다. DeepSeek-V4.1-Flash의 GA(General Availability) 릴리스와 함께, 이미지 입력은 이제 단일 ID인 deepseek-flash 뒤에 있는 메인 모델에 포함됩니다. 별도의 비전 빌드나 "Exp" 접미사는 없습니다. 릴리스 노트에 따르면 deepseek-v4-flashdeepseek-v4-flash-vision-exp는 모두 은퇴하며, 이제 이 두 이름으로 들어오는 요청은 V4.1-Flash로 연결됩니다.

이는 3주 전에 실험용 엔드포인트를 기반으로 구축했다면 중요한 변경사항입니다. V4-Flash-Vision-Exp에 대해 작성했던 요청 형식은 여전히 작동하지만, 이미지를 읽는 모델은 새로워졌습니다: 763B 매개변수를 가지며, 텍스트 백본과 함께 처음부터 훈련된 비전 인코더를 포함합니다. 이 가이드는 "네이티브 멀티모달"이 실제로 무엇을 의미하는지, 이미지를 전달하는 세 가지 방법, detail 매개변수, 이미지 비용, 그리고 Apidog에서 이전 이름과 새 이름이 동일하게 작동함을 증명하는 반복 가능한 비전 테스트를 구축하는 방법을 다룹니다.

요약 (TL;DR)

여기서 "네이티브 멀티모달"이 의미하는 것

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에서 이월된 세 가지 값은 다음과 같습니다:

가장 먼저 접하게 될 상한선:

제약 사항
인라인 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 설정을 비교하는 것은 거의 동일한 페이로드를 저글링하는 것을 의미합니다. 다음은 읽기 가능하고 한 번의 클릭으로 다시 실행되는 루프입니다.

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

Apidog 다운로드를 통해 이 설정을 구축하는 데 약 15분이 소요됩니다. Apidog는 모델 호스트가 아닌 API 계층을 테스트하므로, 동일한 시나리오는 나중에 라우팅하는 모든 OpenAI 호환 엔드포인트에 대해 작동합니다.

마무리하며

실험용 엔드포인트는 요청 형식과 가격대를 입증했습니다. V4.1-Flash는 둘 다 유지하고, 첫 훈련 토큰부터 이미지를 보았던 모델로 교체합니다. 클라이언트를 deepseek-flash로 지정하고, detail을 변수에 유지하고, 반환되는 JSON에 대해 어설션하며, 한 번은 레거시 이름을 동일한 Apidog 시나리오를 통해 실행하여 재라우팅을 확인하십시오. 그 후 남은 유일한 질문은 자체 문서의 정확성이며, 이제 이를 답할 수 있는 테스트를 갖게 되었습니다.

Apidog에서 API 설계-첫 번째 연습

API를 더 쉽게 구축하고 사용하는 방법을 발견하세요