NL ▾
API-sleutel aanvragen

DeepSeek API SDK: gebruik de OpenAI SDK en wissel endpoints

Er is geen speciale client die je moet installeren voor een DeepSeek API SDK-setup: DeepSeek-style APIs volgen de OpenAI-indeling, dus de OpenAI SDK werkt met een andere base URL. Datzelfde feit stelt je in staat om naar een ander endpoint te schakelen door drie waarden aan te passen.

Bijgewerkt

Een connectorblok dat meerdere servertorens voert, ter illustratie van het wisselen van endpoints met één SDK

Belangrijkste punten

  • De OpenAI Python- en Node-SDKs werken met elk OpenAI-compatible endpoint; je past base URL, sleutel en modelnaam aan.
  • Bewaar die drie waarden in omgevingsvariabelen, zodat het wisselen van endpoints geen code-aanpassing vereist.
  • Wisselen is veilig voor gewone chat, streaming en tool calls, maar test model-specifieke functies voordat je erop vertrouwt.
  • Gebruik voor dit endpoint https://api.deepseekapi.top/v1 en de model id uncensored.

Waarom de OpenAI SDK de DeepSeek API SDK is

Wanneer mensen zoeken naar een DeepSeek API SDK, verwachten ze een pakket met de naam van de leverancier erop. In de praktijk beschrijft de eigen documentatie van DeepSeek het aanroepen van de API via de OpenAI SDK met een andere basis-URL, omdat de API de OpenAI-request- en response-indeling volgt. Controleer hun huidige documentatie voor de exacte basis-URL en modelnamen; zij zijn de autoriteit op hun dienst.

Het gevolg is nuttig. Elke code die is geschreven tegen de OpenAI clientbibliotheek kan praten met elke server die dezelfde endpoints implementeert, hier zijn dat POST /v1/chat/completions, POST /v1/responses en GET /v1/models. Verhuizen tussen providers wordt een configuratieaanpassing in plaats van een herschrijving. De rest van dit artikel toont het patroon in Python, Node en curl, gevolgd door een structuur die het wisselen triviaal maakt.

Python-setup

Installeer de officiële package en wijs deze naar het endpoint:

pip install openai
from openai import OpenAI

client = OpenAI(
    base_url="https://api.deepseekapi.top/v1",
    api_key="YOUR_KEY",
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "You are a concise technical assistant."},
        {"role": "user", "content": "Explain idempotency in two sentences."},
    ],
)
print(resp.choices[0].message.content)
print(resp.usage)

Haal een sleutel op op de API key-pagina. Nieuwe gebruikers kunnen met één klik $0,50 aan proeftegoed claimen, zonder kaart. Het artikel DeepSeek API Python gaat dieper in op deze taal, inclusief foutafhandeling.

Node.js-setup

npm install openai
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.deepseekapi.top/v1",
  apiKey: process.env.API_KEY,
});

const stream = await client.chat.completions.create({
  model: "uncensored",
  stream: true,
  messages: [{ role: "user", content: "List four uses of a message queue." }],
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

Het patroon is identiek: base URL, sleutel, model. Streaming retourneert Server-Sent Events, en de bibliotheek zet deze om in een async iterator. Tool calling volgt hetzelfde schema als andere OpenAI-compatible APIs: geef tools door, lees gestreamde tool_calls en retourneer resultaten als role: "tool" berichten.

Maak het endpoint wisselbaar

Codificeer de drie waarden niet hard. Lees ze uit de omgeving en verpak de clientinitialisatie in één functie. Dan betekent verplaatsen van het ene endpoint naar het andere alleen het aanpassen van een .env-bestand, niet van broncode.

import os
from openai import OpenAI

def make_client():
    return OpenAI(
        base_url=os.environ.get("LLM_BASE_URL", "https://api.deepseekapi.top/v1"),
        api_key=os.environ["LLM_API_KEY"],
    )

MODEL = os.environ.get("LLM_MODEL", "uncensored")

def ask(prompt: str) -> str:
    r = make_client().chat.completions.create(
        model=MODEL,
        messages=[{"role": "user", "content": prompt}],
        temperature=0.7,
    )
    return r.choices[0].message.content

Nu hoeven er voor een andere provider slechts drie omgevingsvariabelen te worden ingesteld. De officiële SDKs lezen ook OPENAI_API_BASE en OPENAI_API_KEY in sommige versies, maar expliciete variabelen zijn duidelijker en voorkomen verrassingen als je meerdere providers tegelijk gebruikt.

Als je TypeScript of een andere taal gebruikt, is het idee hetzelfde: één factory-functie, drie variabelen, geen leveranciersnamen verspreid door de codebase. Een veelgemaakte fout is om de naam van de leverancier te laten doorsijpelen in functienamen, logberichten en variabelen, wat een latere wissel moeilijker maakt dan nodig is. Geef dingen een naam op basis van de taak (ask, summarise) in plaats van de provider.

Houd een kleine test bij die één vaste prompt via ask() verstuurt en controleert op een niet-leeg antwoord. Voer het uit na elke endpoint-aanpassing; het vangt verkeerde URLs en sleutels binnen seconden.

Wat blijft hetzelfde en wat verandert als je wisselt

ArtikelBlijft hetzelfdeKan veranderen
Verzoekvormberichten, rollen, temperature, top_p, stopOptionele parameters die een provider niet ondersteunt
StreamingSSE met datafragmentenWaar verbruik verschijnt in de stream
Function callingtools, tool_choice, tool_callsHoe goed het model een schema volgt
ModelnaamVereist veldDe waarde zelf: hier is het uncensored
ContextvensterPrompt plus voltooiingGrootte: 100.000 tokens hier
GedragChatformaatStijl, sterke punten, weigergedrag

De laatste regel is degene die mensen voor verrassingen stelt. Een endpoint is compatibel op protocolniveau, niet op gedragsniveau. Twee providers kunnen identieke verzoeken accepteren en heel verschillende antwoorden geven. Het model hier is een enkel open-weight model van een onafhankelijke provider, afgestemd op het geven van antwoorden zonder weigeringen om inhoud te genereren voor wettelijk volwassen gebruik, en het is niet de officiële API van DeepSeek of een ander lab. Test prompts opnieuw die je hebt afgestemd op een ander model.

Welke functies dit endpoint wel en niet heeft

  • Ondersteund: chat completions, het Responses-formaat, model listing, streaming, tool calling, JSON-modus (response_format met json_object), en passthrough van temperature, top_p, stop, seed en de penalties.
  • Niet aangeboden: image, audio of video generatie, embeddings, fine-tuning.
  • Limieten: een 100.000-token venster, een maximum body van 8 MB, 8 gelijktijdige requests en 300 per minuut op een volledige sleutel (2 en 60 op een trial sleutel).
  • Fouten: HTTP 429 met de code rate_limited of concurrency, en een Retry-After: 5 header bij tijdelijke overload.

Als je code een embeddings endpoint aanroept, heb je een andere provider nodig voor dat deel en kun je chat hier houden. Opsplitsen per taak is een veelvoorkomende reden voor het environment-variable patroon hierboven.

Een migratielijst

Als je in een bestaand project het ene endpoint voor het andere vervangt, werk dan een korte lijst af in plaats van alles in één keer te veranderen.

  1. Bewijs het endpoint. Stuur één verzoek met curl en bevestig dat je tekst terugkrijgt. Roep GET /v1/models aan en controleer of de id uncensored wordt vermeld.
  2. Pas de drie waarden aan. Base URL, sleutel, modelnaam, niets anders. Raak prompts nog niet aan.
  3. Voer je bestaande tests uit. Als je prompt regression tests hebt, voer ze dan uit en noteer welke falen. Fouten zijn meestal gedrag, zoals een andere output-indeling, geen protocolfouten.
  4. Controleer parameters. Verwijder opties die de endpoint niet nodig heeft. Houd temperature, top_p, stop en seed aan als je ze gebruikt.
  5. Test streaming en tools apart. Streaming-bugs zitten vaak in clientcode die een specifieke chunk-indeling veronderstelt. Tool calls vereisen een schema dat het model goed volgt, dus test met je echte functies.
  6. Meet kosten en latentie op echt verkeer. Vergelijk een dag aan verzoeken, niet één prompt.

Doe dit in een branch of met een feature flag die een klein deel van het verkeer naar de nieuwe endpoint routeert. Omdat de clientcode gedeeld is, is terugrollen het wijzigen van een omgevingsvariabele.

Behandel retries en lees gebruikgegevens

De SDK's proberen sommige fouten standaard opnieuw, maar je moet 429-fouten toch zelf afhandelen, omdat concurrency limits in productie echt zijn. Vang de rate-limit uitzondering op, wacht het aantal seconden in Retry-After (5 bij overbelasting), en probeer het een paar keer opnieuw. Mislukte verzoeken worden niet in rekening gebracht, dus retries zijn veilig voor je tegoed.

Log usage.prompt_tokens en usage.completion_tokens bij elke call. Prijzen zijn $0,15 per 1M input tokens en $0,50 per 1M output tokens, dus een call met 2.000 input en 600 output tokens kost 2.000 × $0,15 / 1M + 600 × $0,50 / 1M = $0,0003 + $0,0003 = $0,0006. De response headers bevatten ook X-Balance-USD voor het resterende tegoed. Zie de prijzenpagina voor top-ups en bonussen, en de documentatie voor de volledige parameterlijst.

Editors en andere tools

De drie waarden worden overgenomen door elke tool met een OpenAI-compatible provider-instelling. Het artikel over een DeepSeek-achtige API gebruiken in Cursor loopt dit soort editor door. In elke tool zijn de velden iets anders gelabeld, maar je voert altijd de base URL in die eindigt op /v1, de sleutel en de modelnaam.

Vragen en antwoorden

Is er een officiële DeepSeek SDK die ik moet installeren?

Je hebt geen vendor-specifieke package nodig. DeepSeek documenteert het gebruik van de OpenAI SDK met een andere base URL; controleer hun docs voor actuele details.

Welke drie waarden moet ik wijzigen om deze endpoint te gebruiken?

De base URL (https://api.deepseekapi.top/v1), je API-sleutel en de model id uncensored.

Werkt mijn bestaande OpenAI-code ongewijzigd?

Chat, streaming, JSON-modus en tool calling volgen dezelfde indeling, dus meestal wel. Embeddings, afbeeldingen en audio worden niet aangeboden, en antwoorden verschillen omdat het model verschilt.

Stuurt de SDK de sleutel correct?

Ja, het stuurt automatisch Authorization: Bearer met je sleutel.

Je sleutel is nog maar één formulier verwijderd

Maak een account aan, kopieer de sleutel, pas de base URL aan. Dat is de hele setup.

API-sleutel aanvragen