0Pricing
AI Agents · Pelajaran

Pola Interpreter Kode untuk Analisis Data

Eksekusi Python dalam lingkungan terisolasi: menjalankan pandas/matplotlib melalui alat agen.

Pola Interpreter Kode untuk Analisis Data adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.

Pola Penafsir Kode

Pola penafsir kode memungkinkan agen menghasilkan kode Python untuk menjawab pertanyaan analisis data, menjalankan kode tersebut di kotak pasir, menangkap keluarannya, dan menafsirkan hasilnya.

Alih-alih menuliskan setiap operasi analisis secara tetap, agen menulis kode khusus untuk setiap pertanyaan — sehingga sangat fleksibel untuk tugas data.

Siklus Inti: Menghasilkan → Menjalankan → Menafsirkan

Pola ini memiliki tiga langkah yang dapat diulangi:

  1. Menghasilkan — LLM menulis kode Python untuk menjawab pertanyaan
  2. Menjalankan — jalankan kode di kotak pasir, lalu tangkap keluaran standar dan berkas
  3. Menafsirkan — teruskan keluaran kembali kepada LLM untuk menjelaskan hasilnya
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'
))

Instruksi Pembuatan Kode

Instruksi pembuatan kode harus mencakup: jalur/skema data, pertanyaan, dan batasan (tanpa panggilan ke API eksternal, gunakan pandas, simpan grafik ke berkas).

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'))

Eksekusi di Lingkungan Uji Subproses

Lingkungan uji paling sederhana adalah menjalankan kode dalam subproses terpisah dengan batas waktu. Ini memberikan isolasi proses—jika kode mengalami kerusakan, agen tidak ikut berhenti.

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'])

Lingkungan Uji Awan E2B

E2B menyediakan lingkungan uji awan terkelola untuk eksekusi kode yang aman—lebih aman daripada subproses. Kode dijalankan dalam kontainer terisolasi dengan akses ke sistem berkas.

Pasang dengan 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

Mengambil Berkas yang Dihasilkan

Kode dapat menghasilkan grafik, ekspor CSV, atau berkas lainnya. Ambil berkas tersebut dari sistem berkas lingkungan uji, lalu kembalikan kepada agen untuk ditafsirkan atau ditampilkan.

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

Putaran Pemulihan Kesalahan

Kode yang dihasilkan sering memiliki kesalahan saat pertama kali dijalankan. Terapkan putaran pemulihan: kirim kesalahan tersebut kepada LLM bersama kode asli, lalu minta perbaikannya. Batasi hingga 2–3 percobaan ulang.

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

Menafsirkan Keluaran Kode

Keluaran kode mentah (angka, tabel) perlu diterjemahkan kembali menjadi jawaban dalam bahasa alami. Berikan keluaran standar kepada LLM dan minta LLM menjelaskan hasilnya dalam konteks pertanyaan awal.

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
    ))

Batasan Keamanan dalam Pembuatan Kode

Kode yang dihasilkan tidak boleh melakukan panggilan jaringan, mengakses berkas sensitif, atau menjalankan perintah sistem. Terapkan aturan ini baik dalam instruksi maupun melalui pembatasan lingkungan uji.

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)'))

Penyisipan Skema Data

LLM menghasilkan kode yang lebih baik jika mengetahui skema data sejak awal—nama kolom, tipe data, dan baris sampel. Sertakan deskripsi skema dalam instruksi pembuatan kode.

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()

Melacak Riwayat Eksekusi

Simpan catatan semua eksekusi kode dalam satu sesi. Dengan begitu, agen dapat merujuk hasil sebelumnya, melanjutkan perhitungan terdahulu, dan menjelaskan langkah analisisnya kepada pengguna.

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)

Uji Pemahaman

Apa keunggulan utama penggunaan pola penafsiran kode dibandingkan menuliskan operasi analisis data tertentu secara khusus dalam kode sebagai alat agen?

Rangkuman: Pola Penafsiran Kode untuk Analisis Data

Pola penafsiran kode: hasilkan kode Python (dengan konteks skema dan batasan keamanan) → jalankan di lingkungan uji (subproses atau E2B) → ambil keluaran standar dan berkas → lakukan percobaan ulang jika terjadi kesalahan → tafsirkan hasil dalam bahasa alami.

Pertimbangan utama: sisipkan skema data untuk menghasilkan kode yang lebih baik, lakukan pravalidasi kode untuk menemukan impor yang diblokir dan perintah terminal, gunakan batas waktu subproses untuk mencegah eksekusi tak terkendali, dan ambil grafik yang dihasilkan dalam bentuk base64 agar dapat ditampilkan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pola Interpreter Kode untuk Analisis Data” gratis?

Ya — teks lengkap “Pola Interpreter Kode untuk Analisis Data” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pola Interpreter Kode untuk Analisis Data”?

Eksekusi Python dalam lingkungan terisolasi: menjalankan pandas/matplotlib melalui alat agen. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Agents?

Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Pola Interpreter Kode untuk Analisis Data” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?

Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pola Interpreter Kode untuk Analisis Data
  2. Alat Agen Berbasis Pandas
  3. Pembuatan Bagan dan Visualisasi Otomatis
  4. Agen Ringkasan Statistik
← Kembali ke AI Agents