DEV Community

Cover image for Anleitung: GLM-5.3-Flash API mit Bildeingabe nutzen
Emre Demir
Emre Demir

Posted on Originally published at apidog.com

Anleitung: GLM-5.3-Flash API mit Bildeingabe nutzen

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.

GLM-5.3-Flash API

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"
Enter fullscreen mode Exit fullscreen mode

Die Standard-Basis-URL lautet:

https://api.z.ai/api/paas/v4/
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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."}
    ]
  }'
Enter fullscreen mode Exit fullscreen mode

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);
Enter fullscreen mode Exit fullscreen mode

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"
                    },
                },
            ],
        }
    ],
)
Enter fullscreen mode Exit fullscreen mode

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}"},
}
Enter fullscreen mode Exit fullscreen mode

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}},
]
Enter fullscreen mode Exit fullscreen mode

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"},
)
Enter fullscreen mode Exit fullscreen mode

Unterstützte Werte:

  • low
  • high
  • 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)
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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())
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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)