API-Anfragen für DeepSeek V4.1 mit Python konvertieren
DeepSeek-V4 Team · 14. September 2026 · 6 min read

Ein API-kompatibler Modelldienst hat eine unscheinbare, aber kritische Aufgabe: mehrere öffentliche Anfrageformate in den exakten Prompt umwandeln, den ein Modell erwartet, und dann generierte Token zurück in die vom Client erwartete Antwortstruktur transformieren. deepseek-recipe kapselt diese Übersetzungsschicht für DeepSeek V4 und V4.1.
Es führt das Modell nicht aus. Es öffnet keinen HTTP-Port, führt keine Tools aus, durchsucht das Web und speichert keine Konversationen. Diese Grenze sichtbar zu halten, spart Zeit in diesem Tutorial: Die Ausgabe ist ein gerenderter Prompt, den ein Inferenz-Backend konsumieren könnte, keine Modellantwort.
Installation der Python-Bindung
Das offizielle Paket erfordert Python 3.10 oder neuer:
python3 -m pip install deepseek-recipeInstallieren Sie es für ein reproduzierbares Projekt innerhalb einer virtuellen Umgebung und fixieren Sie die Version nach dem ersten verifizierten Lauf. Das Repository wurde im September 2026 neu veröffentlicht und seine API kann sich noch weiterentwickeln. Dokumentieren Sie sowohl die Version des Python-Pakets als auch die von Ihrer Anwendung ausgewählte V4/V4.1-Codierung.
Das Paket wird von einer Familie von Rust-Crates unterstützt. Python-Benutzer müssen ihren Dienst nicht in Rust neu schreiben; die Bindung stellt die für eine normale Integration erforderlichen Konvertierungs- und Codierungstypen bereit.
Rendern einer minimalen V4.1-Konversation
Erstellen Sie ein kleines Skript basierend auf dem offiziellen Beispiel:
from deepseek_recipe import (
ChatCompletionRequest,
ConversionOptions,
DeepseekV41Encoding,
)
request = ChatCompletionRequest({
"model": "deepseek-flash",
"messages": [
{"role": "system", "content": "Answer with one short paragraph."},
{"role": "user", "content": "Explain sparse attention to a Python developer."},
],
"temperature": 0.2,
})
converted = request.convert(ConversionOptions())
encoding = DeepseekV41Encoding()
rendered = encoding.render_conversation(converted.conversation)
print(rendered.prompt)Es gibt zwei absichtliche Stufen. request.convert(...) mappt die Chat-Completions-Nutzlast in die gemeinsame Conversations-Repräsentation der Bibliothek. render_conversation(...) wendet die V4.1-Prompt-Codierung an. Sie getrennt zu halten, ermöglicht es einem API-Dienst, verschiedene externe Protokolle zu normalisieren, bevor er sich auf ein modellspezifisches Token-Layout festlegt.
Die Modellzeichenfolge in der Anfrage ist Teil der clientseitigen Nutzlast; das ausgewählte Codierungsobjekt steuert, wie die normalisierte Konversation gerendert wird. Schließen Sie nicht, dass ein beliebiger Modellname automatisch Gewichte herunterlädt oder auswählt. Ihr umgebender Dienst muss das angeforderte Modell validieren und den Prompt an ein geeignetes Backend weiterleiten.
Inspektion vor Verbindung zur Inferenz
Geben Sie den Prompt nur in einer lokalen Entwicklungsumgebung aus, niemals in Produktionslogs, die Benutzerdaten enthalten. Bestätigen Sie, dass System- und Benutzernachrichten in der beabsichtigten Reihenfolge dargestellt werden. Fügen Sie Unicode, leere Inhalte und mehrzeilige Beispiele hinzu. Wenn Ihr Dienst Bilder oder Tools unterstützt, erstellen Sie separate Fixtures für jeden Fall, anstatt anzunehmen, dass der nur-Text-Fall Kompatibilität beweist.
Dies ist auch der richtige Punkt für goldene Tests. Speichern Sie einen kleinen Satz nicht sensibler Eingabenutzlasten und genehmigter struktureller Erwartungen. Die exakte codierte Ausgabe kann sich über Paketversionen hinweg legitimerweise ändern, entscheiden Sie also, ob ein Versionsupgrade Snapshots aktualisieren oder bis zur Überprüfung fehlschlagen soll.
Testen Sie mindestens:
- eine System- und eine Benutzernachricht;
- eine Multi-Turn-Konversation mit einer Assistant-Antwort;
- Thinking-Modus und jeden unterstützten Reasoning-Effort-Wert, den Sie exponieren;
temperature,top_pund Ausgabe-Token-Limits an ihren erlaubten Grenzen;- ein Client-Funktions-Tool mit Argumenten;
- fehlerhafte Rollen, Inhaltstypen und nicht unterstützte Optionen.
Die letzte Gruppe ist wichtig, weil Protokollkompatibilität auch Ablehnungskompatibilität ist. Ein Dienst, der ein nicht unterstütztes Feld stillschweigend verwirft, ist schwerer zu debuggen als einer, der einen präzisen Fehler zurückgibt.
Wissen, was die Bibliothek übersetzen kann
Der aktuelle Umfang deckt Messages-, Chat-Completions- und Responses-artige Anfragen ab, einschließlich Streaming und vollständiger Antworten. Die gemeinsame Repräsentation unterstützt Text, Bilder, Thinking und Client-Tool-Aufrufe. Die Ausgabeparsung deckt Thinking-Inhalte, Tool-Aufrufe, JSON-Objekte und Stopp-Sequenzen ab.
Für Responses-Anfragen werden Tool-Namespace und das benutzerdefinierte Tool apply_patch unterstützt. Das bedeutet nicht, dass die Bibliothek Patches anwendet. Sie repräsentiert und parst den Tool-Aufruf; eine Host-Anwendung entscheidet immer noch, ob das Tool existiert, um Erlaubnis bittet, es ausführt und sein Ergebnis an das Modell zurückgibt.
Die V4.1-Bildvorverarbeitung ist über die Bildkomponente und OpenCV verfügbar. Bilder können als Base64-Daten oder externe URLs eintreffen. Ein Produktionsdienst sollte Größenlimits, Medientyp-Checks, Download-Timeouts und Netzwerkeinschränkungen festlegen, bevor er Remote-Inhalte an Vorverarbeitungscode übergibt.
Nicht unterstützte Felder explizit behandeln
Ab dem geprüften Release werden logprobs und top_logprobs nicht unterstützt. Ebenso wenig Dokumentinhalte, Audio oder Video, Dateiabruf per file_id, mehrere Vervollständigungen durch n > 1 oder verschlüsselte Thinking-Inhalte.
Erwartungen an strukturierte Ausgaben benötigen Sorgfalt. Die Bibliothek kann JSON-Objektausgaben parsen, erzwingt aber kein JSON Schema, reguläre Ausdrücke oder strikte Tool-Definitionen. Wenn Ihre API diese Garantien bewirbt, muss die Validierung anderswo stattfinden. Ein geparstes JSON-Objekt kann immer noch das Schema des Aufrufers verletzen.
Conversation-Speicher liegt ebenfalls außerhalb des Pakets. previous_response_id ruft keinen früheren Kontext ab. Ihr HTTP-Dienst muss den gespeicherten Konversationszustand auflösen und die resultierenden Nachrichten in die Konvertierung übergeben oder das Feld klar ablehnen.
Server-Tools wie web_search werden nicht unterstützt, da die Recipe-Schicht keine Tools ausführt. Wenn ein Client eine solche Anfrage sendet, wandeln Sie sie nicht ohne Dokumentation des semantischen Unterschieds in einen Client-Funktionsaufruf um.
Integration in einen API-Dienst ohne Verschleierung der Verantwortlichkeiten
Eine saubere Dienst-Pipeline hat vier Grenzen:
- Authentifizierung, Rate-Limits, Körpergrößenlimits und öffentliche API-Validierung.
deepseek-recipe-Normalisierung und V4/V4.1-Codierung.- Ein Inferenz-Backend, das Token konsumiert und generierte Token produziert.
- Recipe-Parsing, anwendungsbesitzene Tool-Orchestrierung und HTTP-Streaming.
Halten Sie Metriken um jede Grenze herum. Anfragekonvertierungszeit, Zeit bis zum ersten generierten Token, Tool-Wartezeit und Antwortserialisierungszeit beantworten unterschiedliche operative Fragen. Sie zu einer einzigen Latenzzahl zu kombinieren, macht Regressionen schwer zu lokalisieren.
Geben Sie gerenderte Prompts nicht standardmäßig durch Logs oder Tracing-Systeme weiter. Erfassen Sie sichere Metadaten wie Nachrichtenanzahl, Inhaltstypen, Codierungsversion, Tokenanzahl und Konvertierungsfehler. Wenn protokollierte Nutzlasten unvermeidbar sind, machen Sie sie opt-in, redigiert, zugriffskontrolliert und kurzlebig.
Wann dieses Tutorial der falsche Weg ist
Verwenden Sie deepseek-recipe, wenn Sie einen Inferenzdienst bauen oder anpassen und DeepSeek-spezifische Protokollkonvertierung benötigen. Wenn Sie nur einen bestehenden DeepSeek-kompatiblen Endpunkt aufrufen möchten, verwenden Sie das Client-SDK oder die HTTP-API dieses Dienstes. Das Hinzufügen eines Prompt-Encoders zu einem Anwendungs-Client dupliziert Serververhalten und kann Upgrades erschweren.
Das Paket ist genau deshalb am wertvollsten, weil es kein All-in-One-Server ist. Es gibt Infrastrukturteams eine gemeinsame, testbare Konvertierungsschicht und überlässt Deployment, Scheduling, Sicherheit und Tools ihrer Kontrolle. Eine erfolgreiche erste Integration endet mit einem verifizierten Prompt und einer Liste nicht unterstützter Felder – nicht mit der Behauptung, dass der gesamte Serving-Stack vollständig ist.
Quelle geprüft: offizielles deepseek-recipe Repository, abgerufen am 14. September 2026.