Am 21. September 2026 hat xAI mit Grok 4.7 sein neues Flaggschiffmodell veröffentlicht und positioniert es gezielt für Programmierung und Wissensarbeit. Das Modell erreicht laut dem Release-Eintrag 46,3 Prozent auf CursorBench 4.0, gegenüber 40,4 Prozent beim Vorgänger ein Sprung von 5,9 Prozentpunkten. Wer die Grok API jetzt in ein eigenes Python-Projekt einbauen will, findet hier eine Schritt-für-Schritt-Anleitung: vom API-Key bis zum fertigen Agenten-Skript mit Tool-Calling, Streaming und Kostenkontrolle.
Der Artikel richtet sich an Entwicklerinnen und Entwickler, die bereits mit Python arbeiten, aber noch keine Erfahrung mit der xAI-Schnittstelle haben. Du brauchst dafür kein Machine-Learning-Wissen, nur ein xAI-Konto, eine funktionierende Python-Umgebung und rund 45 Minuten Zeit. Am Ende hast du ein lauffähiges Projekt, das Chat-Anfragen streamt, externe Funktionen aufruft und den eigenen Tokenverbrauch protokolliert.
Anders als bei einem reinen Blogpost geht dieser Guide bewusst über den Standardfall “eine Anfrage senden” hinaus. Du baust nacheinander Streaming, Tool-Calling, Bildverarbeitung, asynchrone Anfragen und eine Kostenkontrolle, bevor am Ende ein komplettes Agenten-Skript zusammenkommt. Jeder Schritt lässt sich einzeln testen, du musst also nicht das ganze Projekt auf einmal verstehen, um produktiv zu werden.
Was ist die Grok API von xAI?
Die Grok API ist die programmierbare Schnittstelle zu den Sprachmodellen von xAI, dem Unternehmen von Elon Musk. Sie funktioniert nach demselben Prinzip wie die APIs von OpenAI, Anthropic oder Google: Du schickst einen Text- oder Bildinhalt an einen Endpunkt und bekommst eine generierte Antwort zurück. Der praktische Vorteil für Entwickler liegt in der Kompatibilität. xAI hat seine API bewusst so gebaut, dass sie mit dem offiziellen openai-Python-Paket funktioniert, du musst also kein separates SDK installieren, sondern änderst nur die Basis-URL und den API-Key. Einen vollständigen Überblick über alle verfügbaren Endpunkte liefert die offizielle xAI-API-Übersicht, die auch als Referenz dient, falls sich Parameter nach dem Erscheinen dieses Artikels ändern sollten.
Grok 4.7 ist laut xAI das aktuell leistungsfähigste Modell der Reihe und bringt gegenüber dem Vorgänger drei relevante Neuerungen mit: ein Kontextfenster von 500.000 Token, einen Preis von 2 US-Dollar pro Million Input-Token sowie 6 US-Dollar pro Million Output-Token, und laut Modellhinweis einen klaren Fokus auf lange Codebasen, Dokumentenanalyse und agentische Workflows. Für ein Tutorial heißt das: Du kannst mit realistisch großen Dateien arbeiten, ohne den Kontext künstlich kürzen zu müssen.
Wichtig für die Einordnung: Grok 4.7 ist nicht das einzige Modell, das in den Tagen vor diesem Artikel erschienen ist. Am 18. September 2026 veröffentlichte Alibaba Qwen3.8-Omni-Flash, ein multimodales Modell, das Text, Bilder, Audio und Video verarbeitet und Text ausgibt. Z.ai brachte mit GLM-5.3 ein neues Flaggschiff und mit GLM-5.3-Flash eine MoE-Variante mit 320 Milliarden Gesamt- und 18 Milliarden aktiven Parametern sowie MIT-lizenzierten Gewichten auf Hugging Face. Weiter unten im Artikel vergleichen wir die drei Modelle in einer Tabelle, damit du die Grok API im Kontext einordnen kannst, bevor du dich festlegst.
Für Teams in Deutschland, Österreich und der Schweiz ist außerdem die Verfügbarkeit relevant. Die Grok API lässt sich von jedem Land aus über die öffentliche Konsole nutzen, xAI selbst sitzt jedoch in den USA, und die Datenverarbeitung läuft standardmäßig über US-Server. Wer im DACH-Raum mit personenbezogenen Daten arbeitet, sollte deshalb vor dem Produktivstart einen Blick in die aktuellen Auftragsverarbeitungsbedingungen werfen, dazu unten mehr im Abschnitt zu Sicherheit und Datenschutz. Für reine Entwicklerwerkzeuge, interne Automatisierung oder Prototypen ohne Kundendaten spielt dieser Punkt in der Praxis meist eine untergeordnete Rolle.
Grok API vs. bestehenden OpenAI-Code: Was sich ändert
Wenn dein Team bereits mit der OpenAI-API arbeitet, ist der Umstieg auf die Grok API überschaubar. Der komplette Aufbau von Nachrichtenlisten, Rollen und Parametern bleibt identisch, verändert werden nur drei Werte: der Client-Konstruktor, der Modellname und optional der API-Key selbst. Ein bestehendes Projekt lässt sich dadurch oft in wenigen Minuten testweise auf Grok 4.7 umstellen, ohne dass du die restliche Anwendungslogik anfassen musst.
# Vorher: Standard-OpenAI-Client
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Hallo!"}],
)
# Nachher: derselbe Code, nur Basis-URL, Key und Modellname geändert
client = OpenAI(
api_key=os.environ["XAI_API_KEY"],
base_url="https://api.x.ai/v1",
)
response = client.chat.completions.create(
model="grok-4.7",
messages=[{"role": "user", "content": "Hallo!"}],
)
Nicht jeder Parameter verhält sich dabei zwangsläufig identisch. Einige OpenAI-spezifische Felder, etwa bestimmte Moderation-Flags oder Assistants-API-Funktionen, existieren bei xAI nicht oder heißen anders. Teste deshalb nach der Umstellung gezielt die Funktionen, die dein Projekt tatsächlich nutzt, Chat-Completions, Streaming und Tool-Calling funktionieren nach unserer Prüfung zuverlässig, exotischere Endpunkte solltest du vor dem produktiven Umstieg einzeln verifizieren.
Voraussetzungen: Diese Werkzeuge brauchst du
Bevor du mit der Grok API arbeitest, solltest du die folgenden Punkte abhaken. Die Liste ist bewusst schlank gehalten, weil die xAI-API keine exotischen Abhängigkeiten braucht.
- Python 3.10 oder neuer – ältere Versionen funktionieren teils noch, werden aber vom openai-Paket nicht mehr offiziell getestet.
- pip 23 oder neuer zur Paketverwaltung, im Zweifel mit
python -m pip install --upgrade pipaktualisieren. - openai-Python-Paket, Version 1.54.0 oder neuer – wird als kompatibles SDK für die Grok API genutzt.
- Ein xAI-Konto mit hinterlegter Zahlungsmethode, da die API kostenpflichtig ist und kein dauerhaftes Gratis-Kontingent bietet.
- Ein API-Key, den du im xAI-Konsolenbereich generierst (Schritt 1 unten).
- Ein Terminal oder eine IDE mit Unterstützung für virtuelle Python-Umgebungen, etwa VS Code oder PyCharm.
- Grundkenntnisse in Python, insbesondere im Umgang mit Funktionen, Dictionaries und optional async/await für die fortgeschrittenen Beispiele.
Ein Hinweis zu den Kosten, bevor du startest: Bei 2 US-Dollar pro Million Input-Token und 6 US-Dollar pro Million Output-Token kostet ein typischer Testlauf mit wenigen tausend Token nur Bruchteile eines Cents. Setze trotzdem in der xAI-Konsole ein monatliches Ausgabenlimit, bevor du produktiv testest. Das nimmt dir die Sorge vor einer überraschenden Rechnung, falls ein Skript in einer Schleife hängen bleibt.
Zur zeitlichen Einordnung: Konto und API-Key richtest du in fünf bis zehn Minuten ein, die Python-Umgebung in weiteren fünf. Die eigentlichen Programmierschritte, von der ersten Anfrage bis zum kompletten Agenten-Skript am Ende des Artikels, nehmen erfahrungsgemäß 25 bis 30 Minuten in Anspruch, je nachdem wie viel du direkt kopierst und wie viel du selbst anpasst. Insgesamt kommst du damit auf die eingangs genannten rund 45 Minuten für das komplette Tutorial.
Schritt 1 bis 3: Konto, API-Key und Abrechnung einrichten
Schritt 1: Registriere dich auf der xAI-Plattform und bestätige deine E-Mail-Adresse. Die Registrierung läuft über ein Standardformular, ein bestehendes X-Konto (vormals Twitter) kann den Prozess beschleunigen, ist aber nicht zwingend erforderlich.
Schritt 2: Öffne den Bereich für API-Keys in der Konsole und lege einen neuen Schlüssel an. Vergib einen sprechenden Namen wie tutorial-lokal, damit du bei mehreren Projekten später den Überblick behältst. Der Key wird nur einmal vollständig angezeigt, kopiere ihn sofort in einen Passwort-Manager oder eine lokale .env-Datei.
Schritt 3: Hinterlege eine Zahlungsmethode und setze ein Ausgabenlimit. Die meisten Konsolen bieten dafür ein Feld für ein monatliches Hard-Limit. Setze es für den Einstieg niedrig an, etwa 10 oder 20 US-Dollar, und erhöhe es erst, wenn du dein Projekt in Produktion bringst.
# .env-Datei im Projektordner anlegen (niemals in Git einchecken)
echo "XAI_API_KEY=dein-schluessel-hier" > .env
echo ".env" >> .gitignore
Trage den API-Key niemals direkt im Quellcode ein. Eine .env-Datei zusammen mit dem Paket python-dotenv ist der pragmatischste Weg, den Schlüssel lokal zu halten und trotzdem sauber aus Git auszuschließen.
Schritt 4 und 5: Python-Umgebung und SDK installieren
Schritt 4: Lege eine isolierte virtuelle Umgebung an. Das verhindert, dass sich Paketversionen zwischen verschiedenen Projekten in die Quere kommen.
python3 -m venv .venv
source .venv/bin/activate # unter Windows: .venv\Scripts\activate
python -m pip install --upgrade pip
Schritt 5: Installiere das openai-Paket sowie python-dotenv für das Laden der Umgebungsvariablen. Die Grok API übernimmt das Anfrageformat von OpenAI vollständig, ein eigenes xAI-SDK ist für die meisten Anwendungsfälle nicht nötig.
pip install "openai>=1.54.0" python-dotenv
pip freeze | grep -i openai
# Erwartete Ausgabe: openai==1.5x.x
Prüfe direkt im Anschluss, ob die Installation sauber durchgelaufen ist. Ein pip freeze sollte die installierte openai-Version anzeigen. Falls stattdessen eine Fehlermeldung zu einer fehlenden Build-Toolchain erscheint, aktualisiere zuerst setuptools und wheel in der virtuellen Umgebung.
Schritt 6: Die erste Anfrage an Grok 4.7 senden
Jetzt folgt der eigentliche Kern der Grok-API-Integration: der Client wird auf die xAI-Basis-URL umgebogen, danach funktioniert der restliche Code wie eine gewöhnliche OpenAI-Anfrage.
import os
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
client = OpenAI(
api_key=os.environ["XAI_API_KEY"],
base_url="https://api.x.ai/v1",
)
response = client.chat.completions.create(
model="grok-4.7",
messages=[
{"role": "system", "content": "Du bist ein präziser technischer Assistent."},
{"role": "user", "content": "Erkläre in zwei Sätzen, was ein Kontextfenster bei einem Sprachmodell ist."},
],
temperature=0.3,
)
print(response.choices[0].message.content)
Die Ausgabe des Skripts sieht bei einem erfolgreichen Aufruf ungefähr so aus:
Ein Kontextfenster ist die maximale Menge an Text, die ein Sprachmodell
gleichzeitig verarbeiten kann, gemessen in Token statt in Zeichen oder
Wörtern. Alles, was über dieses Limit hinausgeht, muss gekürzt oder in
mehreren Anfragen aufgeteilt werden.
Der Modellname grok-4.7 wird von xAI als Alias für die aktuelle Version gepflegt. Prüfe vor dem produktiven Einsatz in der offiziellen Modellübersicht von xAI, welcher exakte Bezeichner für dein Abonnement freigeschaltet ist, da xAI gelegentlich Versions-Suffixe vergibt.
Schritt 7: Streaming-Antworten für Chat-Oberflächen
Für eine Chat-Oberfläche willst du nicht auf die komplette Antwort warten, sondern Token für Token ausgeben, sobald sie ankommen. Das senkt die gefühlte Wartezeit erheblich, besonders bei langen Antworten.
stream = client.chat.completions.create(
model="grok-4.7",
messages=[
{"role": "user", "content": "Liste fünf Vorteile von Streaming-APIs auf."}
],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
print()
Beachte, dass einzelne Chunks auch leer sein können, etwa bei Rollenwechseln oder am Stream-Ende. Die Prüfung if delta: verhindert, dass None-Werte den Terminal-Output stören. Für eine Web-Oberfläche würdest du die Chunks stattdessen über Server-Sent Events oder WebSockets an den Client weiterreichen, das Grundprinzip bleibt identisch. Weitere Parameter für das Streaming, etwa das optionale Mitsenden von Nutzungsstatistiken im letzten Chunk, beschreibt die xAI-Dokumentation zu Streaming-Antworten im Detail.
Ein häufiger Anfängerfehler beim Umstieg von einer synchronen auf eine gestreamte Antwort: Der Fehlerpfad wird vergessen. Bricht die Verbindung mitten im Stream ab, etwa durch einen Netzwerkfehler beim Nutzer, bekommst du keine saubere Exception am Ende, sondern einen abgebrochenen Iterator. Fange diesen Fall in einer Web-Anwendung explizit ab und zeige dem Nutzer eine verständliche Fehlermeldung, statt die Oberfläche einfach mitten im Satz einfrieren zu lassen.
Schritt 8: Tool-Calling mit einer eigenen Funktion einrichten
Tool-Calling erlaubt es dem Modell, während einer Konversation eine von dir definierte Python-Funktion aufzurufen, etwa um Live-Daten wie Wetterwerte oder Lagerbestände abzurufen. Das Modell entscheidet dabei selbst, wann ein Werkzeug sinnvoll ist, du lieferst nur die Beschreibung und die eigentliche Ausführung.
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Gibt die aktuelle Temperatur für eine Stadt zurück.",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "Stadtname, z. B. Berlin"}
},
"required": ["city"],
},
},
}
]
def get_weather(city: str) -> str:
# Hier würdest du einen echten Wetterdienst abfragen
return f"In {city} sind es aktuell 18 Grad bei leichter Bewölkung."
messages = [{"role": "user", "content": "Wie warm ist es gerade in Hamburg?"}]
first = client.chat.completions.create(
model="grok-4.7", messages=messages, tools=tools, tool_choice="auto"
)
tool_call = first.choices[0].message.tool_calls[0]
import json
args = json.loads(tool_call.function.arguments)
result = get_weather(**args)
messages.append(first.choices[0].message)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": result,
})
final = client.chat.completions.create(model="grok-4.7", messages=messages)
print(final.choices[0].message.content)
Der Ablauf läuft in zwei Runden: Zuerst erkennt das Modell, dass es get_weather braucht, und liefert die Argumente als JSON zurück. Du führst die Funktion lokal aus und schickst das Ergebnis als tool-Nachricht zurück. Erst die zweite Anfrage liefert die finale, in natürliche Sprache formulierte Antwort. Details zu weiteren Parametern findest du in der xAI-Dokumentation zu Function Calling.
Schritt 9: Bilder und multimodale Eingaben senden
Grok 4.7 verarbeitet neben Text auch Bilder. Der Aufruf unterscheidet sich nur im Aufbau der content-Liste, die statt eines reinen Strings jetzt aus mehreren Teilen besteht.
response = client.chat.completions.create(
model="grok-4.7",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "Was zeigt dieses Diagramm in einem Satz?"},
{
"type": "image_url",
"image_url": {"url": "https://example.com/diagramm.png"},
},
],
}
],
)
print(response.choices[0].message.content)
Für lokale Bilddateien codierst du die Datei vorher als Base64-String und übergibst sie als Data-URL im Format data:image/png;base64,... statt einer externen URL. Achte bei größeren Bildern darauf, sie vorher zu komprimieren, da jedes Bild einen Teil des Kontextfensters verbraucht und sich direkt auf die Kosten auswirkt.
Schritt 10: Asynchrone Anfragen für höheren Durchsatz
Wer mehrere Grok-Anfragen gleichzeitig verarbeiten will, etwa beim Zusammenfassen von hundert Support-Tickets, sollte nicht nacheinander (synchron) anfragen. Das openai-Paket bringt dafür einen eigenen asynchronen Client mit, der auf Pythons asyncio aufbaut und mehrere Anfragen parallel an die Grok API schickt, statt auf jede Antwort einzeln zu warten.
Mehrere Anfragen gleichzeitig verarbeiten
Der folgende Code verarbeitet eine Liste von Tickets parallel, begrenzt die gleichzeitigen Verbindungen aber über ein Semaphore, damit du nicht versehentlich das Rate Limit deines Kontingents sprengst.
import asyncio
import os
from openai import AsyncOpenAI
async_client = AsyncOpenAI(api_key=os.environ["XAI_API_KEY"], base_url="https://api.x.ai/v1")
semaphore = asyncio.Semaphore(5) # maximal 5 gleichzeitige Anfragen
async def fasse_ticket_zusammen(ticket_text: str) -> str:
async with semaphore:
response = await async_client.chat.completions.create(
model="grok-4.7",
messages=[
{"role": "system", "content": "Fasse Support-Tickets in einem Satz zusammen."},
{"role": "user", "content": ticket_text},
],
)
return response.choices[0].message.content
async def verarbeite_tickets(tickets: list[str]) -> list[str]:
aufgaben = [fasse_ticket_zusammen(t) for t in tickets]
return await asyncio.gather(*aufgaben)
tickets = [
"Kunde kann sich seit dem Update nicht mehr einloggen, Fehler 403.",
"Rechnung vom letzten Monat wurde doppelt abgebucht.",
"Frage zur Migration von Plan Basic auf Plan Pro.",
]
zusammenfassungen = asyncio.run(verarbeite_tickets(tickets))
for original, kurz in zip(tickets, zusammenfassungen):
print(f"- {kurz}")
Bei drei Tickets ist der Unterschied kaum spürbar, bei hundert oder tausend Anfragen dagegen erheblich: Statt einer Gesamtlaufzeit, die sich aus der Summe aller Einzelantworten ergibt, läuft die Verarbeitung in Wellen von jeweils fünf parallelen Anfragen. Erhöhe den Wert im Semaphore schrittweise und beobachte dabei, ob RateLimitError-Meldungen auftauchen, bevor du ihn in Produktion fest einstellst.
Schritt 11: Das 500.000-Token-Kontextfenster testen
Der große Praxisvorteil von Grok 4.7 ist das Kontextfenster von 500.000 Token. Das reicht für mehrere hundert Seiten Text oder eine mittelgroße Codebasis in einer einzigen Anfrage. Der folgende Code liest ein komplettes Verzeichnis von Textdateien ein und schickt den gesamten Inhalt zur Analyse.
from pathlib import Path
def lade_dokumente(ordner: str) -> str:
texte = []
for pfad in Path(ordner).rglob("*.md"):
texte.append(f"### Datei: {pfad.name}\n{pfad.read_text(encoding='utf-8')}")
return "\n\n".join(texte)
dokumentation = lade_dokumente("./docs")
response = client.chat.completions.create(
model="grok-4.7",
messages=[
{"role": "system", "content": "Fasse technische Dokumentation präzise zusammen."},
{"role": "user", "content": f"Fasse folgende Dokumentation in fünf Stichpunkten zusammen:\n\n{dokumentation}"},
],
)
print(response.choices[0].message.content)
Bei sehr großen Eingaben lohnt sich ein Blick auf das Feld usage.prompt_tokens in der Antwort, bevor du den Code in Produktion bringst. So siehst du schwarz auf weiß, wie viele Token deine tatsächlichen Dokumente verbrauchen, statt nur zu schätzen.
Schritt 12: Tokenverbrauch und Kosten protokollieren
Jede Antwort der Grok API enthält ein usage-Objekt mit der Anzahl verbrauchter Token. Damit kannst du dir eine einfache Kostenprotokollierung bauen, statt am Monatsende von der Rechnung überrascht zu werden.
PREIS_INPUT_PRO_MIO = 2.0 # US-Dollar je 1 Million Input-Token
PREIS_OUTPUT_PRO_MIO = 6.0 # US-Dollar je 1 Million Output-Token
def protokolliere_kosten(response):
usage = response.usage
kosten_input = (usage.prompt_tokens / 1_000_000) * PREIS_INPUT_PRO_MIO
kosten_output = (usage.completion_tokens / 1_000_000) * PREIS_OUTPUT_PRO_MIO
gesamt = kosten_input + kosten_output
print(
f"Input: {usage.prompt_tokens} Token | "
f"Output: {usage.completion_tokens} Token | "
f"Kosten: ${gesamt:.6f}"
)
response = client.chat.completions.create(
model="grok-4.7",
messages=[{"role": "user", "content": "Nenne drei Vorteile von Unit-Tests."}],
)
protokolliere_kosten(response)
# Erwartete Ausgabe: Input: 14 Token | Output: 87 Token | Kosten: $0.000550
Für ein Produktivsystem solltest du diese Werte nicht nur ausgeben, sondern in eine Datenbank oder ein Monitoring-Tool schreiben. So erkennst du frühzeitig, welche Endpunkte oder Nutzer überdurchschnittlich viele Token verbrauchen.
Schritt 13: Fehlerbehandlung, Retries und Rate Limits
Jede externe API kann zeitweise nicht erreichbar sein oder ein Rate Limit auslösen. Das openai-Paket liefert dafür eigene Exception-Klassen, die du gezielt abfangen kannst, statt pauschal jeden Fehler zu ignorieren.
import time
from openai import RateLimitError, APIConnectionError, APIStatusError
def sichere_anfrage(messages, max_versuche=3):
for versuch in range(1, max_versuche + 1):
try:
return client.chat.completions.create(model="grok-4.7", messages=messages)
except RateLimitError:
wartezeit = 2 ** versuch
print(f"Rate Limit erreicht, warte {wartezeit} Sekunden ...")
time.sleep(wartezeit)
except APIConnectionError as fehler:
print(f"Verbindungsfehler: {fehler}. Versuch {versuch}/{max_versuche}")
time.sleep(1)
except APIStatusError as fehler:
print(f"API-Fehler {fehler.status_code}: {fehler.response}")
raise
raise RuntimeError("Alle Versuche fehlgeschlagen")
Der exponentielle Backoff (die Wartezeit verdoppelt sich mit jedem Versuch) verhindert, dass dein Skript ein Rate Limit durch sofortige Wiederholungen noch verschärft. Für produktive Systeme lohnt sich zusätzlich eine Bibliothek wie tenacity, die diese Logik als Dekorator kapselt.
Schritt 14: Grok API in Docker und CI/CD produktiv betreiben
Ein lokales Skript ist der erste Schritt, ein Deployment braucht aber ein reproduzierbares Setup. Ein schlankes Dockerfile reicht in der Regel aus, solange du den API-Key nicht ins Image backst, sondern zur Laufzeit über eine Umgebungsvariable hineinreichst.
# Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "agent.py"]
Beim Start des Containers übergibst du den Key als Laufzeitvariable, niemals als ENV-Zeile im Dockerfile selbst, da dieser sonst dauerhaft im Image-Layer sichtbar bleibt: docker run -e XAI_API_KEY=dein-schluessel mein-grok-projekt.
Secrets in GitHub Actions verwalten
Für automatisierte Tests oder ein CI/CD-Deployment legst du den Schlüssel als verschlüsseltes Repository-Secret an, statt ihn in einer Konfigurationsdatei zu versionieren. In GitHub Actions sieht der entsprechende Workflow-Ausschnitt so aus.
# .github/workflows/test.yml
name: Grok-API-Tests
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: pip install -r requirements.txt
- run: python -m pytest tests/
env:
XAI_API_KEY: ${{ secrets.XAI_API_KEY }}
Für echte Integrationstests gegen die Grok API solltest du zusätzlich ein eigenes Testkonto mit niedrigem Ausgabenlimit anlegen, damit ein fehlerhafter Pull Request nicht versehentlich das Produktivbudget belastet. Alternativ mockst du die API-Antworten in der Continuous-Integration-Pipeline und reservierst echte Live-Aufrufe für einen separaten, manuell ausgelösten Smoke-Test.
Komplettes Projekt: Ein Recherche-Assistent mit Tool-Loop
Die einzelnen Bausteine lassen sich zu einem funktionsfähigen Mini-Projekt zusammensetzen: einem Assistenten, der so lange Werkzeuge aufruft, bis er eine finale Antwort geben kann. Das ist das Grundmuster hinter den meisten agentischen Anwendungen, von einfachen Rechenaufgaben bis zu komplexen Recherche-Workflows mit mehreren verketteten Werkzeugen. Das folgende Skript kombiniert Tool-Calling aus Schritt 8 mit der Kostenprotokollierung aus Schritt 12 und fügt eine Obergrenze für die Rundenzahl hinzu, damit ein fehlerhaftes Werkzeug nicht in eine Endlosschleife läuft.
import os, json, time
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
client = OpenAI(api_key=os.environ["XAI_API_KEY"], base_url="https://api.x.ai/v1")
def berechne(ausdruck: str) -> str:
try:
return str(eval(ausdruck, {"__builtins__": {}}))
except Exception as fehler:
return f"Fehler: {fehler}"
tools = [{
"type": "function",
"function": {
"name": "berechne",
"description": "Wertet einen einfachen mathematischen Ausdruck aus.",
"parameters": {
"type": "object",
"properties": {"ausdruck": {"type": "string"}},
"required": ["ausdruck"],
},
},
}]
verfuegbare_funktionen = {"berechne": berechne}
def agenten_schleife(aufgabe: str, max_runden: int = 5):
messages = [{"role": "user", "content": aufgabe}]
gesamtkosten = 0.0
for runde in range(max_runden):
response = client.chat.completions.create(
model="grok-4.7", messages=messages, tools=tools, tool_choice="auto"
)
usage = response.usage
gesamtkosten += (usage.prompt_tokens / 1_000_000) * 2.0
gesamtkosten += (usage.completion_tokens / 1_000_000) * 6.0
nachricht = response.choices[0].message
messages.append(nachricht)
if not nachricht.tool_calls:
print(f"\nAntwort nach {runde + 1} Runde(n), Kosten: ${gesamtkosten:.6f}")
return nachricht.content
for tool_call in nachricht.tool_calls:
funktion = verfuegbare_funktionen[tool_call.function.name]
args = json.loads(tool_call.function.arguments)
ergebnis = funktion(**args)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": ergebnis,
})
return "Maximale Rundenzahl erreicht, keine finale Antwort."
if __name__ == "__main__":
antwort = agenten_schleife("Was ist (48 * 12) + 970, und erkläre kurz das Ergebnis?")
print(antwort)
Beim Ausführen protokolliert das Skript die Kosten pro Runde und bricht spätestens nach fünf Durchläufen ab, damit eine fehlerhafte Funktion keine Endlosschleife auslöst. Die verwendete eval()-Funktion dient hier nur der Demonstration, in einem echten Projekt solltest du mathematische Ausdrücke mit einer sicheren Bibliothek wie numexpr auswerten statt mit dem eingebauten eval.
Das Grundmuster aus diesem Skript, Modell fragen, prüfen ob ein Werkzeug gebraucht wird, Werkzeug ausführen, Ergebnis zurückspielen, lässt sich beliebig erweitern: um eine Websuche, eine Datenbankabfrage oder einen Aufruf an ein internes API. Weitere Beispiele und aktualisierte Snippets pflegt xAI im offiziellen GitHub-Repository, ein guter Ausgangspunkt, wenn sich die Parameter der API nach dem Erscheinen dieses Artikels weiterentwickeln.
Grok API im Vergleich: Preise, Kontext und Benchmarks
Grok 4.7 ist nicht das einzige Modell, das sich für agentische Workflows und lange Kontexte eignet. Die folgende Tabelle stellt die drei Modelle gegenüber, die laut aktuellen Release-Informationen im September 2026 neu erschienen sind. Qwen3.8-Omni-Flash von Alibaba fällt dabei durch seinen Ansatz auf: Statt nur Text zu verarbeiten, nimmt es zusätzlich Bilder, Audio und Video als Eingabe entgegen und gibt Text als Ergebnis zurück, ein deutlich breiteres Eingabespektrum als bei Grok 4.7, das sich aktuell auf Text und Bilder konzentriert.
| Modell | Anbieter | Release | Kontextfenster | Besonderheit |
|---|---|---|---|---|
| Grok 4.7 | xAI | 21. September 2026 | 500.000 Token | 2 $/6 $ pro Mio. Token, 46,3 % auf CursorBench 4.0 |
| Qwen3.8-Omni-Flash | Alibaba | 18. September 2026 | laut Herstellerangabe modellspezifisch | Verarbeitet Text, Bild, Audio und Video als Eingabe |
| GLM-5.3-Flash | Z.ai | September 2026 | 1.048.576 Token | MoE, 320 Mrd. Gesamt- / 18 Mrd. aktive Parameter, MIT-Lizenz |
Die Tabelle zeigt vor allem eines: Es lohnt sich, das Kontextfenster nicht isoliert zu betrachten. GLM-5.3-Flash bietet mit über einer Million Token zwar den größeren Speicher, ist aber offen lizenziert und eher für selbst gehostete Setups gedacht. Grok 4.7 punktet stattdessen mit einem klaren Preis pro Token und einer direkten API, die sich ohne eigene Infrastruktur nutzen lässt. Wer bereits mit anderen Anbietern arbeitet, findet in unseren Tutorials zu OpenAI, Claude, Gemini und DeepSeek vergleichbare Einstiegsanleitungen. Am Ende entscheidet meist der konkrete Anwendungsfall: Für ein schnell startendes SaaS-Produkt ohne eigene GPU-Infrastruktur ist eine gehostete API wie Grok 4.7 in der Regel der pragmatischere Einstieg, für Projekte mit strengen Datenresidenz-Anforderungen kann ein offen lizenziertes Modell wie GLM-5.3-Flash auf eigener Hardware die bessere Wahl sein.
Kostenbeispiel: Ein typisches DACH-Projekt durchrechnen
Preise pro Million Token wirken abstrakt, bis du sie auf ein konkretes Projekt umrechnest. Nimm als Beispiel einen internen Support-Chatbot für ein mittelständisches Unternehmen mit 3.000 Anfragen pro Monat. Jede Anfrage besteht im Schnitt aus 800 Input-Token (Systemprompt, Verlauf und Nutzerfrage) und 300 Output-Token für die Antwort.
anfragen_pro_monat = 3000
input_token_pro_anfrage = 800
output_token_pro_anfrage = 300
input_kosten = (anfragen_pro_monat * input_token_pro_anfrage / 1_000_000) * 2.0
output_kosten = (anfragen_pro_monat * output_token_pro_anfrage / 1_000_000) * 6.0
gesamt = input_kosten + output_kosten
print(f"Input-Kosten: ${input_kosten:.2f}")
print(f"Output-Kosten: ${output_kosten:.2f}")
print(f"Gesamt/Monat: ${gesamt:.2f}")
# Erwartete Ausgabe:
# Input-Kosten: $4.80
# Output-Kosten: $5.40
# Gesamt/Monat: $10.20
Für dieses Beispiel liegt die monatliche Rechnung bei rund 10 US-Dollar, deutlich unter dem, was viele Teams intuitiv schätzen. Der Betrag wächst allerdings schnell, sobald du das große Kontextfenster nutzt: Reichst du bei jeder Anfrage zusätzlich ein 50.000 Token langes Handbuch als Kontext ein, steigen die Input-Kosten allein durch diesen Posten auf rund 300 US-Dollar im Monat. Rechne solche Szenarien immer konkret durch, bevor du dich für eine Architektur mit dauerhaft großem Kontext entscheidest, und ziehe wo möglich eine Zusammenfassung oder eine Vorfilterung der Dokumente in Betracht, um den Kontext klein zu halten.
Häufige Fehler bei der Grok-API-Integration
Die folgenden Fehler tauchen in Grok-API-Projekten immer wieder auf, unabhängig davon, ob es sich um ein Wochenend-Prototyp oder ein produktives System handelt. Die meisten lassen sich mit wenigen Zeilen zusätzlichem Code vermeiden, wenn du sie von Anfang an im Hinterkopf behältst statt sie erst nach einem Vorfall zu beheben.
- API-Key im Quellcode statt in Umgebungsvariablen: Ein versehentlich gepushter Key landet oft innerhalb weniger Stunden in automatisierten Scans und wird missbraucht. Nutze konsequent
.env-Dateien und.gitignore, und prüfe mit einem Tool wiegit-secrets, ob bereits alte Commits einen Schlüssel enthalten. - Fehlendes Ausgabenlimit: Ohne Hard-Limit in der xAI-Konsole kann eine fehlerhafte Schleife über Nacht eine hohe Rechnung verursachen. Ein Limit von wenigen Dollar für Testumgebungen kostet nichts und verhindert den Ernstfall zuverlässig.
- Streaming ohne Null-Prüfung: Wer
chunk.choices[0].delta.contentungeprüft aneinanderhängt, bekommtTypeError-Abstürze bei leeren Chunks, meist genau dann, wenn ein Nutzer gerade live zusieht. - Tool-Calling ohne Rundenlimit: Eine Agenten-Schleife ohne Obergrenze kann bei einer fehlerhaften Funktion endlos weiterlaufen und Kosten produzieren, ohne dass eine sichtbare Fehlermeldung erscheint.
- Große Dateien ohne Token-Schätzung senden: Wer den Inhalt eines ganzen Repositorys ungeprüft einreicht, überschreitet schneller als gedacht das Kontextfenster oder das Budget aus dem Kostenbeispiel weiter oben.
- Model-Alias fest verdrahten: Wenn xAI einen Alias wie
grok-4.7irgendwann durch eine neue Versions-Kennung ersetzt, bricht harter Code ohne Fallback-Logik. Lies den Modellnamen aus einer Konfigurationsvariable statt ihn im Code zu wiederholen.
Troubleshooting: Die häufigsten Probleme und Lösungen
Auch bei einer sauberen Implementierung tauchen typische Stolpersteine auf, meist beim ersten Kontakt mit der API oder beim Übergang von einem lokalen Test in eine gehostete Umgebung. Die folgende Übersicht sortiert die häufigsten Fehlermeldungen nach Ursache und Lösung, damit du beim Debuggen nicht bei null anfängst.
| Symptom | Wahrscheinliche Ursache | Lösung |
|---|---|---|
| AuthenticationError beim ersten Aufruf | API-Key falsch kopiert oder Leerzeichen in der .env-Datei | Key neu generieren, Datei ohne Anführungszeichen und Leerzeichen speichern |
| Connection refused zur Basis-URL | Falsche oder veraltete base_url im Client | base_url exakt auf https://api.x.ai/v1 setzen |
| RateLimitError bei parallelen Anfragen | Zu viele gleichzeitige Requests für das gebuchte Kontingent | Exponentiellen Backoff einbauen, Anfragen bündeln oder Kontingent erhöhen |
| Leere Antwort trotz Status 200 | Stream-Chunks werden ohne Prüfung auf None verarbeitet | delta.content vor der Ausgabe auf Existenz prüfen |
| tool_calls ist None | Modell hat direkt geantwortet, ohne ein Werkzeug zu nutzen | Vor dem Zugriff auf tool_calls prüfen, ob die Liste vorhanden und nicht leer ist |
| JSONDecodeError bei Funktionsargumenten | Modell liefert unvollständiges JSON bei sehr langen Parametern | Try/Except um json.loads legen und bei Fehlschlag erneut anfragen |
| Kontextfenster überschritten | Eingabetext plus Antwort übersteigt 500.000 Token | Dokumente vorab chunk-weise zusammenfassen statt komplett einreichen |
| Unerwartet hohe Rechnung | Fehlendes Ausgabenlimit kombiniert mit einer Endlosschleife | Hard-Limit in der Konsole setzen, Kosten pro Anfrage protokollieren |
| ImportError für openai-Paket | Virtuelle Umgebung nicht aktiviert oder falsche Python-Version | .venv aktivieren, mit python –version die Version prüfen |
Erweiterte Tipps für den Produktivbetrieb
Sobald der Grundaufbau läuft, lohnen sich einige Anpassungen, bevor du das Projekt produktiv einsetzt. Setze zuerst auf temperature-Werte zwischen 0,1 und 0,3 für Aufgaben, die konsistente, wiederholbare Antworten brauchen, etwa Datenextraktion oder Code-Reviews. Für kreative Aufgaben wie Textentwürfe kannst du auf 0,7 bis 0,9 gehen.
Nutze außerdem response_format={"type": "json_object"}, wenn du strukturierte Daten statt Fließtext brauchst. Das reduziert nachträgliches Parsing deutlich und verhindert, dass das Modell erklärenden Text vor oder nach dem eigentlichen JSON einfügt. Bei sehr langen Kontexten aus Schritt 11 hilft ein zweistufiger Ansatz: Fasse große Dokumente zunächst in Abschnitten zusammen und reiche erst die verdichtete Version in einer finalen Anfrage ein, das spart Kosten und Latenz gleichermaßen.
Systemnachrichten wiederverwenden statt neu formulieren
Ein häufig übersehener Hebel ist die Systemnachricht. Viele Projekte formulieren sie bei jeder Anfrage leicht anders, etwa weil sie dynamisch aus Vorlagen zusammengesetzt wird. Das erschwert nicht nur das Debugging, sondern verhindert auch, dass wiederkehrende Anfragemuster konsistent bleiben. Lege die Systemnachricht stattdessen als feste Konstante pro Anwendungsfall an, etwa SYSTEM_SUPPORT und SYSTEM_CODE_REVIEW, und variiere ausschließlich die Nutzer-Nachricht. Das macht Antworten reproduzierbarer und erleichtert es, Regressionen nach einem Prompt-Update in einem einfachen A/B-Test zu erkennen.
Für Teams, die mehrere Modelle parallel evaluieren, lohnt sich ein Vergleichslauf über eine gemeinsame Testsuite. Unser Tutorial zum Aufbau eines eigenen LLM-Benchmarks zeigt, wie du CursorBench-ähnliche Tests lokal nachbaust, um Grok 4.7 gegen andere Modelle auf deinen eigenen Aufgaben zu testen statt dich allein auf Herstellerzahlen zu verlassen. Aktiviere zusätzlich strukturiertes Logging über response.id, jede Antwort trägt eine eindeutige Anfrage-ID, mit der sich Supportanfragen an xAI deutlich schneller klären lassen.
Sicherheit: API-Keys und Nutzerdaten schützen
Wer die Grok API in eine Anwendung mit echten Nutzern einbaut, sollte den API-Key niemals im Frontend-Code ausliefern. Jeder Aufruf gehört hinter einen eigenen Backend-Endpunkt, der den Key serverseitig hält und selbst Rate-Limiting für einzelne Nutzer umsetzt. Das verhindert, dass ein einzelner böswilliger Nutzer über eine offengelegte Anfrage dein gesamtes Budget verbraucht.
Achte zusätzlich darauf, welche Nutzerdaten du in den messages-Verlauf aufnimmst. Personenbezogene Daten in Prompts unterliegen in Deutschland und der EU der DSGVO, unabhängig davon, ob sie an einen US-amerikanischen oder europäischen Anbieter geschickt werden. Prüfe die aktuellen Auftragsverarbeitungsbedingungen von xAI, bevor du sensible Daten wie Gesundheits- oder Finanzinformationen verarbeitest, und maskiere im Zweifel Namen und Kontaktdaten vor dem Versand an die API.
Ein weiterer Punkt, der in der Praxis oft zu kurz kommt: Lösche oder rotiere API-Keys, sobald ein Mitarbeiter das Projekt verlässt oder ein Test-Key nicht mehr gebraucht wird. Ein einzelner, dauerhaft geteilter Schlüssel für ein ganzes Team macht es nachträglich fast unmöglich nachzuvollziehen, welcher Prozess für welche Kosten oder welchen Missbrauch verantwortlich war. Lege stattdessen pro Umgebung, Entwicklung, Staging und Produktion, jeweils einen eigenen Key an, und dokumentiere in einem internen Wiki, welcher Key wofür gedacht ist.
Häufig gestellte Fragen zur Grok API
Ist die Grok API kostenlos nutzbar?
Nein. Die Grok API verlangt eine hinterlegte Zahlungsmethode und berechnet nach Token, aktuell 2 US-Dollar pro Million Input-Token und 6 US-Dollar pro Million Output-Token für Grok 4.7. Ein dauerhaftes kostenloses Kontingent bietet xAI nicht.
Brauche ich ein eigenes xAI-SDK für Python?
Nein. Da die Grok API zum OpenAI-Format kompatibel ist, reicht das Standardpaket openai, du musst nur base_url und api_key anpassen.
Wie groß ist das Kontextfenster von Grok 4.7?
Laut aktuellem Modellhinweis von xAI liegt es bei 500.000 Token, das entspricht je nach Textart mehreren hundert Seiten in einer einzigen Anfrage.
Unterstützt die Grok API Streaming und Tool-Calling gleichzeitig?
Ja. Beide Funktionen lassen sich kombinieren, in der Praxis empfiehlt es sich aber, Tool-Calling zunächst ohne Streaming zu testen, da sich die vollständigen Funktionsargumente bei gestreamten Antworten über mehrere Chunks verteilen können.
Kann ich mit der Grok API auch Bilder analysieren lassen?
Ja, Grok 4.7 verarbeitet Bilder über den image_url-Content-Typ, entweder als externe URL oder als Base64-codierte Data-URL für lokale Dateien.
Was passiert, wenn ich das Rate Limit überschreite?
Die API antwortet mit einem RateLimitError und dem HTTP-Status 429. Ein exponentieller Backoff mit steigender Wartezeit zwischen den Wiederholungsversuchen löst das Problem in den meisten Fällen zuverlässig.
Wie unterscheidet sich Grok 4.7 von Vorgängerversionen?
Laut dem xAI-Release-Eintrag erzielt Grok 4.7 auf CursorBench 4.0 einen Wert von 46,3 Prozent gegenüber 40,4 Prozent beim Vorgänger, ein Plus von 5,9 Prozentpunkten, bei gleichzeitig größerem Kontextfenster.
Ist die Grok API DSGVO-konform einsetzbar?
Das hängt von der konkreten Datenverarbeitung ab. Prüfe vor dem Einsatz mit personenbezogenen Daten die aktuellen Auftragsverarbeitungsbedingungen von xAI und maskiere sensible Informationen, wo es möglich ist.
Kann ich bestehenden OpenAI-Code ohne größere Änderungen auf die Grok API umstellen?
In den meisten Fällen ja. Da die Grok API dieselbe Anfragestruktur wie die OpenAI-API verwendet, reicht es üblicherweise, die Basis-URL, den API-Key und den Modellnamen anzupassen. Prüfe danach gezielt, ob dein Projekt OpenAI-spezifische Zusatzfunktionen nutzt, die bei xAI eventuell anders heißen oder fehlen.
Wie behalte ich bei vielen parallelen Anfragen den Überblick über die Kosten?
Protokolliere das usage-Objekt jeder Antwort in eine zentrale Datenbank oder ein Monitoring-Tool, statt es nur auf der Konsole auszugeben. Kombiniert mit einem Ausgabenlimit in der xAI-Konsole lässt sich so auch bei asynchronen Anfragen aus Schritt 10 jederzeit nachvollziehen, welcher Teil deiner Anwendung wie viel Budget verbraucht.




