Published on

Claude rechnen lassen: Code-Ausführung für Datenanalyse

Authors

Code-Ausführung: Claude rechnen lassen statt schätzen

TL;DR

Ein abgeschotteter Container mit Python 3.11 und den üblichen Datenbibliotheken, den Sie nicht betreiben. Der wichtigste Anwendungsfall ist unspektakulär: Zahlen rechnen lassen statt schätzen — ein Sprachmodell rechnet nicht zuverlässig, ein Python-Interpreter schon.


Was der Container ist

Ausstattung1 CPU, 5 GiB Arbeitsspeicher, 5 GiB Plattenplatz
Netzzugangkeiner — vollständig abgeschottet
LaufzeitPython 3.11
Lebensdauer30 Tage, über Aufrufe hinweg wiederverwendbar
Kostenkostenfrei zusammen mit Web-Suche und Web-Abruf; sonst ein geringer Stundensatz nach einem großzügigen kostenfreien Kontingent je Organisation

Vorinstalliert sind unter anderem pandas, numpy, scipy, scikit-learn, statsmodels für Auswertung, matplotlib und seaborn für Grafiken, openpyxl, xlsxwriter, python-docx, python-pptx, pypdf und pdfplumber für Dateiformate sowie sympy für Symbolik. Weitere Pakete lassen sich zur Laufzeit nachinstallieren.

Die Deklaration

antwort = client.messages.create(
    model="claude-opus-5",
    max_tokens=16000,
    tools=[{"type": "code_execution_20260521", "name": "code_execution"}],
    messages=[{"role": "user", "content":
               "Berechne Mittelwert und Standardabweichung von "
               "[12, 15, 11, 19, 14, 22, 13, 16]"}],
)

Kein Schema, keine eigene Ausführung. Claude bekommt damit automatisch Zugriff auf Shell-Befehle und Dateioperationen im Container.

Der Blocktyp, den alle falsch abfragen

Das Ergebnis kommt nicht in einem Block namens code_execution_tool_result:

for block in antwort.content:
    if block.type == "text":
        print(block.text)                       # Claudes Erläuterung

    elif block.type == "server_tool_use":
        print(f"Führt aus: {block.name}")       # was gerade passiert

    elif block.type == "bash_code_execution_tool_result":   # DIESER Typ
        ergebnis = block.content
        if ergebnis.type == "bash_code_execution_result":
            if ergebnis.return_code == 0:
                print(ergebnis.stdout)
            else:
                print(f"Fehler: {ergebnis.stderr}")
        else:
            print(f"Werkzeugfehler: {ergebnis.error_code}")

Wer auf code_execution_tool_result prüft, findet nie einen Treffer und wundert sich über eine scheinbar leere Antwort. Der aktuelle Typ ist bash_code_execution_tool_result; für Dateioperationen gibt es zusätzlich text_editor_code_execution_tool_result.

Und prüfen Sie return_code: Ein Skript kann laufen und trotzdem scheitern.

Dateien zur Auswertung übergeben

# 1. Datei hochladen
hochgeladen = client.beta.files.upload(file=open("umsatz.csv", "rb"))

# 2. Als container_upload-Block übergeben
antwort = client.messages.create(
    model="claude-opus-5",
    max_tokens=16000,
    extra_headers={"anthropic-beta": "files-api-2025-04-14"},
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text":
             "Werte die Umsatzdaten aus. Zeige Trends und erstelle eine Grafik."},
            {"type": "container_upload", "file_id": hochgeladen.id},
        ],
    }],
    tools=[{"type": "code_execution_20260521", "name": "code_execution"}],
)

Unterstützt werden CSV, Excel, JSON, XML, Bilder und Textformate.

Erzeugte Dateien abholen

Grafiken und Berichte, die im Container entstehen, holen Sie über die Files-API — mit einer Sicherheitsmaßnahme, die nicht optional ist:

import os

AUSGABE = "./claude_ausgaben"
os.makedirs(AUSGABE, exist_ok=True)

for block in antwort.content:
    if block.type == "bash_code_execution_tool_result":
        ergebnis = block.content
        if ergebnis.type == "bash_code_execution_result" and ergebnis.content:
            for verweis in ergebnis.content:
                if verweis.type == "bash_code_execution_output":
                    meta = client.beta.files.retrieve_metadata(verweis.file_id)
                    inhalt = client.beta.files.download(verweis.file_id)

                    # PFLICHT: Dateinamen entschärfen
                    name = os.path.basename(meta.filename)
                    if not name or name in (".", ".."):
                        continue
                    inhalt.write_to_file(os.path.join(AUSGABE, name))

Der Dateiname stammt aus einer Umgebung, in der ein Modell Code ausgeführt hat. Ohne os.path.basename und die Prüfung darunter öffnen Sie einen Pfad-Ausbruch auf Ihrem eigenen System.

Container wiederverwenden

Für mehrstufige Auswertungen halten Sie den Zustand:

antwort1 = client.messages.create(..., messages=[{"role": "user", "content":
    "Installiere tabulate und lege daten.json mit Beispieldaten an"}], tools=[...])

container_id = antwort1.container.id

antwort2 = client.messages.create(
    container=container_id,                    # derselbe Container
    ..., messages=[{"role": "user", "content":
        "Lies daten.json und zeige sie als formatierte Tabelle"}], tools=[...])

Installierte Pakete, erzeugte Dateien und Variablen bleiben erhalten. Bei längeren Analysen spart das erheblich Zeit.

Der unterschätzte Anwendungsfall

Nicht die Datenanalyse — die Arithmetik.

Ein Sprachmodell rechnet nicht zuverlässig. Bei einer Summenprobe über zwanzig Rechnungspositionen, einer Prozentrechnung mit mehreren Stufen oder einer Datumsdifferenz über Schaltjahre hinweg ist ein Ergebnis aus dem Modell eine Schätzung. Mit aktiviertem Werkzeug ist es eine Berechnung.

Wenn Ihre Anwendung Zahlen ausgibt, auf die sich jemand verlässt, gehört das Werkzeug dazu — unabhängig davon, ob es nach "Datenanalyse" aussieht.

Die Verfügbarkeit

Auf der Anthropic-API und Claude Platform on AWS verfügbar, auf Microsoft Foundry als Beta — nicht auf Amazon Bedrock und Google Vertex AI.

Und ein Hinweis, der in Kombination mit der Web-Suche zählt: Die Suchwerkzeuge der Fassung _20260209 bringen Code-Ausführung für ihre dynamische Filterung intern mit. Deklarieren Sie das Werkzeug nicht zusätzlich, wenn Sie es nicht für eigene Zwecke brauchen — ein zweites Ausführungsumfeld verwirrt das Modell.

Häufig gestellte Fragen

Was kann der Code-Ausführungs-Container?

Python 3.11 mit vorinstallierten Bibliotheken für Datenauswertung, Grafiken und Dateiformate — unter anderem pandas, numpy, scikit-learn, matplotlib, openpyxl, python-docx und pypdf. Die Ausstattung umfasst 1 CPU, 5 GiB Arbeitsspeicher und 5 GiB Plattenplatz; einen Netzzugang gibt es nicht.

Warum finde ich das Ergebnis nicht in der Antwort?

Wahrscheinlich, weil Sie auf den falschen Blocktyp prüfen. Das Ergebnis kommt als bash_code_execution_tool_result, nicht als code_execution_tool_result; Dateioperationen liefern zusätzlich text_editor_code_execution_tool_result. Prüfen Sie außerdem return_code — ein Skript kann laufen und trotzdem scheitern.

Wie hole ich erzeugte Grafiken und Berichte ab?

Über die Files-API anhand der Dateikennung aus dem Ergebnisblock. Entschärfen Sie dabei den Dateinamen zwingend mit os.path.basename und prüfen Sie das Ergebnis — der Name stammt aus einer Umgebung, in der ein Modell Code ausgeführt hat, und ohne diese Prüfung öffnen Sie einen Pfad-Ausbruch auf Ihrem System.

Bleibt der Zustand zwischen Aufrufen erhalten?

Ja, wenn Sie die Container-Kennung aus der ersten Antwort bei den folgenden Aufrufen mitgeben. Installierte Pakete, erzeugte Dateien und Variablen bleiben dann bestehen; Container leben bis zu 30 Tage. Bei mehrstufigen Auswertungen spart das erheblich Zeit.

Wofür lohnt sich das Werkzeug am meisten?

Für Arithmetik, nicht für Datenanalyse. Ein Sprachmodell rechnet nicht zuverlässig — Summenproben, mehrstufige Prozentrechnungen und Datumsdifferenzen sind ohne Werkzeug Schätzungen. Wenn Ihre Anwendung Zahlen ausgibt, auf die sich jemand verlässt, gehört das Werkzeug dazu.


Der nächste Schritt

Aktivieren Sie das Werkzeug überall dort, wo Ihre Anwendung Zahlen ausgibt — auch wenn es nicht nach Datenanalyse aussieht. Der Unterschied zwischen einer geschätzten und einer berechneten Summe fällt erst auf, wenn jemand nachrechnet. Beim Aufbau helfen wir gern.

📖 Verwandte Artikel

Weitere interessante Beiträge zu ähnlichen Themen