GLM-5.3-Flash API verwenden: Text, Bilder, Streaming und Tools
GLM-5.3-Flash ist OpenAI-kompatibel: Verwenden Sie einen bestehenden Client, ändern Sie Basis-URL und Modell-ID. Neu ist die Bildeingabe: Das Modell akzeptiert Bilder und Text in derselben Anfrage über typisierte Inhaltsblöcke.
Probieren Sie Apidog noch heute aus
Dieser Leitfaden zeigt Schlüsselverwaltung, Text- und Bildanfragen, reasoning_effort, Streaming, Tool-Aufrufe und Fehlerbehandlung mit glm-5.3-flash. Für Hintergrundinformationen lesen Sie den GLM-5.3-Flash-Erklärer. Für GLM-5.3 selbst gibt es einen separaten API-Leitfaden.
API-Schlüssel einrichten
Erstellen Sie bei z.ai einen API-Schlüssel und speichern Sie ihn als Umgebungsvariable:
export ZAI_API_KEY="your-key-here"
Die Standard-Basis-URL lautet:
https://api.z.ai/api/paas/v4/
Für Claude Code oder Cline benötigen Sie die separate Coding-Plan-Basis-URL. Details finden Sie im Claude-Code-und-Cline-Leitfaden.
Ersten Textaufruf ausführen
Das offizielle OpenAI SDK funktioniert direkt:
from openai import OpenAI
import os
client = OpenAI(
[REDACTED CREDENTIAL],
base_url="https://api.z.ai/api/paas/v4/",
)
response = client.chat.completions.create(
model="glm-5.3-flash",
messages=[
{"role": "user", "content": "Explain what a KV cache is in two sentences."}
],
)
print(response.choices[0].message.content)
Mit curl:
curl https://api.z.ai/api/paas/v4/chat/completions \
-H "[REDACTED CREDENTIAL] $ZAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5.3-flash",
"messages": [
{"role": "user", "content": "Explain what a KV cache is in two sentences."}
]
}'
Mit Node.js:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.ZAI_API_KEY,
baseURL: "https://api.z.ai/api/paas/v4/",
});
const response = await client.chat.completions.create({
model: "glm-5.3-flash",
messages: [
{ role: "user", content: "Explain what a KV cache is in two sentences." },
],
});
console.log(response.choices[0].message.content);
Abgesehen von Basis-URL und Modell-ID ist daran nichts GLM-spezifisch.
Bilder senden
Für Bildeingaben muss content ein Array aus Inhaltsblöcken sein:
response = client.chat.completions.create(
model="glm-5.3-flash",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "This screenshot shows a rendering bug. What is wrong with the layout?",
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/screenshots/broken-layout.png"
},
},
],
}
],
)
Das url-Feld akzeptiert öffentliche URLs oder Base64-Daten-URLs. Für lokale oder private Bilder:
import base64
with open("broken-layout.png", "rb") as f:
encoded = base64.b64encode(f.read()).decode("utf-8")
image_block = {
"type": "image_url",
"image_url": {"url": f"data:image/png;base64,{encoded}"},
}
Senden Sie mehrere Bilder als mehrere image_url-Blöcke. Platzieren Sie die Aufgabenbeschreibung vor den Bildern:
content = [
{"type": "text", "text": "Does the second image match the design in the first?"},
{"type": "image_url", "image_url": {"url": design_data_url}},
{"type": "image_url", "image_url": {"url": built_data_url}},
]
Z.ai dokumentiert auch Video- und Dateieingaben über denselben Mechanismus. Validieren Sie Video jedoch mit eigenen Medien, bevor Sie darauf produktive Funktionen aufbauen. Weitere Vision-Beispiele, einschließlich Screenshot-zu-Code, enthält der GLM-5.3-Flash-Vision-Leitfaden.
Denkaufwand festlegen
Steuern Sie den Denkaufwand mit reasoning_effort:
response = client.chat.completions.create(
model="glm-5.3-flash",
messages=[{"role": "user", "content": "Refactor this function for clarity."}],
extra_body={"reasoning_effort": "low"},
)
Unterstützte Werte:
lowhigh-
max— Standardwert und teuerster Modus
Für Klassifizierung, Extraktion und andere hochvolumige Aufgaben ohne komplexes Reasoning sollten Sie low setzen. GLM-5.2 bot nur high und max; low ist neu in GLM-5.3-Flash.
Im OpenAI Python SDK gehört reasoning_effort in extra_body, weil es kein Standard-OpenAI-Feld ist. In curl ist es ein Top-Level-Feld.
Sampling-Parameter
| Anwendungsfall | temperature |
top_p |
|---|---|---|
| Allgemein | 1.0 | 0.95 |
| Codierung | 0.95 | 1.0 |
Der Unterschied ist gering. Bei inkonsistenten Code-Ausgaben sollten Sie das Codierungs-Profil testen.
Streaming aktivieren
Verwenden Sie die normale OpenAI-Streaming-Semantik:
stream = client.chat.completions.create(
model="glm-5.3-flash",
messages=[{"role": "user", "content": "Write a bash script that rotates logs."}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
Laut Artificial Analysis erzeugt GLM-5.3-Flash etwa 49 Token pro Sekunde, gegenüber etwa 86 bei GLM-5.3. Die Zeit bis zum ersten Token liegt bei etwa 1,52 Sekunden: Die Ausgabe beginnt schnell, wird danach aber stetig statt sehr schnell geliefert.
Tool-Aufrufe verwenden
Tools folgen dem Standard-OpenAI-Schema:
tools = [
{
"type": "function",
"function": {
"name": "get_deployment_status",
"description": "Returns the current status of a named deployment.",
"parameters": {
"type": "object",
"properties": {
"service": {
"type": "string",
"description": "The service name, for example 'checkout-api'.",
}
},
"required": ["service"],
},
},
}
]
response = client.chat.completions.create(
model="glm-5.3-flash",
messages=[{"role": "user", "content": "Is checkout-api healthy?"}],
tools=tools,
)
call = response.choices[0].message.tool_calls[0]
print(call.function.name, call.function.arguments)
Z.ai meldet für AutomationBench 48,8 Punkte gegenüber 26,2 bei GLM-5.2. Das sind Herstellerwerte, passen aber zur Ausrichtung auf Tool-Calling-Schleifen statt reine Einzel-Turn-Chats.
Wenn Sie Tools aus einer bestehenden API ableiten möchten, zeigt dieser Beitrag, wie Sie eine OpenAPI-Spezifikation in Agenten-Tools umwandeln.
Fehlerbehandlung für Produktion
Ratenbegrenzungen
Verwenden Sie exponentiellen Backoff mit Jitter:
import time, random
from openai import RateLimitError
def call_with_retry(**kwargs):
for attempt in range(5):
try:
return client.chat.completions.create(**kwargs)
except RateLimitError:
if attempt == 4:
raise
time.sleep((2 ** attempt) + random.random())
Ein fixes Wiederholungsintervall über viele Worker kann synchronisierte Retries und dauerhafte Ratenbegrenzungen erzeugen.
Kontextüberlauf
Das Kontextfenster umfasst 1 Million Tokens. Lange Dokumente und hochauflösende Bilder verbrauchen gemeinsam Kontext. Verfolgen Sie das Token-Budget bereits beim Eingang der Daten.
Abgeschnittene Ausgaben
Prüfen Sie finish_reason. Bei length wurde die Ausgabelänge erreicht; das Modell hat nicht zwingend abgebrochen.
Token-Nutzung prüfen
Das usage-Objekt ist die zuverlässigste Kostenquelle pro Aufruf:
print(response.usage.prompt_tokens, response.usage.completion_tokens)
Achten Sie auf completion_tokens: Bei reasoning_effort="max" werden Denk-Tokens als Ausgabe abgerechnet. Vergleichen Sie dieselben Prompts mit verschiedenen Aufwandstufen, bevor Sie einen Standard festlegen.
Preise
Die Listenpreise betragen:
- 0,15 $ pro Million Eingabe-Tokens
- 0,50 $ pro Million Ausgabe-Tokens
- 0,03 $ pro Million zwischengespeicherter Eingabe-Tokens
Bis zum 9. September 2026 gilt ein Einführungsrabatt von 50 %:
- 0,075 $ pro Million Eingabe-Tokens
- 0,25 $ pro Million Ausgabe-Tokens
- 0,015 $ pro Million zwischengespeicherter Eingabe-Tokens
OpenRouter, Cloudflare Workers AI, Vercel AI Gateway und DeepInfra können eigene Preise haben. Die Preisübersicht erklärt die Berechnung; prüfen Sie vor der Budgetplanung immer den Preis Ihres tatsächlichen Anbieters.
Integration testen
Speichern Sie Text-, Bild- und Tool-Calling-Anfragen als Sammlung in Apidog. Hinterlegen Sie Assertions für die Antwortfelder, die Ihre Anwendung nutzt, und speichern Sie den API-Schlüssel als Umgebungsvariable.
So können Sie bei einem Wechsel zwischen Flash und GLM-5.3 nur die Modell-ID ändern und dieselbe Testsuite erneut ausführen.
FAQ
Wie lautet die genaue Modell-ID?
Auf der Z.ai API: glm-5.3-flash. Auf OpenRouter: z-ai/glm-5.3-flash.
Funktioniert das OpenAI SDK ohne Änderungen?
Ja — für Chat-Vervollständigungen, Streaming und Tool-Aufrufe. Nicht-Standard-Parameter wie reasoning_effort benötigen im Python SDK extra_body.
Wie viele Bilder kann ich senden?
Mehrere, jeweils als eigener image_url-Block. Die praktische Grenze bestimmt Ihr Kontextbudget, nicht eine feste Bildanzahl.
Warum sind Antworten ausführlich und langsam?
reasoning_effort steht standardmäßig auf max. Setzen Sie für Aufgaben ohne umfangreiches Reasoning low.
Wie hoch ist die maximale Ausgabelänge?
Die Quellen widersprechen sich: OpenRouter nennt 131.072 Tokens, die Hugging-Face-Karte 163.840 Tokens. Prüfen Sie Ihren Anbieter, bevor Sie sich auf sehr lange Generierungen verlassen.

Top comments (0)