Claude API: Erste App auf einem Ubuntu-24.04-VPS
Erstellen Sie eine Python-CLI für Log-Diagnosen mit Claude API: Schlüssel sicher speichern, Streaming nutzen, Fehler typisieren und Kosten per Token-Limit begrenzen.
Was Sie erstellen
Ein Befehlszeilenprogramm auf einem frisch eingerichteten Ubuntu-24.04-VPS. Sie übergeben ihm eine Fehlermeldung oder einen Log-Ausschnitt per Pipe und erhalten eine Diagnose in einfachem Englisch: journalctl -u nginx -n 50 | explain. Das Programm umfasst vielleicht 60 Zeilen Python. Es behandelt alle wichtigen Aspekte einer echten Claude-API-Anwendung: einen korrekt gespeicherten Schlüssel, eine virtualenv, die Antwortstrukturen des SDK, Streaming, die typisierte Ausnahmekette und eine systemd-Unit, damit es ohne manuelle Eingriffe ausgeführt wird.
Ich habe dieses Projekt bewusst gewählt. In den meisten Tutorials für die erste API-Anwendung erstellen Sie einen Chatbot, den Sie danach nie wieder öffnen. Ein Log-Erklärer ist auf einem Server vom ersten Tag an nützlich. Außerdem führt er Sie durch die beiden Punkte, die Anfänger tatsächlich häufig falsch machen: das korrekte Auslesen des Antwortobjekts und die Kontrolle der Ausgaben. Die API rechnet pro Token ab. Eine Obergrenze gibt es nur, wenn Sie selbst eine festlegen. Deshalb ist die Kostenkontrolle hier ein Teil des Entwurfs und kein nachträglicher Zusatz. Dieselbe Disziplin ist wichtig, wenn Sie später zu Claude Code auf diesem VPS in tmux ausführen wechseln.
Einen API-Key über die Console beziehen
Der API-Zugriff wird in der Anthropic Console unter platform.claude.com verwaltet. Registrieren Sie sich dort und erstellen Sie anschließend unter Settings → API Keys einen Key (der Dokumentationslink führt direkt zu platform.claude.com/settings/keys). Der Key wird nur einmal angezeigt, beginnt mit sk-ant- und kann später nicht erneut abgerufen werden. Kopieren Sie ihn sofort oder löschen Sie ihn und stellen Sie einen neuen aus.
Zu den Kosten: Im Juli 2026 gibt es für die API keinen dauerhaft kostenlosen Tarif. Laut der Preisdokumentation von Anthropic erhalten neue Benutzer ein kleines Guthaben zum Testen. Die genaue Höhe entspricht dem Betrag, den die Console bei der Registrierung anzeigt. Sobald das Guthaben aufgebraucht ist, müssen Sie das Konto aufladen, bevor Anfragen erfolgreich ausgeführt werden. Dieses Guthaben ist unabhängig von einem claude.ai-Abonnement. Ein Pro- oder Max-Tarif umfasst kein API-Guthaben. Umgekehrt gewährt ein API-Key keinen Zugriff auf die Chat-Anwendung. Wenn Sie zwischen einem Abonnement und der API abwägen, ist das ein eigenes Thema: welchen Claude-Tarif Sie tatsächlich benötigen.
Erstellen Sie den Key mit einem begrenzten Geltungsbereich für ein einzelnes Projekt oder einen einzelnen Server. Wenn ein Key offengelegt wird, und bei einer ausreichend langen Nutzungsdauer wird das irgendwann passieren, sollten Sie ihn widerrufen können, ohne alle anderen Ressourcen zu beeinträchtigen.
Der Schlüssel gehört nicht in .bashrc
Der naheliegende Schritt ist export ANTHROPIC_API_KEY=sk-ant-... in ~/.bashrc. Tun Sie das nicht. Dabei entstehen drei voneinander unabhängige Probleme:
- Jeder Prozess erbt ihn. Eine in Ihrer Login-Shell exportierte Umgebungsvariable wird an alles weitergegeben, was Sie starten: an die Webanwendung, an den Crash-Reporter, der die Umgebung hilfreich in einen Fehlerbericht schreibt, und an die
phpinfo()-Seite, die jemand aktiviert gelassen hat. Die Angriffsfläche des Schlüssels umfasst dadurch alles, was dieser Benutzer jemals ausführt. - Beim Eingeben landet er in
~/.bash_history. Führen Sie den Export einmal manuell aus, liegt der Schlüssel dauerhaft in einer Klartextdatei und wird in jedes Backup Ihres Home-Verzeichnisses übernommen. - Er ist nicht vorhanden, wenn systemd ihn benötigt. Dienste lesen
.bashrcnicht. Das Muster scheitert daher genau dann, wenn Sie das Skript in eine Unit umwandeln, meist in Form eines rätselhaften 401-Fehlers um 6 Uhr morgens.
Auf einem Server verwenden Sie stattdessen eine eigene Umgebungsdatei mit 600-Berechtigungen, die nur von dem benötigten Prozess geladen wird:
sudo mkdir -p /opt/explain
sudo install -m 600 -o root -g root /dev/null /etc/claude-explain.env
printf 'ANTHROPIC_API_KEY=sk-ant-YOUR-KEY-HERE\n' | sudo tee /etc/claude-explain.env >/dev/nullVerwenden Sie tee aus einer printf-Ausgabe statt eines Editors, wenn der Schlüssel nicht in temporären Editor-Dateien landen soll. Prüfen Sie in beiden Fällen mit ls -l /etc/claude-explain.env, ob die Datei -rw------- liest und root gehört. Interaktive Shells erhalten den Schlüssel bei jedem Aufruf über einen Wrapper (siehe unten). systemd erhält ihn über EnvironmentFile=. root liest die Datei, bevor die Berechtigungen reduziert werden, sodass der Dienstbenutzer keinen Lesezugriff darauf benötigt. Der Schlüssel erscheint niemals im Code, in Git, in der Ausgabe von ps oder in der Shell-History.
Installieren Sie das SDK in einer venv
Ubuntu 24.04 liefert Python 3.12 mit der Durchsetzung von PEP 668 aus. Daher schlägt ein ungeschütztes pip install anthropic gegen den Systeminterpreter mit error: externally-managed-environment fehl. Das Betriebssystem arbeitet hier wie vorgesehen. Verwenden Sie eine virtuelle Umgebung:
sudo apt update && sudo apt install -y python3-venv
sudo python3 -m venv /opt/explain/venv
sudo /opt/explain/venv/bin/pip install anthropicAuf einem Server ist keine Aktivierung erforderlich: Der direkte Aufruf von /opt/explain/venv/bin/python verwendet immer die Pakete der venv.
Erster Aufruf und korrektes Lesen der Antwort
import anthropic
client = anthropic.Anthropic() # reads ANTHROPIC_API_KEY from the environment
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1000,
messages=[{"role": "user", "content": "Explain what a systemd unit file is in three sentences."}],
)
for block in response.content:
if block.type == "text":
print(block.text)Zwei Dinge in diesen zwölf Zeilen vermitteln den größten Teil des mentalen Modells der API. Erstens liest anthropic.Anthropic() ohne Argumente den Schlüssel aus der Umgebung. Übergeben Sie ihn niemals als Zeichenfolgenliteral. Zweitens ist response.content eine Liste von Inhaltsblöcken, keine Zeichenfolge. Wenn Sie sie direkt ausgeben, erhalten Sie die typische Ausgabe von Einsteigern:
[TextBlock(citations=None, text='A systemd unit file is...', type='text')]Das ist kein Fehler, sondern die Repräsentation des Objekts. Antworten können mehrere Blocktypen enthalten, etwa Text, Tool-Aufrufe und Denkprozesse. Iterieren Sie daher über die Blöcke und prüfen Sie block.type == "text", bevor Sie auf .text zugreifen. Wenn Sie diese Schleife von Anfang an einbauen, tritt eine ganze Klasse von Verwirrung nach dem Muster „die Ausgabe ist unbrauchbar“ gar nicht erst auf.
Verwenden Sie exakt die Modell-ID claude-opus-4-8. IDs der aktuellen Generation enthalten kein Datum. Widerstehen Sie dem Reflex, an die ID ein Datumssuffix anzuhängen, wie es ältere Blogbeiträge nahelegen. Das führt zu einem 404-Fehler, der weiter unten behandelt wird.
Das eigentliche Tool: Erklärung
Hier ist das vollständige Programm. Es liest von stdin und gibt eine Diagnose als Stream aus. Fehler werden behandelt:
#!/usr/bin/env python3
"""explain: pipe an error or log excerpt in, get a diagnosis out."""
import sys
import anthropic
MODEL = "claude-opus-4-8"
def main() -> int:
text = sys.stdin.read().strip()
if not text:
print("usage: journalctl -u nginx -n 50 | explain", file=sys.stderr)
return 1
client = anthropic.Anthropic()
try:
with client.messages.stream(
model=MODEL,
max_tokens=1500,
system=(
"You are a senior Linux sysadmin. The user pipes you server "
"logs or error output. Name the most likely cause outright, "
"then give the commands to confirm and fix it. Be terse."
),
messages=[{"role": "user", "content": text}],
) as stream:
for chunk in stream.text_stream:
print(chunk, end="", flush=True)
print()
except anthropic.RateLimitError as e:
retry_after = e.response.headers.get("retry-after", "60")
print(f"rate limited; retry in {retry_after}s", file=sys.stderr)
return 2
except anthropic.APIStatusError as e:
print(f"API error {e.status_code}: {e.message}", file=sys.stderr)
return 2
except anthropic.APIConnectionError:
print("network error reaching the API", file=sys.stderr)
return 2
return 0
if __name__ == "__main__":
sys.exit(main())Speichern Sie es als /opt/explain/explain.py. Fügen Sie anschließend einen Wrapper hinzu, der den Schlüssel für die interaktive Verwendung lädt:
sudo tee /usr/local/bin/explain >/dev/null <<'EOF'
#!/bin/sh
set -a; . /etc/claude-explain.env; set +a
exec /opt/explain/venv/bin/python /opt/explain/explain.py "$@"
EOF
sudo chmod 755 /usr/local/bin/explain(Der Wrapper muss über sudo ausgeführt werden, oder die Umgebungsdatei benötigt eine Gruppe, der Ihr Administratorkonto angehört. Entscheiden Sie sich bewusst für eine dieser Varianten, statt die Dateiberechtigungen auf 644 zu lockern.)
Warum Streaming. client.messages.stream gibt die Tokens aus, sobald sie eintreffen, statt während der gesamten Generierung still zu bleiben. Außerdem werden dadurch HTTP-Timeouts bei langen Ausgaben vermieden. Das SDK lehnt sehr große max_tokens-Werte bei nicht gestreamten Aufrufen aus genau diesem Grund tatsächlich ab. Wenn Sie das zusammengesetzte Objekt anschließend benötigen, rufen Sie stream.get_final_message() innerhalb des with-Blocks auf.
Warum diese Reihenfolge der Ausnahmen. Das SDK löst typisierte Ausnahmen aus, und zwar in der Reihenfolge von spezifisch nach allgemein: RateLimitError steht für einen 429-Fehler und enthält einen retry-after-Header, der angibt, wie lange gewartet werden soll. APIStatusError deckt andere Antworten außerhalb des Bereichs 2xx ab. Prüfen Sie e.status_code >= 500 auf serverseitige Probleme. APIConnectionError bedeutet, dass überhaupt keine Antwort eingegangen ist. Bevor Sie eine Wiederholungsschleife implementieren, beachten Sie außerdem: Das SDK wiederholt 429- und 5xx-Fehler bereits selbst, standardmäßig zweimal mit exponentiellem Backoff (max_retries auf dem Client). Wenn except ausgeführt wird, sind diese Wiederholungsversuche bereits aufgebraucht. In einem CLI sollten Sie den Fehler daher melden und das Programm beenden, statt zu warten und weitere Anfragen zu senden.
Kostenkontrolle
Dies verdient einen eigenen Abschnitt, weil die API über das von Ihnen konfigurierte Limit hinaus keine integrierte monatliche Obergrenze hat und sich jeder Fehler hier unbemerkt auswirkt.
max_tokens ist Ihr Ausgabenlimit pro Aufruf. Output-Tokens sind die teure Richtung. Bei Opus 4.8 kosten sie das Fünffache des Input-Preises. max_tokens begrenzt, wie viele Output-Tokens das Modell höchstens erzeugen darf. Ein außer Kontrolle geratener Prompt kann dadurch nicht mehr Output kosten, als Sie zugelassen haben. Legen Sie den Wert passend zur Aufgabe fest: 1,500 reichen für die Diagnose eines Logs aus; für eine Klassifizierungsaufgabe genügen 100. Wenn Antworten mit stop_reason: "max_tokens" mitten im Satz abbrechen, ist der Wert zu niedrig. Erhöhen Sie ihn bewusst, statt standardmäßig einen sehr hohen Wert zu verwenden.
Zählen Sie vor dem Senden. Auch Input kostet Geld, und Logs sind umfangreich. Die API bietet dafür einen kostenlos nutzbaren Zählendpunkt. Er hat eigene Rate Limits, die von der Nachrichtenerstellung getrennt sind:
count = client.messages.count_tokens(
model="claude-opus-4-8",
messages=[{"role": "user", "content": big_log_text}],
)
print(count.input_tokens)Damit verhindern Sie, dass versehentlich ein 2 GB großes Log durch das Tool geleitet wird. Verwenden Sie dafür nicht tiktoken. Das ist der Tokenizer von OpenAI und zählt Claude-Tokens bei typischem Text um etwa 15–20% zu niedrig, bei Code noch stärker.
Wählen Sie das Modell nach der Aufgabe, nicht aus Loyalität. Im Juli 2026 kostet Opus 4.8 (claude-opus-4-8) $5 pro 1 Million Input-Tokens und $25 pro 1 Million Output-Tokens. Haiku 4.5 (claude-haiku-4-5) kostet $1/$5 und bietet einen Kontext von 200K. Sonnet 5 (claude-sonnet-5) liegt mit $3/$15 dazwischen. Bis zum 31. August 2026 gilt dort ein Einführungspreis von $2/$10. Konkret kostet ein Logauszug mit 2,000 Tokens und einer Antwort mit 500 Tokens auf Opus etwa $0.0225 und auf Haiku $0.0045. Beginnen Sie mit Opus, solange Sie die Ausgabequalität bewerten. Testen Sie anschließend dieselben Prompts mit Haiku. Bei einfachen Transformationen mit hohem Volumen ist der Unterschied oft nicht erkennbar, obwohl der Preis nur ein Fünftel beträgt. Prüfen Sie die aktuellen Werte auf der Preisseite, bevor Sie diese Angaben fest in ein Budget übernehmen.
Batches für alles, was warten kann. Die Batches API verarbeitet Anfragen asynchron zu 50% der Standardpreise. Die meisten Batches sind innerhalb einer Stunde abgeschlossen. Nächtliche Zusammenfassungen, Nachverarbeitungen und Massenklassifizierungen gehören dorthin, ebenso alles, worauf kein Mensch unmittelbar wartet.
Prompt-Caching für wiederholten Kontext. Wenn jeder Aufruf denselben umfangreichen System-Prompt oder dasselbe Runbook erneut sendet, markieren Sie ihn als cachefähig:
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1000,
system=[{
"type": "text",
"text": RUNBOOK_TEXT, # the same 30K tokens on every call
"cache_control": {"type": "ephemeral"},
}],
messages=[{"role": "user", "content": question}],
)
print(response.usage.cache_read_input_tokens) # non-zero from the second call onDas Schreiben in den Cache kostet etwa das 1.25-Fache des Input-Preises. Cache-Lesevorgänge kosten etwa das 0.1-Fache. Die TTL beträgt 5 Minuten. Bereits der zweite Aufruf innerhalb dieses Zeitfensters deckt damit die Kosten des ersten Aufrufs. Es gibt zwei Einschränkungen. Der gecachte Präfix muss das modellspezifische Mindestvolumen überschreiten. Bei Opus sind das einige tausend Tokens. Ein kurzer System-Prompt wird daher stillschweigend überhaupt nicht gecacht. Wenn cache_read_input_tokens bei identischen Aufrufen weiterhin den Wert null hat, ändert sich wahrscheinlich etwas in Ihrem Präfix bei jedem Request. Ein Zeitstempel ist die häufigste Ursache.
Behalten Sie im Blick, was als Input zählt. System-Prompts, Tool-Definitionen und bei mehrstufigen Konversationen der gesamte Verlauf, den Sie bei jedem Turn erneut senden, werden als Input-Tokens abgerechnet. Eine Chat-Schleife, die den Verlauf nie kürzt, lässt die Kosten quadratisch wachsen. Die vollständige Abrechnung sollten Sie verstehen, bevor Sie eine dialogbasierte Anwendung erstellen: wie sich der Tokenverbrauch und die Abrechnung von Claude tatsächlich zusammensetzen.
Unter systemd ausführen
Der Nutzen einer konsequenten Verwendung von Umgebungsdateien: ein Timer, der jeden Morgen die Fehler des Vortags zusammenfasst.
# /etc/systemd/system/log-digest.service
[Unit]
Description=Daily error-log digest via the Claude API
[Service]
Type=oneshot
User=explain
Group=systemd-journal
EnvironmentFile=/etc/claude-explain.env
ExecStart=/bin/sh -c 'journalctl -p err --since yesterday | /opt/explain/venv/bin/python /opt/explain/explain.py >> /var/log/log-digest.txt'# /etc/systemd/system/log-digest.timer
[Unit]
Description=Run the log digest every morning
[Timer]
OnCalendar=06:15
Persistent=true
[Install]
WantedBy=timers.targetsudo useradd -r -s /usr/sbin/nologin explain
sudo touch /var/log/log-digest.txt && sudo chown explain /var/log/log-digest.txt
sudo systemctl daemon-reload
sudo systemctl enable --now log-digest.timer
sudo systemctl start log-digest.service # test it once, right nowBeachten Sie, was EnvironmentFile= ermöglicht: systemd liest die Datei im Besitz von root mit Modus 600, bevor es zum unprivilegierten Benutzer explain wechselt. Dadurch erhält der Prozess die Variable, während der Benutzer die Schlüsseldatei nicht lesen kann. Die Gruppe systemd-journal gewährt Zugriff auf die Logs. Testen Sie mit einem manuellen systemctl start und lesen Sie journalctl -u log-digest.service, statt bis 06:15 zu warten und erst dann einen Tippfehler zu finden. Wenn dieses Muster über eine Shell-Pipeline hinauswächst, lässt sich derselbe Ansatz mit dem Schlüssel in der Umgebungsdatei direkt auf Claude-gestützte n8n-Workflows auf demselben Server übertragen.
Fehlerbilder mit den angezeigten Meldungen
401 mit einem gültigen Schlüssel. Die Ausnahme lautet:
anthropic.AuthenticationError: Error code: 401 - {'type': 'error', 'error': {'type': 'authentication_error', 'message': 'invalid x-api-key'}, 'request_id': 'req_011CSHoEeqs5C35K2UUqR7Fy'}Wenn der Schlüssel in Ihrer Shell funktioniert, der Dienst aber einen 401-Fehler zurückgibt, hat der Dienst den Schlüssel nicht erhalten. Beachten Sie, dass systemd .bashrc nicht liest. Prüfen Sie, ob EnvironmentFile= auf den richtigen Pfad verweist. Weitere Ursachen sind Anführungszeichen in der Env-Datei (ANTHROPIC_API_KEY="sk-ant-...": systemd entfernt die Anführungszeichen, aber der . file-Wrapper Ihrer Shell übernimmt sie in den Wert, wenn Sie ungewöhnlich zitieren), nachgestellte Leerzeichen oder ein Schlüssel, den Sie letzte Woche in der Console widerrufen haben.
404 durch einen Tippfehler bei der Modell-ID. Die häufigste Variante besteht darin, eine aktuelle Modell-ID mit einem Datumssuffix zu versehen:
anthropic.NotFoundError: Error code: 404 - {'type': 'error', 'error': {'type': 'not_found_error', 'message': 'model: claude-opus-4-8-20260115'}, 'request_id': 'req_011CSJqymAvNw4bT3qmDdMbA'}IDs der aktuellen Generation müssen exakt wie angegeben verwendet werden: claude-opus-4-8, claude-haiku-4-5, claude-sonnet-5. Kopieren Sie sie aus der Modelldokumentation, niemals aus dem Gedächtnis oder aus einem alten Tutorial.
429 rate_limit_error. Der Fehler-Typ lautet rate_limit_error. Die Antwort enthält einen retry-after-Header mit der Anzahl der Sekunden, die Sie warten müssen. Das SDK hat vor dem Auftreten der Ausnahme bereits zweimal mit Backoff wiederholt. Anhaltende 429-Fehler bedeuten daher, dass Ihre dauerhafte Rate tatsächlich das Limit Ihrer Stufe überschreitet. Stapeln Sie die Verarbeitung oder verteilen Sie sie zeitlich. Verkürzen Sie nicht die Retry-Schleife.
Das Objekt wird ausgegeben, nicht der Text. Die Ausgabe sieht wie [TextBlock(citations=None, text='...', type='text')] aus. Sie haben response.content ausgegeben, anstatt die Blöcke zu durchlaufen und .text aus den Blöcken auszulesen, für die block.type == "text" gilt. Jedes SDK-Beispiel weiter oben macht das korrekt. Kopieren Sie die Schleife.
error: externally-managed-environment. Sie haben pip install mit der System-Python-Version von Ubuntu 24.04 ausgeführt. Verwenden Sie die venv. Verwenden Sie auf einem wichtigen Server niemals --break-system-packages.
Abgeschnittene Antworten. response.stop_reason == "max_tokens" bedeutet, dass das Modell das Ausgabelimit mitten im Gedankengang erreicht hat. Das Verhalten ist erwartungsgemäß. Erhöhen Sie das Limit bewusst.
Sobald Ihre erste Anwendung funktioniert, macht einen AI-Agenten mit Claude erstellen aus denselben API-Aufrufen einen Agenten, der Tools verwendet.
FAQ
Wie viel kostet es, die Claude API auszuprobieren?
Für ein Tool dieser Art ist das tatsächlich wenig. Im Juli 2026 kostet Opus 4.8 5 $ pro 1 Million Eingabe-Tokens und 25 $ pro 1 Million Ausgabe-Tokens. Eine typische Log-Analyse mit einigen tausend Eingabe-Tokens und einigen hundert Ausgabe-Tokens kostet damit ungefähr 2 Cent. Mit Haiku 4.5 (1 $/5 $) sind es weniger als ein halber Cent. Ein Monat mit täglichen Zusammenfassungen kostet weniger als ein Kaffee. Das Risiko liegt nicht im Preis pro Aufruf, sondern in unbegrenzten Schleifen und unbegrenztem max_tokens. Deshalb werden beide Werte in dieser Anleitung explizit festgelegt.
Gibt es ein kostenloses Kontingent für die Claude API?
Im Juli 2026 gibt es kein dauerhaft kostenloses Kontingent. Laut der Preisdokumentation von Anthropic erhalten neue Benutzer eine kleine Menge kostenloser Credits zum Testen der API. Dabei handelt es sich um ein einmaliges Testkontingent. Der genaue Betrag wird bei der Registrierung in der Console angezeigt. Danach müssen Sie das Konto aufladen. Wenn Ihr Ziel keine Grenzkosten pro Anfrage statt Spitzenqualität sind, können Sie ein Open-Weight-Modell mit Ollama selbst hosten und statt Tokens Arbeitsspeicher bezahlen.
Wie schütze ich meinen API-Schlüssel auf einem Server?
Speichern Sie ihn niemals im Code oder in git. Exportieren Sie ihn niemals aus .bashrc. Geben Sie ihn niemals in eine Shell ein, deren Verlauf ihn speichert. Legen Sie ihn in einer Datei ab, die root gehört und die Berechtigungen 600 hat. Laden Sie ihn pro Prozess. Verwenden Sie für die interaktive Nutzung ein Wrapper-Skript und für systemd EnvironmentFile=. Verwenden Sie pro Server oder Projekt einen eigenen Schlüssel, damit Sie einen geleakten Schlüssel gezielt widerrufen können. Wenn der Schlüssel jemals eine Paste-Site oder einen git-Commit erreicht, widerrufen Sie ihn sofort in der Console. Durch das Löschen des Commits wird der Schlüssel nicht wieder sicher.
Mit welchem Claude-Modell sollte ich beginnen?
Beginnen Sie mit claude-opus-4-8, solange Sie prüfen, ob die Ausgaben als Grundlage geeignet sind und Sie die Idee zunächst mit voller Qualität bewerten möchten. Bei einem Hobby-Nutzungsumfang beträgt der Kostenunterschied nur wenige Cent. Sobald der Prompt feststeht, führen Sie Ihre echten Eingaben erneut mit claude-haiku-4-5 aus. Für Zusammenfassungen, Klassifizierung und Log-Triage ist es häufig ebenso gut und kostet nur ein Fünftel. Wechseln Sie anhand von Messwerten zu Haiku oder Sonnet, nicht standardmäßig.