For the complete documentation index, see llms.txt. This page is also available as Markdown.

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.

Wenn du dir nicht sicher bist, welche URL / welcher Schlüssel / welcher Modellname verwendet werden soll, lies zuerst die API-Übersicht. Dort wirst du Schritt für Schritt durch das Starten von Unsloth, das Laden eines Modells und das Erstellen eines sk-unsloth-… Schlüssels geführt.

🔑 Authentifizierung

Jede Anfrage benötigt einen Authorization Header:

Authorization: Bearer sk-unsloth-xxxxxxxxxxxx

Um 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-xxxxxxxxxxxx

Die 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:

Das geladene Modell muss multimodal sein. Wenn du ein reines Textmodell lädst, ist die Anfrage strukturell erfolgreich, aber das Modell verarbeitet das Bild nicht.

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

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:

Feld
Typ
Hinweise

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?