0Pricing
AI Agents · Lektion

Code-Interpreter-Muster für Datenanalysen

Python-Ausführung in einer Sandbox: pandas/matplotlib in Agent-Tools ausführen.

Code-Interpreter-Muster für Datenanalysen ist eine kostenlose AI Agents-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Agents-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Das Code-Interpreter-Muster

Das Code-Interpreter-Muster ermöglicht es einem Agent, Python-Code zur Beantwortung von Fragen zur Datenanalyse zu generieren, diesen Code in einer Sandbox auszuführen, die Ausgabe zu erfassen und die Ergebnisse zu interpretieren.

Statt jede Analyseoperation fest zu programmieren, schreibt der Agent für jede Frage individuellen Code — dadurch ist er für Datenaufgaben äußerst flexibel.

Kernschleife: Generieren → Ausführen → Interpretieren

Das Muster besteht aus drei Schritten, die wiederholt werden können:

  1. Generieren — Das LLM schreibt Python-Code zur Beantwortung der Frage
  2. Ausführen — Den Code in einer Sandbox ausführen und stdout sowie Dateien erfassen
  3. Interpretieren — Die Ausgabe zurück an das LLM übergeben, damit es die Ergebnisse erklärt
def code_interpreter_agent(question, data_path):
    # Step 1: Generate code
    code = generate_analysis_code(question, data_path)
    print('Generated code:', code[:200])

    # Step 2: Execute in sandbox
    result = execute_in_sandbox(code)

    if result['error']:
        # Try to fix the error
        fixed_code = fix_code(code, result['error'])
        result = execute_in_sandbox(fixed_code)

    # Step 3: Interpret output
    return interpret_output(question, result)

print(code_interpreter_agent(
    'What is the average order value by customer segment?',
    'data/orders.csv'
))

Prompt zur Codegenerierung

Der Prompt zur Codegenerierung muss Folgendes enthalten: den Datenpfad bzw. das Datenschema, die Frage und die Einschränkungen (keine externen APIs, pandas verwenden, Diagramme in Dateien speichern).

CODE_GEN_PROMPT = """You are a Python data analyst. Write Python code to answer the question.
Data available at: {data_path}
Question: {question}
Write ONLY Python code (no markdown, no explanation):"""

def llm_call(prompt):
    return "```python\nprint('df.describe() results')\n```"

def generate_analysis_code(question, data_path):
    response = llm_call(CODE_GEN_PROMPT.format(question=question, data_path=data_path))
    code = response.strip()
    if code.startswith('```'):
        code = code.split('```')[1]
        if code.startswith('python'):
            code = code[6:]
    return code.strip()

print(generate_analysis_code('What is the average price?', 'data.csv'))

Sandbox-Ausführung in einem Unterprozess

Die einfachste Sandbox besteht darin, den Code mit einem Timeout in einem separaten Unterprozess auszuführen. Dadurch wird eine Prozessisolierung erreicht – wenn der Code abstürzt, wird der Agent nicht mitgerissen.

import subprocess
import tempfile
import os

def execute_in_sandbox(code, timeout=30):
    # Write code to temp file
    with tempfile.NamedTemporaryFile(suffix='.py', mode='w', delete=False) as f:
        f.write(code)
        script_path = f.name

    try:
        result = subprocess.run(
            ['python3', script_path],
            capture_output=True,
            text=True,
            timeout=timeout,
            env={**os.environ, 'MPLBACKEND': 'Agg'}  # non-interactive matplotlib
        )
        return {
            'stdout': result.stdout,
            'stderr': result.stderr,
            'returncode': result.returncode,
            'error': result.stderr if result.returncode != 0 else None
        }
    except subprocess.TimeoutExpired:
        return {'stdout': '', 'stderr': 'Timeout', 'returncode': -1, 'error': 'Code timed out'}
    finally:
        os.unlink(script_path)

if __name__ == '__main__':
    result = execute_in_sandbox('print(2 + 2)')
    print('Sandbox stdout:', result['stdout'].strip())
    print('Return code   :', result['returncode'])

E2B-Cloud-Sandbox

E2B stellt eine verwaltete Cloud-Sandbox für die sichere Codeausführung bereit – sie ist sicherer als ein Unterprozess. Der Code wird in einem isolierten Container mit Zugriff auf das Dateisystem ausgeführt.

Installieren Sie sie mit pip install e2b-code-interpreter.

from e2b_code_interpreter import Sandbox
import os

def execute_with_e2b(code, data_bytes=None):
    with Sandbox(api_key=os.getenv('E2B_API_KEY')) as sandbox:
        # Upload data file if provided
        if data_bytes:
            sandbox.files.write('/home/user/data.csv', data_bytes)

        # Execute code
        execution = sandbox.run_code(code)

        result = {
            'stdout': '\n'.join(execution.logs.stdout),
            'stderr': '\n'.join(execution.logs.stderr),
            'error': None
        }

        # Check for errors
        if execution.error:
            result['error'] = str(execution.error)

        # Download any generated files
        result['files'] = []
        for output in execution.results:
            if hasattr(output, 'png'):
                result['files'].append({
                    'type': 'image/png',
                    'data': output.png  # base64 encoded
                })

    return result

Generierte Dateien erfassen

Code kann Diagramme, CSV-Exporte oder andere Dateien erzeugen. Erfassen Sie diese aus dem Dateisystem der Sandbox und übergeben Sie sie zur Interpretation oder Anzeige an den Agenten.

import os
import glob
import base64

OUTPUT_DIR = '/tmp/chart_output'

def execute_and_capture(code, timeout=30):
    # Create output dir
    os.makedirs(OUTPUT_DIR, exist_ok=True)

    result = execute_in_sandbox(code, timeout=timeout)

    # Capture any generated image files
    generated_files = []
    for filepath in glob.glob(os.path.join(OUTPUT_DIR, '*.png')):
        with open(filepath, 'rb') as f:
            encoded = base64.b64encode(f.read()).decode('utf-8')
        generated_files.append({
            'filename': os.path.basename(filepath),
            'type': 'image/png',
            'base64': encoded
        })
        os.unlink(filepath)  # clean up

    result['generated_files'] = generated_files
    print(f'Captured {len(generated_files)} file(s) from sandbox')
    return result

Fehlerbehebungsschleife

Generierter Code enthält beim ersten Ausführen häufig Fehler. Implementieren Sie eine Fehlerbehebungsschleife: Senden Sie den Fehler zusammen mit dem ursprünglichen Code an das LLM und bitten Sie um eine Korrektur. Beschränken Sie dies auf 2–3 Wiederholungsversuche.

FIX_PROMPT = '''The following Python code raised an error. Fix it.

Original code:
{code}

Error:
{error}

Return ONLY the fixed Python code (no explanation, no markdown):'''

def fix_code(code, error):
    return llm_call(FIX_PROMPT.format(code=code, error=error)).strip()

def execute_with_retry(code, max_retries=2):
    for attempt in range(max_retries + 1):
        result = execute_and_capture(code)
        if not result['error']:
            return result
        print(f'Attempt {attempt + 1} failed: {result["error"][:100]}')
        if attempt < max_retries:
            code = fix_code(code, result['error'])
    return result  # return last result even if errored

Codeausgabe interpretieren

Die rohe Codeausgabe (Zahlen, Tabellen) muss wieder in eine Antwort in natürlicher Sprache übersetzt werden. Übergeben Sie die stdout-Ausgabe an das LLM und bitten Sie es, die Ergebnisse im Kontext der ursprünglichen Frage zu erklären.

INTERPRET_PROMPT = '''A Python script was executed to answer a data analysis question.
Explain the results in clear, non-technical language.

Original question: {question}

Code output (stdout):
{output}

Provide a clear, concise answer that directly addresses the question.
Highlight the most important numbers or findings.
Answer:'''

def interpret_output(question, execution_result):
    stdout = execution_result.get('stdout', '').strip()
    error = execution_result.get('error')

    if error and not stdout:
        return f'The analysis failed with error: {error}'

    if not stdout:
        return 'The code ran successfully but produced no output.'

    return llm_call(INTERPRET_PROMPT.format(
        question=question,
        output=stdout[:3000]  # truncate very long outputs
    ))

Sicherheitsbeschränkungen bei der Codegenerierung

Generierter Code darf keine Netzwerkaufrufe durchführen, auf vertrauliche Dateien zugreifen oder Systembefehle ausführen. Erzwingen Sie dies sowohl im Prompt als auch durch Einschränkungen der Sandbox.

BLOCKED_IMPORTS = ['requests', 'httpx', 'urllib', 'socket', 'subprocess', 'os.system']

def pre_validate_code(code):
    errors = []
    for blocked in BLOCKED_IMPORTS:
        if f'import {blocked}' in code or f'from {blocked}' in code:
            errors.append(f'Blocked import: {blocked}')

    # Block shell execution
    import re
    if re.search(r'os\.system|subprocess\.run|subprocess\.call|eval\(|exec\(', code):
        errors.append('Blocked: shell execution or eval/exec')

    # Block reading outside allowed paths
    if re.search(r'open\([^)]*\.\./|open\([^)]*\/etc\/', code):
        errors.append('Blocked: unauthorized file access')

    if errors:
        raise ValueError('Security check failed:\n' + '\n'.join(errors))

    return True

if __name__ == '__main__':
    try:
        pre_validate_code('import requests\nrequests.get("http://x")')
    except ValueError as e:
        print('Rejected:', e)
    print('Safe code passed:', pre_validate_code('print(1 + 1)'))

Datenschema einbinden

Das LLM generiert besseren Code, wenn es das Datenschema im Voraus kennt – Spaltennamen, Datentypen und Beispielzeilen. Nehmen Sie eine Sche beschreibung in den Prompt zur Codegenerierung auf.

import pandas as pd

def get_data_schema(data_path):
    df = pd.read_csv(data_path, nrows=5)
    schema_lines = []
    for col in df.columns:
        dtype = str(df[col].dtype)
        sample = df[col].dropna().iloc[0] if len(df[col].dropna()) > 0 else 'N/A'
        schema_lines.append(f'  - {col} ({dtype}): sample={sample!r}')
    schema_text = '\n'.join(schema_lines)
    return f'CSV columns:\n{schema_text}\nTotal rows: {len(pd.read_csv(data_path))}'

ENHANCED_PROMPT = CODE_GEN_PROMPT + '\n\nData schema:\n{schema}'

def generate_analysis_code_with_schema(question, data_path):
    schema = get_data_schema(data_path)
    response = llm_call(ENHANCED_PROMPT.format(
        question=question, data_path=data_path, schema=schema
    ))
    return response.strip()

Ausführungsverlauf protokollieren

Führen Sie ein Protokoll über alle Codeausführungen innerhalb einer Sitzung. So kann der Agent auf frühere Ergebnisse verweisen, auf vorherigen Berechnungen aufbauen und dem Benutzer seine Analyseschritte erklären.

from datetime import datetime

execution_history = []

def record_execution(question, code, result):
    execution_history.append({
        'timestamp': datetime.now().isoformat(),
        'question': question,
        'code_lines': len(code.splitlines()),
        'stdout_preview': result.get('stdout', '')[:200],
        'success': result.get('error') is None,
        'generated_files': len(result.get('generated_files', []))
    })

def get_session_summary():
    total = len(execution_history)
    successful = sum(1 for e in execution_history if e['success'])
    return {
        'total_executions': total,
        'successful': successful,
        'failed': total - successful,
        'success_rate': f'{successful/max(total,1)*100:.0f}%',
        'questions_answered': [e['question'][:60] for e in execution_history]
    }

# Usage in agent loop
def code_interpreter_agent_tracked(question, data_path):
    code = generate_analysis_code_with_schema(question, data_path)
    result = execute_with_retry(code)
    record_execution(question, code, result)
    return interpret_output(question, result)

Wissenscheck

Was ist der wichtigste Vorteil des Code-Interpreter-Musters gegenüber der fest programmierten Implementierung bestimmter Datenanalyseoperationen als Agent-Tools?

Rückblick: Code-Interpreter-Muster für Datenanalyse

Das Code-Interpreter-Muster: Python-Code generieren (mit Datenschemakontext und Sicherheitsbeschränkungen) → in einer Sandbox ausführen (Unterprozess oder E2B) → stdout und Dateien erfassen → bei Fehlern erneut versuchen → Ergebnisse in natürlicher Sprache interpretieren.

Wichtige Überlegungen: Binden Sie das Datenschema ein, um eine bessere Codegenerierung zu ermöglichen, validieren Sie den Code vorab auf blockierte Importe und Shell-Befehle, verwenden Sie ein Unterprozess-Timeout, um endlose Ausführungen zu verhindern, und erfassen Sie generierte Diagramme zur Anzeige als Base64.

Häufig gestellte Fragen

Ist die Lektion „Code-Interpreter-Muster für Datenanalysen“ kostenlos?

Ja — der vollständige Text von „Code-Interpreter-Muster für Datenanalysen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Agents-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Code-Interpreter-Muster für Datenanalysen“?

Python-Ausführung in einer Sandbox: pandas/matplotlib in Agent-Tools ausführen. Du übst AI Agents mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um AI Agents zu starten?

Keine Vorkenntnisse erforderlich. AI Agents auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Code-Interpreter-Muster für Datenanalysen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser AI Agents-Lektion Code schreiben und ausführen?

Ja. Jede AI Agents-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Code-Interpreter-Muster für Datenanalysen
  2. Pandas-basierte Daten-Agent-Tools
  3. Automatische Erstellung von Diagrammen und Visualisierungen
  4. Agenten für statistische Zusammenfassungen
← Zurück zu AI Agents