Curl & HTTP mit Unsloth verbinden
Leitfaden zum Ansprechen der Unsloth-API mit curl (oder einem beliebigen HTTP-Client), einschließlich kopierbarer Vorlagen für jeden Endpunkt und jede Funktion..
Unsloth stellt drei OpenAI-/Anthropic-kompatible Wire-Formate unter derselben Basis-URL auf dem Port bereit, auf dem Unsloth gestartet wurde. Alle von ihnen verwenden ein Authorization: Bearer sk-unsloth-… Header und geben je nach Einstellung entweder JSON oder SSE zurück, stream.
Diese Seite gruppiert die Rezepte nach Endpunkt (/v1/chat/completions, /v1/messages, /v1/responses, /v1/models) und endet mit einem gemeinsamen Abschnitt über die integrierten serverseitigen Tools, die über alle Chat-Endpunkte hinweg funktionieren.
🔑 Authentifizierung
Jede Anfrage benötigt einen Authorization Header:
Authorization: Bearer sk-unsloth-xxxxxxxxxxxxUm Schlüssel aus deinem Shell-Verlauf herauszuhalten, exportiere den Schlüssel einmal und verweise dann auf die Umgebungsvariable:
export UNSLOTH_STUDIO_AUTH_TOKEN=sk-unsloth-xxxxxxxxxxxxDie folgenden Snippets betten den Schlüssel der Klarheit halber direkt als sk-unsloth-xxxxxxxxxxxx ein. In der Praxis ersetze $UNSLOTH_STUDIO_AUTH_TOKEN.
📋 Geladene Modelle auflisten
curl http://localhost:8888/v1/models \
-H "Authorization: Bearer sk-unsloth-xxxxxxxxxxxx"Antwort:
{
"object": "list",
"data": [
{"id": "unsloth/gemma-3-27b-it-GGUF", "object": "model", "owned_by": "local"}
]
}
Verwende das id Feld immer dann, wenn eine Anfrage einen "model" Wert benötigt (oder wenn ein Client wie opencode nach einer Model-ID).
💬 Chat-Completions (/v1/chat/completions)
Der OpenAI-Chat-Completions-Dialekt. Die breiteste Kompatibilitätsoberfläche. Funktioniert mit dem OpenAI-SDK, opencode, Cursor, Continue, Cline, Open WebUI, SillyTavern und den meisten OpenAI-kompatiblen Tools.
Einfache Anfrage

Streaming
Füge "stream": true hinzu und die Antwort wechselt zu Server-Sent Events (text/event-stream). Sage curl mit --no-buffer (-N):
Jede Zeile der Antwort sieht so aus data: {"choices":[{"delta":{"content":"..."}}]}, endet mit data: [DONE].

Bilder (Vision)
Hänge ein Bild als image_url Content-Teil in der Nutzermeldung an. Die URL kann HTTPS oder eine Base64- data: URI sein:

Funktionsaufrufe (OpenAI-Tools)
Übergebe OpenAI-stilistische tools und (optional) tool_choice. Dein Client führt jeden Tool-Aufruf aus und gibt das Ergebnis im nächsten Durchlauf zurück.

📨 Anthropic Messages (/v1/messages)
Unsloths Anthropic-kompatibler Dialekt, der von Claude Code, dem Anthropic SDK, OpenClaw und jedem Client verwendet wird, der die Messages-API spricht.
Einfache Anfrage
max_tokens ist erforderlich bei /v1/messages (es ist optional bei /v1/chat/completions).

Streaming
Ereignisse folgen der SSE-Struktur von Anthropic: message_start, content_block_start, content_block_delta, content_block_stop, message_delta, message_stop, plus Unsloths benutzerdefiniertes tool_result Ereignis für serverseitige Tool-Ausgabe.
Bilder (Vision)
Anthropic-artiger Bildinhalt verwendet einen source Block mit Base64-Daten:

Tool-Aufrufe (Anthropic-Tools)
tool_choice Werte werden wie folgt auf den OpenAI-Dialekt abgebildet: Anthropic auto → OpenAI auto, Anthropic any → OpenAI required, Anthropic {type: "tool", name: "x"} → OpenAI {type: "function", function: {name: "x"}}, Anthropic none → OpenAI none.

🧬 Responses (/v1/responses)
Unsloth spricht auch die neuere OpenAI Responses API, das Protokoll, zu dem Codex und andere neuere OpenAI-Clients gewechselt sind.


Streaming funktioniert genauso wie bei Chat Completions. Füge "stream": true hinzu und leite mit -N.
🧰 Unsloth-Server-seitige Tools (Kurzform)
Zusätzlich zum clientseitigen Funktionsaufruf kann Unsloth Python, bashund Websuche serverseitig ausführen und die Ergebnisse als benutzerdefinierte tool_result Ereignisse zurückstreamen. Dies ist die Funktion, die Unsloth direkt „wie einen echten“ Agenten wirken lässt, ohne Tool-Aufrufe über deinen Client hin und her zu senden.
Aktiviere dies, indem du diese zusätzlichen Felder an entweder /v1/chat/completions oder /v1/messages:
enable_thinking
boolean
false um das Denken zu deaktivieren. true standardmäßig
enable_tools
boolean
true um die serverseitige Tool-Ausführung zu aktivieren.
enabled_tools
array<string>
Welche Tools das Modell aufrufen kann. Unterstützt python, bash, web_search.
session_id
string
Optional. Behält den Tool-Zustand (z. B. Python-Kernel) über Aufrufe hinweg bei.
Denken-Modus
Der Denken-Modus ist standardmäßig aktiviert.
Das Modell wird nachdenken, bevor es eine Antwort gibt.

Um das Denken zu deaktivieren, übergebe enable_thinking: false in deiner Anfrage. Das Modell wird eine Antwort liefern, ohne vorher nachzudenken.

Python-Ausführung

Websuche + Python (Streaming)

Bei /v1/messages
Die gleiche Kurzform funktioniert auch gegen den Anthropic-Messages-Endpunkt:

Unsloth streamt seine eigenen tool_result SSE-Ereignisse zusätzlich zu den standardmäßigen Anthropic-/OpenAI-Ereignistypen. Das Modell sieht die Ausgabe jedes Tools im nächsten Durchlauf.
❔ Fehlerbehebung
401 Nicht autorisiert - Das Authorization Header fehlt oder der Schlüssel ist falsch. Prüfe Folgendes: Authorization: Bearer sk-unsloth-….
curl hängt bei Streaming-Anfragen - Füge -N (gleich wie --no-buffer). Ohne ihn curl puffert den SSE-Stream und du siehst bis zum Ende nichts.
Base64-Kodierung unterscheidet sich zwischen Betriebssystemen - Das base64 unter Linux bricht standardmäßig Zeilen um, macOS / BSD nicht. Verwende base64 -w 0 unter Linux, base64 unter macOS oder leite die Ausgabe durch tr -d '\n'.
JSON-Escaping in Shells - Heredocs (-d @file.json) sind sauberer als Inline-Strings, sobald der Body komplexer wird. Beispiel: curl ... -d @body.json.
max_tokens Fehler bei /v1/messages - Der Anthropic-Dialekt verlangt dies. Füge "max_tokens": 1024 hinzu (oder welches Limit du auch immer möchtest).
Bei Problemen auf Endpunktebene (Modell lädt nicht, Verbindung getrennt, falscher Port) siehe die Seite mit der API-Übersicht.
Optional: Server-Standardeinstellungen anpassen
Du kannst das Standardverhalten beim Starten des Servers mit unsloth run.
Verwende --reasoning off um das Denken auszuschalten, oder --reasoning on um es für Modelle einzuschalten, die Reasoning unterstützen.
Dadurch startet der Server auf 0.0.0.0:8888, sodass andere Geräte in deinem lokalen Netzwerk verbinden können.
Einstellungen pro Anfrage überschreiben
Du kannst Generierungseinstellungen auch direkt in jeder API-Anfrage überschreiben.
Anfragebezogene Werte wie temperature, top_p, max_tokensund stream überschreiben die Server-Standardeinstellungen für diese Anfrage.
Zuletzt aktualisiert
War das hilfreich?

