Anleitung zur DeepSeek-API-Integration: OpenAI-kompatible Anfragen über ECAIX
Anleitung zur DeepSeek-API-Integration: OpenAI-kompatible Anfragen über ECAIX
Diese Anleitung zeigt, wie Sie ein DeepSeek-Modell-ID über ECAIX mit einer OpenAI-kompatiblen API testen. Sie umfasst die kleinste funktionierende Anfrage, Beispiele für Python und cURL, Modell-ID-Verifizierung, Streaming, strukturierte Ausgabe, Tools und einen Diagnosepfad für häufige Fehler.
Die Anleitung beschreibt den Zugang zu ECAIX als Gateway für ein Modell-ID, das im aktuellen ECAIX-Katalog verfügbar ist. Sie behauptet nicht, dass ECAIX der offizielle DeepSeek-API-Endpunkt ist oder dass alle DeepSeek-Features über alle Gateway-Routen verfügbar sind. Prüfen Sie die Live-Modellseite und die Dokumentation des Anbieters vor dem Einsatz in der Produktion.
Was diese Anleitung prüft
Die Beispiele verwenden den ECAIX-OpenAI-kompatiblen Pfad und eine Modell-ID, die aktuell im öffentlichen Katalog bei Veröffentlichung sichtbar ist. Verfügbarkeit, Routing, Grenzen, Preise und unterstützte Funktionen können sich ändern. Behandeln Sie den Katalog und die API-Dokumentation als aktuelle Quelle der Wahrheit.
Schnellstart
Führen Sie diese Schritte aus, wenn Sie bereits eine OpenAI-SDK-Anwendung haben:
- Öffnen Sie die Seite für DeepSeek v4.1 Flash-Modell und bestätigen Sie, dass die ID verfügbar ist.
- Erstellen Sie eine ECAIX-API-Schlüssel.
- Setzen Sie die OpenAI-kompatible Basise URL auf
https://ecaix.com/api/ai/v1. - Halten Sie die SDK und die Anwendungskode wo möglich unverändert.
- Führen Sie die minimale Anfrage aus.
- Fügen Sie Streaming, JSON-Ausgabe oder Tools nur nach erfolgreicher Bearbeitung der Basisanfrage hinzu.
Endpunkt und Modell-ID
Für OpenAI-kompatible Clients verwenden Sie:
Base URL: https://ecaix.com/api/ai/v1
Model: deepseek-v4.1-flash
Die Modell-ID ist keine dauerhafte Garantie in einem Blogpost. Prüfen Sie sie auf der Live-Modellliste vor jeder neuen Integration oder Bereitstellung. Falls Sie ein anderes DeepSeek-Modellmitglied benötigen, kopieren Sie die genaue ID aus der Modelldetailsseite statt einer Vermutung über ein Suffix.
Der Endpunkt-Format spielt ebenfalls eine Rolle. Die SDK sollte die Basispfad-Endung /v1 erhalten; der Client fügt /chat/completions oder einen anderen Operationspfad hinzu. Fügen Sie nicht /chat/completions zur Basise URL hinzu, wenn die SDK es bereits hinzufügt.
Python mit der OpenAI SDK
Installieren oder aktualisieren Sie die OpenAI-Python-SDK in Ihrem virtuellen Umgebungsbereich:
python -m pip install --upgrade openai
Dann verwenden Sie die Basise URL und den API-Schlüssel:
const client = new OpenAI({
apiKey: process.env.ECAIX_API_KEY,
baseURL: "https://ecaix.com/api/ai/v1",
});
const response = await client.chat.completions.create({
model: "deepseek-v4.1-flash",
messages: [
{ role: "user", content: "Return one short sentence about API testing." },
],
max_tokens: 128,
});
console.log(response.choices[0].message.content);
Verwenden Sie Server-Code für die API-Anfrage. Eine Browser-Anwendung sollte auf Ihre eigene Backend-Logik verweisen, statt den ECAIX-Schlüssel in Client-Seite JavaScript preiszugeben.
Diagnose-Anfrage mit cURL
Wenn die SDK scheitert, entfernen Sie die SDK aus dem Prozess und testen Sie den Endpunkt direkt. Speichern Sie die Kopfzeilen und den Körper separat, um zu unterscheiden, ob ein HTTP-Problem oder ein Formatierungsproblem vorliegt.
curl -sS -D /tmp/ecaix-deepseek-headers.txt \
-o /tmp/ecaix-deepseek-response.json \
-w '\nHTTP %{http_code}\n' \
"https://ecaix.com/api/ai/v1/chat/completions" \
-H "Authorization: Bearer ${ECAIX_API_KEY}" \
-H "content-type: application/json" \
-d '{
"model": "deepseek-v4.1-flash",
"messages": [
{"role": "user", "content": "Reply with one short sentence."}
],
"max_tokens": 128
}'
Passen Sie die gespeicherten Kopfzeilen oder Antworten nicht in ein öffentliches Ticket ein, ohne API-Schlüssel, Anfrage-ID, Prompts, Repository-Pathen und Kundendaten zu entfernen.
Diagnose der Antwort
Verwenden Sie diese Reihenfolge:
- HTTP-Status: Bestimmen Sie, ob die Anfrage einen gültigen Endpunkt erreichte.
- Antwortkörper: Lesen Sie den Fehlercode des Anbieters oder Gateways.
- Modell-ID: Kopieren Sie die genaue ID aus dem aktuellen Modellkatalog.
- Authentifizierung: Prüfen Sie den Schlüsselkopf, die Kontoverwaltung und die Berechtigungen.
- Anfragestruktur: Reduzieren Sie den Körper auf
model,messagesund einen kleinen Ausgabegrenzen. - Funktionsfelder: Fügen Sie Streaming, JSON oder Tools einzeln hinzu.
- SDK-Verhalten: Vergleichen Sie die SDK-Anfrage mit der direkten cURL-Anfrage.
Das verhindert, dass ein Problem mit der Client-Bibliothek mit Modell-Routing oder Konto-Berechtigungen verwechselt wird.
Streaming-Antworten
Wenn Ihre Anwendung eine schrittweise Ausgabe benötigt, fügen Sie Streaming erst nach erfolgreicher Bearbeitung einer normalen Anfrage hinzu:
stream = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[{"role": "user", "content": "Summarize API retries in three points."}],
stream=True,
max_tokens=256,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
Das genaue Verhalten der Ereignisse hängt vom Endpunkt und der SDK ab. Prüfen Sie, wie Ihr Rahmenwerk eine leere Delta, ein finales Nutzungsereignis, eine Unterbrechung der Verbindung und ein [DONE]-ähnliches Beendigungssignal verarbeitet. Führen Sie keine Streaming-Implementierung vor der Produktion aus, bis Sie Unterbrechungen und Wiederholungen getestet haben.
Strukturierte Ausgabe und JSON
Wenn Sie maschinenlesbare Ausgabe benötigen, beginnen Sie mit einer normalen Anfrage und fügen dann die kleinste unterstützte strukturierte-Ausgabemöglichkeit hinzu, die sowohl vom Endpunkt als auch vom Modell unterstützt wird. Validieren Sie die zurückgegebenen Inhalte mit einem echten JSON-Parser. Ein Prompt, das „JSON zurückgeben“ sagt, ist nicht dasselbe wie eine schemabedingte Antwort.
import json
response = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[
{
"role": "user",
"content": "Return a JSON object with keys title and priority."
}
],
response_format={"type": "json_object"},
max_tokens=128,
)
payload = json.loads(response.choices[0].message.content)
print(payload["title"])
Ob response_format akzeptiert wird, kann von Modell und Route abhängen. Wenn der Endpunkt eine UnsupportedParameter-Fehler zurückgibt, entfernen Sie das Feld und prüfen Sie die Route-Dokumentation, bevor Sie einen anderen Formatversuch versuchen.
Funktionaufrufe und Tools
Aufruf von Tools erfordert einen separaten Test von der Textgenerierung. Beginnen Sie mit einer harmlosen Funktion und prüfen Sie die zurückgegebenen Namen und Argumente, bevor Sie etwas ausführen.
tools = [
{
"type": "function",
"function": {
"name": "get_demo_status",
"description": "Return a fixed status for a local compatibility test.",
"parameters": {
"type": "object",
"properties": {},
"additionalProperties": False,
},
},
}
]
response = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[{"role": "user", "content": "Check the demo status."}],
tools=tools,
tool_choice="auto",
max_tokens=128,
)
print(response.choices[0].message.tool_calls)
Ein Modell kann eine gültige Textantwort zurückgeben, während der Tool-Aufruf scheitert, aufgrund von Schema-Umwandlung, nicht unterstützten Parametern oder spezifischem Verhalten des Clients. Führen Sie niemals die zurückgegebenen Tool-Argumente gegen ein Produktionssystem aus, bevor Sie das Schema validiert und Autorisierungsprüfungen hinzugefügt haben.
OpenAI-kompatible und Anthropic-kompatible Pfade
ECAIX bietet unterschiedliche Kompatibilitätsoberflächen für verschiedene Clients:
| Client oder Workflow | Dokumentationspfad | Was zu prüfen ist |
|---|---|---|
| OpenAI-Python/Node SDK | /api/ai/v1 | Chat Completions, Antworten, Streaming, Tools |
| Anthropic-Client | /api/ai/v1/anthropic | Felder für Nachrichten, Kopfzeilen, Inhaltsblöcke |
| Claude Code-Drittanbieter-Workflow | /api/ai/v1/anthropic | Anbieter-spezifisches Verhalten; nicht offizielle Anthropic-Unterstützung |
Lesen Sie die Chat Completions-Dokumentation, Antworten-Dokumentation und Anthropic Nachrichten-Dokumentation vor dem Auswählen eines Pfads. Die gleiche Modell-ID kann nicht identische Felder oder Verhalten auf jeder Kompatibilitätsoberfläche bieten.
Aktuelle Modelldetails
Verwenden Sie die Live-Seiten für Prüfungen der Fähigkeiten und Verfügbarkeiten:
Diese Seiten sind zuverlässiger als ein statischer Artikel für aktuelle Modell-IDs, Kontextinformationen und Preislinks.
Häufige Fehler
| Status oder Symptom | Wahrscheinliche Ursache | Diagnose-Aktion |
|---|---|---|
401 | Fehlender oder ungültiger Bearer-Token | Prüfen Sie Authorization, Umgebungsvariable und Schlüsselstatus |
403 | Schlüssel oder Konto fehlt Berechtigungen | Prüfen Sie die Kontozugriff und Modellverfügbarkeit |
404 | Falsche Basise URL oder Pfadsuffixe | Verwenden Sie /api/ai/v1/chat/completions für die direkte cURL-Testanfrage |
400 | Ungültiger Körper oder nicht unterstützte Felder | Entfernen Sie optionale Felder und wiederholen Sie die minimale Anfrage |
429 | Rate oder Quoten-Grenze | Speichern Sie die Antwort-Kopfzeilen, verlangsamen Sie und prüfen Sie die Konto-Grenzen |
5xx | Gateway- oder Upstream-Fehler | Speichern Sie die Anfragezeit und Antwort-ID; wiederholen Sie gemäß Ihrer Politik |
| Modell nicht gefunden | Tippfehler, entferntes Modell oder Routing-Mismatch | Kopieren Sie die genaue Modell-ID aus /models |
| Text funktioniert, Tools scheitern | Schema-Mismatch oder Modellfähigkeitslimit | Testen Sie eine harmlose Funktion und prüfen Sie die zurückgegebenen Argumente |
| SDK funktioniert anders als cURL | SDK-Standard oder Pfadkonstruktion | Drucken Sie die SDK-Anfrage-Konfiguration und vergleichen Sie die Pfade |
Sicherheits- und Produktions-Checkliste
Bevor Sie über einen Testprojekt hinausgehen, bestätigen Sie:
- API-Schlüssel werden serverseitig gespeichert und können gedreht werden.
- Prompts und Antworten enthalten keine ungenehmigten Geheimnisse oder Kundendaten.
- Sie verstehen, ob der Gateway Anfragen protokolliert und wie lange die Protokolle gespeichert werden.
- Modellverfügbarkeit und Preise werden von den Live-Seiten geprüft.
- Zeitlimits, Wiederholungen, Idempotenz und Quotengrenzen werden von Ihrer Anwendung verwaltet.
- Streaming-Unterbrechungen erzeugen keine doppelten Jobs.
- Tool-Aufrufe haben Listen, Validierung, Autorisierung und Protokollierung.
- An
## **Präproduktionsvalidierung und Betriebssicherheit**
Bevor die Integration des DeepSeek-APIs in die Produktionsumgebung übernommen wird, empfiehlt sich eine sorgfältige **Präproduktionsvalidierung**, um potenzielle Risiken zu identifizieren und die Zuverlässigkeit der API-Anbindung zu gewährleisten. Hier sind zentrale Aspekte, die bei der Vorbereitung und dem Betrieb zu beachten sind:
### **API-Schlüsselmanagement und Sicherheitskonzepte**
Die sichere Handhabung von API-Schlüsseln ist essenziell, um Missbrauch zu verhindern. Verwenden Sie **umgehende, zeitlich begrenzte Schlüssel** (z. B. über Short-Lived Tokens) oder integrieren Sie die Authentifizierung in einer **dedizierten API-Gateway-Lösung**, die zusätzlich zu den Standard-Authentifizierungsmechanismen (z. B. OAuth 2.0) eine **Token-Rotation** unterstützt. Vermeiden Sie die Speicherung sensibler Schlüssel in Konfigurationsdateien oder Versionierungssystemen. Stattdessen sollten sie in **geheimen Umgebungsvariablen** oder einer **dedizierten Secrets-Management-Plattform** (z. B. AWS Secrets Manager, HashiCorp Vault) abgelegt werden.
### **Modell-ID-Checks und Konsistenzprüfungen**
Vor der Freigabe des API-Einsatzes in der Produktion ist es ratsam, die korrekte Zuordnung der gewünschten **Model-ID** zu überprüfen. Nutzen Sie die **DeepSeek-API-Endpunkte für Modellinformationen** (z. B. `/models/{model_id}`), um sicherzustellen, dass die gewünschte Version des Modells tatsächlich verfügbar ist und die gewünschten Parameter (z. B. Token-Limit, Temperatur) unterstützt. Falls sich zwischen der Entwicklung und der Produktion die **Model-ID oder die API-Spezifikationen** ändern, sollten diese Änderungen **automatisch erfasst und dokumentiert** werden. In solchen Fällen empfiehlt sich eine **manuelle oder automatisierte Rückprüfung** der API-Dokumentation vor dem Deployment.
### **Logging und Debugging ohne Sensible Daten**
Die Erstellung eines **sicheren Logging-Konzepts** ist entscheidend, um die API-Anbindung zu überwachen, ohne sensible Informationen wie API-Schlüssel oder Modell-IDs zu exponieren. Nutzen Sie **maskierte Logs**, bei denen persönliche Daten (z. B. `Authorization`-Header-Werte) durch Platzhalter ersetzt werden. Wählen Sie eine **Log-Level-Strategie**, die kritische Ereignisse (z. B. Fehler, Zeitüberschreitungen) detailliert dokumentiert, während Routineaktivitäten (z. B. erfolgreiche Requests) nur mit minimalen Metadaten (z. B. Request-ID, Endpunkt, Antwortstatus) protokolliert werden.
Falls die API **Streaming-Anfragen** unterstützt, sollten auch **Streaming-Disconnects** (z. B. durch Netzwerkprobleme oder Zeitlimits) im Logging berücksichtigt werden. Hier ist es sinnvoll, die **Streaming-Frame-Informationen** (z. B. Token-Flow, Fehlercodes) zu tracken, um später die Ursache von Unterbrechungen zu analysieren.
### **Retry-Mechanismen und Idempotenz**
Die API sollte **idempotente Requests** unterstützen, um wiederholte Anfragen (z. B. bei temporären Netzwerkproblemen) zu vermeiden. Falls nicht, implementieren Sie **externe Retry-Logik** mit einer **exponentiellen Backoff-Strategie**, um die Belastung der API zu minimieren. Achten Sie darauf, dass Retry-Anfragen **nicht unlimitiert** wiederholt werden, um die Stabilität der API nicht zu gefährden. Dokumentieren Sie die **Maximalanzahl von Retries** und die **Timeout-Werte** für kritische Endpunkte.
### **Autorisierungstools und Zugriffskontrollen**
Die Integration sollte mit **Tool-Autorisierung** (z. B. über IAM-Rollen, Service-Accounts oder API-Gateways) kombiniert werden, um den Zugriff auf die DeepSeek-API zu kontrollieren. Falls die API in einer **Cloud-Umgebung** betrieben wird, sollten die zugrundeliegenden Ressourcen (z. B. Compute-Einheiten, Speicher) entsprechend dimensioniert und mit **Quoten** (z. B. Request-Raten) begrenzt werden, um Missbrauch zu verhindern.