Vision | DeepSeek API

Ondersteunde afbeeldingsformaten: JPEG, PNG, GIF en WebP. Het formaat wordt gedetecteerd op basis van de werkelijke bestandsinhoud, niet op basis van de bestandsnaam of het opgegeven MIME-type.

Afbeeldingen verzenden

Er zijn drie manieren om een afbeelding aan het model te leveren. Al deze methoden maken gebruik van het standaard OpenAI-compatibele Chat Completions-formaat, waarbij de inhoud (content) een array van blokken is in plaats van een eenvoudige tekststring. Dezelfde drie methoden zijn ook beschikbaar in de Responses API, waar afbeeldingen worden overgebracht in input_image-inhoudsdelen.

De base_url voor de onderstaande voorbeelden is https://api.deepseek.com.

1. Base64-gecodeerde afbeelding (inline)

Codeer de afbeelding en voeg deze direct toe aan het verzoek als een data: URL. Dit is de eenvoudigste optie voor lokale bestanden. De gecodeerde gegevens tellen mee voor de limiet van de request body van 48 MiB (zie Limieten).

Python voorbeeld:

import base64
from openai import OpenAI

client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")

with open("image.jpg", "rb") as f:
    b64 = base64.b64encode(f.read()).decode("utf-8")

response = client.chat.completions.create(
    model="deepseek-v4-flash-vision-exp",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Wat staat er op deze afbeelding?"},
                {
                    "type": "image_url",
                    "image_url": {"url": f"data:image/jpeg;base64,{b64}"},
                },
            ],
        }
    ],
)

print(response.choices[0].message.content)

cURL voorbeeld:

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": "Wat staat er op deze afbeelding?"},
        {"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,<BASE64_DATA>"}}
      ]
    }
  ]
}'

2. Externe afbeelding-URL

Stuur een publiek toegankelijke http(s)-link en het model downloadt de afbeelding voor u. De URL mag maximaal 8192 tekens lang zijn, het afbeeldingsbestand mag maximaal 32 MiB zijn en de download moet binnen 60 seconden zijn voltooid. Als uw link langer is, gebruik dan een base64-data-URL of de Files API.

Python voorbeeld:

response = client.chat.completions.create(
    model="deepseek-v4-flash-vision-exp",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Beschrijf deze afbeelding."},
                {
                    "type": "image_url",
                    "image_url": {"url": "https://example.com/image.jpg"},
                },
            ],
        }
    ],
)

print(response.choices[0].message.content)

3. Verwijzen naar een bestand geüpload via de Files API

Upload een afbeelding één keer met de Files API en verwijs vervolgens naar de fileid in uw verzoeken. Dit is de beste optie wanneer u dezelfde afbeelding in meerdere verzoeken hergebruikt, of wanneer de afbeelding de limiet van de request body van 48 MiB overschrijdt. In tegenstelling tot inline-afbeeldingen kunnen afbeeldingen die via de Files API fileid worden aangeroepen tot 64 MiB groot zijn en zijn ze niet onderhevig aan de controle van 32 MiB per afbeelding.

Gebruik een file content block met de geretourneerde file_id (die de vorm file-api-... heeft):

response = client.chat.completions.create(
    model="deepseek-v4-flash-vision-exp",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Wat staat er op deze afbeelding?"},
                {"type": "file", "file_id": "file-api-xxxxxxxxxxxxxxxx"},
            ],
        }
    ],
)

print(response.choices[0].message.content)

Als alternatief kan een file block de afbeelding inline als base64 overbrengen via filedata in plaats van fileid (deze twee sluiten elkaar uit):

{
  "type": "file",
  "file_data": "data:image/jpeg;base64,<BASE64_DATA>",
  "filename": "image.jpg"
}

Detailniveau

Voor image_url-inputs kunt u optioneel een detail-veld instellen om te bepalen hoe de afbeelding wordt verwerkt:

WaardeGedrag
lowDe afbeelding wordt voor inferentie geschaald naar 512×512. Sneller en goedkoper wanneer fijne visuele details niet belangrijk zijn.
highBehoudt de originele afbeelding. (Aangeboden voor compatibiliteit; gelijk aan original.)
originalBehoudt de originele afbeelding.
autoAutomatische selectie. Momenteel gelijk aan original.

Voorbeeld:

{
  "type": "image_url",
  "image_url": {"url": "https://example.com/image.jpg", "detail": "low"}
}

Wanneer de Files API gebruiken

Inline-afbeeldingen (base64 of file_data) tellen mee voor de limiet van de request body van 48 MiB. Overweeg de Files API in de volgende gevallen:

  • Wanneer één enkel verzoek de limiet van de body-grootte zou overschrijden.
  • Wanneer de afbeelding groter is dan 32 MiB; dit is alleen mogelijk via de Files API.
  • Wanneer u naar dezelfde afbeelding verwijst in meerdere verzoeken en wilt voorkomen dat u deze elke keer opnieuw uploadt.

Tokengebruik

Afbeeldingen worden omgezet in tokens op basis van hun afmetingen. Deze tokens worden samen met uw teksttokens gefactureerd.

Voorafgaand aan de inferentie wordt elke afbeelding automatisch herschaald:

  • Afbeeldingen met een totaal aantal pixels onder ongeveer 384×384 worden vergroot, waarbij de beeldverhouding behouden blijft.
  • Grotere afbeeldingen worden verkleind, waarbij de beeldverhouding behouden blijft, zodat het totale aantal pixels na herschaling ongeveer gelijk is aan dat van een 800×800 afbeelding.

Hierdoor is er een bovengrens van 384 tokens per afbeelding: bijvoorbeeld verbruiken een afbeelding van 2000×2000 en een van 5000×5000 na herschaling hetzelfde aantal tokens. Wanneer een verzoek meerdere afbeeldingen bevat, wordt elke afbeelding onafhankelijk geteld volgens dezelfde regel — er is geen aparte berekening voor verzoeken met meerdere afbeeldingen.

Om de tokenkosten van een afbeelding van een specifieke grootte te schatten, kunt u de image token calculator op de pagina "Token & Token Usage" gebruiken.

Limieten

LimietWaarde
Ondersteunde formatenJPEG, PNG, GIF, WebP
Lengte externe URL8192 tekens
Grootte request body48 MiB
Max. grootte enkele afbeelding (base64 / externe URL)32 MiB
Max. grootte enkele afbeelding (Files API file_id)64 MiB
Max. aantal afbeeldingen per verzoek600
Max. totale afbeeldingsgrootte per verzoek64 MiB zonder fileid afbeeldingen; tot 200 MiB inclusief fileid afbeeldingen
Max. afbeeldingsafmetingen8192 px per zijde; daalt naar 4096 px per zijde wanneer een verzoek 15 of meer afbeeldingen bevat

Voor opslag- en uploadquota van bestanden die via de Files API zijn geüpload, zie Files API: Limits.

Beperkingen

  • Afbeeldingen worden alleen ondersteund in berichten van de gebruiker (user): afbeeldingen in systeem- (system) of assistentberichten (assistant) resulteren in een 400-fout.
  • Alleen vision-modellen (deepseek-v4-flash-vision-exp) accepteren afbeeldingen; andere modellen retourneren een 400-fout ("This model does not support image").
  • Gebruikersteksten die het gereserveerde image placeholder token bevatten, worden geweigerd met een 400-fout.

Afbeeldingen gebruiken met de Anthropic API

Naast het bovenstaande OpenAI-compatibele eindpunt kunt u afbeeldingen verzenden via het Anthropic-compatibele /messages eindpunt (base_url = https://api.deepseek.com/anthropic).

Het verschil zit in de vorm van het image content block. In plaats van image_url gebruikt Anthropic een image block met een source-object waarvan het type base64, url of file is:

import anthropic

client = anthropic.Anthropic()  # ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic

message = client.messages.create(
    model="deepseek-v4-flash-vision-exp",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Wat staat er op deze afbeelding?"},
                {
                    "type": "image",
                    "source": {
                        "type": "base64",
                        "media_type": "image/jpeg",
                        "data": "<BASE64_DATA>",
                    },
                },
            ],
        }
    ],
)

print(message.content)

De drie source-varianten weerspiegelen de OpenAI-methoden:

source.typeEquivalent OpenAI-methodeOpmerkingen
base64Base64-gecodeerde afbeeldingVereist een media_type veld (image/jpeg, image/png, image/gif, of image/webp).
urlExterne afbeelding-URLMaximaal 8192 tekens.
fileFiles API file_idVereist de header anthropic-beta: files-api-2025-04-14.

Afbeeldingen gebruiken met de Responses API

Het deepseek-v4-flash-vision-exp-model accepteert afbeeldingen ook via de OpenAI-compatibele Responses API. Dezelfde drie invoermethoden (base64 data URL, externe http(s) URL, Files API fileid) en dezelfde limieten zijn van toepassing; alleen de vorm van het inhoudsdeel verschilt — afbeeldingen worden overgebracht in inputimage-delen, zowel in berichten van de gebruiker/ontwikkelaar als in de output van functioncalloutput / customtoolcall_output items:

response = client.responses.create(
    model="deepseek-v4-flash-vision-exp",
    input=[
        {
            "role": "user",
            "content": [
                {"type": "input_text", "text": "Wat staat er op deze afbeelding?"},
                {"type": "input_image", "image_url": "https://example.com/image.jpg", "detail": "low"},
            ],
        }
    ],
)

print(response.output_text)

Het inputimage-deel ondersteunt een detail-veld met dezelfde semantiek als eerder beschreven (low / high / original / auto). detail wordt genegeerd wanneer de afbeelding via fileid wordt verstrekt, en imageurl en fileid sluiten elkaar uit.

Voor veldsemantiek, beperkingen (afbeeldingen in systeem/assistentberichten worden geweigerd met een 400-fout) en afbeeldingen in tool-output, zie de Responses API guide.