DE ▾
API-Schlüssel erhalten

DeepSeek-API-SDK: OpenAI-SDK verwenden und Endpunkte wechseln

Du musst keinen speziellen Client für eine DeepSeek-API-SDK-Einrichtung installieren: DeepSeek-ähnliche APIs folgen dem OpenAI-Format, daher funktioniert das OpenAI-SDK mit einer anderen Base URL. Dieselbe Tatsache ermöglicht es dir, zu einem anderen Endpunkt zu wechseln, indem du drei Werte änderst.

Aktualisiert

Ein Connector-Block, der mehrere Server-Türme speist, veranschaulicht das Wechseln von Endpunkten mit einem SDK

Wichtige Punkte

  • Die OpenAI Python- und Node-SDKs funktionieren mit jedem OpenAI-kompatiblen Endpunkt; du änderst Base URL, Schlüssel und Modellname.
  • Behalte diese drei Werte in Umgebungsvariablen, damit das Wechseln des Endpunkts keine Codebearbeitung erfordert.
  • Das Wechseln ist sicher für einfaches Chat, Streaming und Function Calling, aber teste modellspezifische Funktionen, bevor du dich darauf verlässt.
  • Nutze für diesen Endpunkt https://api.deepseekapi.top/v1 und die Modell-ID uncensored.

Warum das OpenAI-SDK das DeepSeek-API-SDK ist

Wenn Leute nach einem DeepSeek-API-SDK suchen, erwarten sie ein Paket mit dem Namen des Anbieters. In der Praxis beschreibt die eigene Dokumentation von DeepSeek das Aufrufen der API über das OpenAI-SDK mit einer anderen Base URL, da die API dem OpenAI-Anfrage- und Antwortformat folgt. Prüfe deren aktuelle Docs für die genaue Base URL und Modellnamen; sie sind die Autorität für ihren Dienst.

Die Konsequenz ist nützlich. Jeder Code, der gegen die OpenAI-Client-Bibliothek geschrieben wurde, kann mit jedem Server kommunizieren, der dieselben Endpunkte implementiert, hier sind es POST /v1/chat/completions, POST /v1/responses und GET /v1/models. Der Wechsel zwischen Anbietern wird zu einer Konfigurationsänderung statt einer Neuschreibung. Der Rest dieses Artikels zeigt das Muster in Python, Node und curl, dann eine Struktur, die den Wechsel trivial macht.

Python-Einrichtung

Installiere das offizielle Paket und verweise es auf den Endpunkt:

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)

Hole dir einen Schlüssel auf der API-Schlüssel-Seite. Neue Nutzer können mit einem Klick $0,50 Testguthaben beanspruchen, ohne Kreditkarte. Der DeepSeek API Python-Artikel geht tiefer in diese Sprache ein, einschließlich Fehlerbehandlung.

Node.js-Einrichtung

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 ?? "");
}

Das Muster ist identisch: Basis-URL, Schlüssel, Modell. Streaming gibt Server-Sent Events zurück, und die Bibliothek wandelt sie in einen asynchronen Iterator um. Function Calling folgt demselben Schema wie andere OpenAI-kompatible APIs: Übergebe tools, lese gestreamte tool_calls und gib Ergebnisse als role: "tool"-Nachrichten zurück.

Den Endpunkt austauschbar machen

Codiere die drei Werte nicht hart. Lies sie aus der Umgebung ein und verpacke die Client-Erstellung in eine Funktion. Dann bedeutet der Wechsel von einem Endpunkt zum anderen, eine .env-Datei zu bearbeiten, nicht den Quellcode.

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

Jetzt benötigt ein anderer Anbieter nur drei Umgebungsvariablen. Die offiziellen SDKs lesen in einigen Versionen auch OPENAI_API_BASE und OPENAI_API_KEY, aber explizite Variablen sind klarer und vermeiden Überraschungen, wenn du mehrere Anbieter gleichzeitig ausführst.

Wenn du TypeScript oder eine andere Sprache verwendest, ist die Idee dieselbe: eine Factory-Funktion, drei Variablen, keine Anbieternamen verstreut im Code. Ein häufiger Fehler besteht darin, den Anbieternamen in Funktionsnamen, Log-Meldungen und Variablennamen einfließen zu lassen, was einen späteren Wechsel schwieriger macht, als er sein müsste. Benenne Dinge nach der Aufgabe (ask, summarise) statt nach dem Anbieter.

Behalte einen kleinen Test, der einen festen Prompt durch ask() sendet und auf eine nicht-leere Antwort prüft. Führe ihn nach jeder Endpunktsänderung aus; er fängt falsche URLs und Schlüssel in Sekunden ab.

Was bleibt gleich und was ändert sich beim Wechseln

PositionBleibt gleichKann sich ändern
Anfrage-StrukturNachrichten, Rollen, Temperatur, top_p, StoppOptionale Parameter, die ein Anbieter nicht unterstützt
StreamingSSE mit Daten-ChunksWo die Nutzung im Stream erscheint
Function CallingTools, tool_choice, tool_callsWie gut das Modell einem Schema folgt
ModellnameErforderliches FeldDer Wert selbst: hier ist er uncensored
KontextfensterPrompt plus VervollständigungGröße: 100.000 Token hier
VerhaltenChat-FormatStil, Stärken, Ablehnungsverhalten

Die letzte Zeile ist die, die Leute überrumpelt. Ein Endpunkt ist auf Protokollebene kompatibel, nicht auf Verhaltensebene. Zwei Anbieter können identische Anfragen annehmen und sehr unterschiedliche Antworten geben. Das Modell hier ist ein einzelnes Open-Weight-Modell eines unabhängigen Anbieters, das darauf abgestimmt ist, ohne Inhaltsablehnungen für die rechtmäßige Nutzung durch Erwachsene zu antworten, und es ist nicht die offizielle API von DeepSeek oder einem anderen Labor. Teste Prompts neu, die du für ein anderes Modell abgestimmt hast.

Funktionen, die dieser Endpunkt hat und nicht hat

  • Unterstützt: Chat-Vervollständigungen, das Responses-Format, Modellauflistung, Streaming, Tool Calling, JSON-Modus (response_format mit json_object) und Durchreichen von Temperatur, top_p, Stopp, Seed und den Strafen.
  • Nicht angeboten: Bild-, Audio- oder Video-Generierung, Embeddings, Fine-Tuning.
  • Limits: ein 100.000-Token-Fenster, eine maximale Body-Größe von 8 MB, 8 parallele Anfragen und 300 pro Minute bei einem Vollschlüssel (2 und 60 bei einem Testschlüssel).
  • Fehler: HTTP 429 mit dem Code rate_limited oder concurrency und einem Retry-After: 5-Header bei vorübergehender Überlastung.

Wenn dein Code einen Embeddings-Endpunkt aufruft, benötigst du für diesen Teil einen anderen Anbieter und kannst Chat hier behalten. Die Aufteilung nach Aufgabe ist ein häufiger Grund für das oben genannte Umgebungsvariablen-Muster.

Eine Migrations-Checkliste

Wenn du in einem bestehenden Projekt einen Endpunkt durch einen anderen ersetzt, arbeite eine kurze Liste durch, statt alles auf einmal zu ändern.

  1. Den Endpunkt beweisen. Sende eine Anfrage mit curl und bestätige, dass du Text zurückbekommst. Rufe GET /v1/models auf und prüfe, dass die ID uncensored aufgelistet ist.
  2. Ändere die drei Werte. Base URL, Schlüssel, Modellname, nichts anderes. Rühre noch nicht an Prompts.
  3. Führe deine bestehenden Tests aus. Wenn du Prompt-Regressionstests hast, führe sie aus und notiere, welche fehlschlagen. Ausfälle sind meist verhaltensbedingt, wie ein anderes Ausgabeformat, keine Protokollfehler.
  4. Parameter prüfen. Optionen entfernen, die der Endpunkt nicht benötigt. Behalte temperature, top_p, stop und seed, wenn du sie nutzt.
  5. Teste Streaming und Tools separat. Streaming-Bugs verstecken sich oft in Client-Code, der ein bestimmtes Chunk-Layout annimmt. Tool-Aufrufe benötigen ein Schema, das das Modell gut befolgt, also teste mit deinen echten Funktionen.
  6. Kosten und Latenz im echten Traffic messen. Vergleiche einen Tag an Anfragen, nicht nur einen Prompt.

Mache dies in einem Branch oder mit einem Feature-Flag, das einen kleinen Teil des Traffics zum neuen Endpunkt leitet. Da der Client-Code geteilt ist, ist das Zurückrollen eine Änderung der Umgebungsvariable.

Behandle Wiederholungen und lies die Nutzung

Die SDKs wiederholen einige Fehler standardmäßig, aber du solltest 429 trotzdem selbst behandeln, da Concurrency-Limits in der Produktion real sind. Fange die Ratenlimit-Ausnahme ab, warte die Anzahl der Sekunden in Retry-After (5 bei Überlastung) und wiederhole die Anfrage einige Male. Fehlgeschlagene Anfragen werden nicht berechnet, daher sind Wiederholungen sicher für dein Guthaben.

Logge usage.prompt_tokens und usage.completion_tokens bei jedem Aufruf. Die Preise liegen bei $0,15 pro 1M Input-Token und $0,50 pro 1M Output-Token, also kostet ein Aufruf mit 2.000 Input- und 600 Output-Token 2.000 × $0,15 / 1M + 600 × $0,50 / 1M = $0,0003 + $0,0003 = $0,0006. Die Antwort-Header enthalten auch X-Balance-USD für das verbleibende Guthaben. Sieh dir die Preisseite für Aufladungen und Boni an und die Dokumentation für die vollständige Parameterliste.

Editoren und andere Tools

Die drei Werte werden auf jedes Tool mit einer OpenAI-kompatiblen Anbietereinstellung übertragen. Der Artikel über die Verwendung einer DeepSeek-ähnlichen API in Cursor führt durch einen solchen Editor. In jedem Tool sind die Felder leicht unterschiedlich beschriftet, aber du gibst immer die Base URL ein, die mit /v1 endet, den Schlüssel und den Modellnamen.

Fragen und Antworten

Gibt es ein offizielles DeepSeek SDK, das ich installieren muss?

Du benötst kein herstellerspezifisches Paket. DeepSeek dokumentiert die Nutzung des OpenAI SDK mit einer anderen Base URL; prüfe deren Dokumentation für aktuelle Details.

Welche drei Werte muss ich ändern, um diesen Endpunkt zu nutzen?

Die Base URL (https://api.deepseekapi.top/v1), dein API-Schlüssel und die Modell-ID uncensored.

Wird mein bestehender OpenAI-Code unverändert funktionieren?

Chat, Streaming, JSON-Modus und Tool Calling folgen demselben Format, also größtenteils ja. Embeddings, Bilder und Audio werden nicht angeboten, und Antworten unterscheiden sich, weil das Modell ein anderes ist.

Sendet das SDK den Schlüssel korrekt?

Ja, es sendet Authorization: Bearer mit deinem Schlüssel automatisch.

Dein Schlüssel ist nur ein Formular entfernt

Erstelle ein Konto, kopiere den Schlüssel, ändere die Basis-URL. Das ist die gesamte Einrichtung.

API-Schlüssel erhalten