Alat eksekusi kode memungkinkan Claude untuk mengeksekusi kode Python dalam lingkungan sandbox yang aman. Claude dapat menganalisis data, membuat visualisasi, melakukan perhitungan kompleks, dan memproses file yang diunggah langsung dalam percakapan API.

Alat eksekusi kode saat ini dalam versi beta.

Fitur ini memerlukan header beta: "anthropic-beta": "code-execution-2025-05-22"

Model yang didukung

Alat eksekusi kode tersedia pada:

  • Claude Opus 4 (claude-opus-4-20250514)
  • Claude Sonnet 4 (claude-sonnet-4-20250514)
  • Claude Sonnet 3.7 (claude-3-7-sonnet-20250219)
  • Claude Haiku 3.5 (claude-3-5-haiku-latest)

Mulai cepat

Berikut adalah contoh sederhana yang meminta Claude untuk melakukan perhitungan:

curl https://api.anthropic.com/v1/messages \
    --header "x-api-key: $ANTHROPIC_API_KEY" \
    --header "anthropic-version: 2023-06-01" \
    --header "anthropic-beta: code-execution-2025-05-22" \
    --header "content-type: application/json" \
    --data '{
        "model": "claude-opus-4-20250514",
        "max_tokens": 4096,
        "messages": [
            {
                "role": "user",
                "content": "Calculate the mean and standard deviation of [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"
            }
        ],
        "tools": [{
            "type": "code_execution_20250522",
            "name": "code_execution"
        }]
    }'

Cara kerja eksekusi kode

Ketika Anda menambahkan alat eksekusi kode ke permintaan API Anda:

  1. Claude mengevaluasi apakah eksekusi kode akan membantu menjawab pertanyaan Anda
  2. Claude menulis dan mengeksekusi kode Python dalam lingkungan sandbox yang aman
  3. Eksekusi kode dapat terjadi beberapa kali sepanjang satu permintaan
  4. Claude memberikan hasil dengan grafik, perhitungan, atau analisis yang dihasilkan

Definisi alat

Alat eksekusi kode tidak memerlukan parameter tambahan:

JSON
{
  "type": "code_execution_20250522",
  "name": "code_execution"
}

Format respons

Berikut adalah contoh respons dengan eksekusi kode:

{
  "role": "assistant",
  "container": {
    "id": "container_011CPR5CNjB747bTd36fQLFk",
    "expires_at": "2025-05-23T21:13:31.749448Z"
  },
  "content": [
    {
      "type": "text",
      "text": "I'll calculate the mean and standard deviation for you."
    },
    {
      "type": "server_tool_use",
      "id": "srvtoolu_01A2B3C4D5E6F7G8H9I0J1K2",
      "name": "code_execution",
      "input": {
        "code": "import numpy as np\ndata = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nmean = np.mean(data)\nstd = np.std(data)\nprint(f\"Mean: {mean}\")\nprint(f\"Standard deviation: {std}\")"
      }
    },
    {
      "type": "code_execution_tool_result",
      "tool_use_id": "srvtoolu_01A2B3C4D5E6F7G8H9I0J1K2",
      "content": {
        "type": "code_execution_result",
        "stdout": "Mean: 5.5\nStandard deviation: 2.8722813232690143\n",
        "stderr": "",
        "return_code": 0
      }
    },
    {
      "type": "text",
      "text": "The mean of the dataset is 5.5 and the standard deviation is approximately 2.87."
    }
  ],
  "id": "msg_01BqK2v4FnRs4xTjgL8EuZxz",
  "model": "claude-opus-4-20250514",
  "stop_reason": "end_turn",
  "usage": {
    "input_tokens": 45,
    "output_tokens": 187,
  }
}

Hasil

Hasil eksekusi kode mencakup:

  • stdout: Output dari pernyataan print dan eksekusi yang berhasil
  • stderr: Pesan error jika eksekusi kode gagal
  • return_code (0 untuk sukses, bukan nol untuk kegagalan)
{
  "type": "code_execution_tool_result",
  "tool_use_id": "srvtoolu_01ABC123",
  "content": {
    "type": "code_execution_result",
    "stdout": "",
    "stderr": "NameError: name 'undefined_variable' is not defined",
    "return_code": 1
  }
}

Error

Jika ada error menggunakan alat tersebut akan ada code_execution_tool_result_error

{
  "type": "code_execution_tool_result",
  "tool_use_id": "srvtoolu_01VfmxgZ46TiHbmXgy928hQR",
  "content": {
    "type": "code_execution_tool_result_error",
    "error_code": "unavailable"
  }
}

Error yang mungkin termasuk

  • unavailable: Alat eksekusi kode tidak tersedia
  • code_execution_exceeded: Waktu eksekusi melebihi maksimum yang diizinkan
  • container_expired: Container telah kedaluwarsa dan tidak tersedia

Alasan stop pause_turn

Respons mungkin mencakup alasan stop pause_turn, yang menunjukkan bahwa API menjeda giliran yang berjalan lama. Anda dapat memberikan respons kembali apa adanya dalam permintaan berikutnya untuk membiarkan Claude melanjutkan gilirannya, atau memodifikasi konten jika Anda ingin mengganggu percakapan.

Bekerja dengan File dalam Eksekusi Kode

Eksekusi kode dapat menganalisis file yang diunggah melalui Files API, seperti file CSV, file Excel, dan format data lainnya. Ini memungkinkan Claude untuk membaca, memproses, dan menghasilkan wawasan dari data Anda. Anda dapat mengirim beberapa file per permintaan.

Menggunakan Files API dengan Eksekusi Kode memerlukan dua header beta: "anthropic-beta": "code-execution-2025-05-22,files-api-2025-04-14"

Jenis file yang didukung

Lingkungan Python mampu bekerja dengan tetapi tidak terbatas pada jenis file berikut

  • CSV
  • Excel (.xlsx, .xls)
  • JSON
  • XML
  • Gambar (JPEG, PNG, GIF, WebP)
  • File teks (.txt, .md, .py, dll)

Memuat file untuk eksekusi kode

  1. Unggah file Anda menggunakan Files API
  2. Referensikan file dalam pesan Anda menggunakan blok konten container_upload
  3. Sertakan alat eksekusi kode dalam permintaan API Anda
# Pertama, unggah file
curl https://api.anthropic.com/v1/files \
    --header "x-api-key: $ANTHROPIC_API_KEY" \
    --header "anthropic-version: 2023-06-01" \
    --header "anthropic-beta: files-api-2025-04-14" \
    --form 'file=@"data.csv"' \

# Kemudian gunakan file_id dengan eksekusi kode
curl https://api.anthropic.com/v1/messages \
    --header "x-api-key: $ANTHROPIC_API_KEY" \
    --header "anthropic-version: 2023-06-01" \
    --header "anthropic-beta: code-execution-2025-05-22,files-api-2025-04-14" \
    --header "content-type: application/json" \
    --data '{
        "model": "claude-opus-4-20250514",
        "max_tokens": 4096,
        "messages": [{
            "role": "user",
            "content": [
                {"type": "text", "text": "Analyze this CSV data"},
                {"type": "container_upload", "file_id": "file_abc123"}
            ]
        }],
        "tools": [{
            "type": "code_execution_20250522",
            "name": "code_execution"
        }]
    }'

Mengambil file yang dibuat oleh eksekusi kode

Ketika Claude membuat file selama eksekusi kode (misalnya, menyimpan plot matplotlib, menghasilkan CSV), Anda dapat mengambil file-file ini menggunakan Files API:

from anthropic import Anthropic

# Inisialisasi klien
client = Anthropic()

# Permintaan eksekusi kode yang membuat file
response = client.beta.messages.create(
    model="claude-opus-4-20250514",
    betas=["code-execution-2025-05-22", "files-api-2025-04-14"],
    max_tokens=4096,
    messages=[{
        "role": "user",
        "content": "Create a matplotlib visualization and save it as output.png"
    }],
    tools=[{
        "type": "code_execution_20250522",
        "name": "code_execution"
    }]
)

# Ekstrak ID file dari respons
def extract_file_ids(response):
    file_ids = []
    for item in response.content:
        if item.type == 'code_execution_tool_result':
            content_item = item.content
            if content_item.get('type') == 'code_execution_result':
                for file in content_item.get('content', []):
                    file_ids.append(file['file_id'])
    return file_ids

# Unduh file yang dibuat
for file_id in extract_file_ids(response):
    file_metadata = client.beta.files.retrieve_metadata(file_id)
    file_content = client.beta.files.download(file_id)
    file_content.write_to_file(file_metadata.filename)
    print(f"Downloaded: {file_metadata.filename}")

Container

Alat eksekusi kode berjalan dalam lingkungan terkontainerisasi yang aman yang dirancang khusus untuk eksekusi kode Python.

Lingkungan runtime

  • Versi Python: 3.11.12
  • Sistem operasi: Container berbasis Linux
  • Arsitektur: x86_64 (AMD64)

Batas sumber daya

  • Memori: 1GiB RAM
  • Ruang disk: 5GiB penyimpanan workspace
  • CPU: 1 CPU

Jaringan dan keamanan

  • Akses internet: Sepenuhnya dinonaktifkan untuk keamanan
  • Koneksi eksternal: Tidak ada permintaan jaringan keluar yang diizinkan
  • Isolasi sandbox: Isolasi penuh dari sistem host dan container lain
  • Akses file: Terbatas pada direktori workspace saja
  • Cakupan workspace: Seperti Files, container dicakup ke workspace dari kunci API
  • Kedaluwarsa: Container kedaluwarsa 1 jam setelah pembuatan

Library yang sudah terinstal

Lingkungan Python sandbox mencakup library yang umum digunakan ini:

  • Data Science: pandas, numpy, scipy, scikit-learn, statsmodels
  • Visualisasi: matplotlib
  • Pemrosesan File: pyarrow, openpyxl, xlrd, pillow
  • Matematika & Komputasi: sympy, mpmath
  • Utilitas: tqdm, python-dateutil, pytz, joblib

Penggunaan ulang container

Anda dapat menggunakan ulang container yang ada di beberapa permintaan API dengan memberikan ID container dari respons sebelumnya. Ini memungkinkan Anda untuk mempertahankan file yang dibuat antar permintaan.

Contoh

import os
from anthropic import Anthropic

# Inisialisasi klien
client = Anthropic(
    api_key=os.getenv("ANTHROPIC_API_KEY")
)

# Permintaan pertama: Buat file dengan angka acak
response1 = client.beta.messages.create(
    model="claude-opus-4-20250514",
    betas=["code-execution-2025-05-22"],
    max_tokens=4096,
    messages=[{
        "role": "user",
        "content": "Write a file with a random number and save it to '/tmp/number.txt'"
    }],
    tools=[{
        "type": "code_execution_20250522",
        "name": "code_execution"
    }]
)

# Ekstrak ID container dari respons pertama
container_id = response1.container.id

# Permintaan kedua: Gunakan ulang container untuk membaca file
response2 = client.beta.messages.create(
    container=container_id,  # Gunakan ulang container yang sama
    model="claude-opus-4-20250514",
    betas=["code-execution-2025-05-22"],
    max_tokens=4096,
    messages=[{
        "role": "user",
        "content": "Read the number from '/tmp/number.txt' and calculate its square"
    }],
    tools=[{
        "type": "code_execution_20250522",
        "name": "code_execution"
    }]
)

Streaming

Dengan streaming diaktifkan, Anda akan menerima event eksekusi kode saat terjadi:

event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "server_tool_use", "id": "srvtoolu_xyz789", "name": "code_execution"}}

// Eksekusi kode di-stream
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "input_json_delta", "partial_json": "{\"code\":\"import pandas as pd\\ndf = pd.read_csv('data.csv')\\nprint(df.head())\"}"}}

// Jeda saat kode dieksekusi

// Hasil eksekusi di-stream
event: content_block_start
data: {"type": "content_block_start", "index": 2, "content_block": {"type": "code_execution_tool_result", "tool_use_id": "srvtoolu_xyz789", "content": {"stdout": "   A  B  C\n0  1  2  3\n1  4  5  6", "stderr": ""}}}

Permintaan batch

Anda dapat menyertakan alat eksekusi kode dalam Messages Batches API. Panggilan alat eksekusi kode melalui Messages Batches API dihargai sama dengan yang ada dalam permintaan Messages API biasa.

Penggunaan dan harga

The code execution tool usage is tracked separately from token usage. Execution time is a minimum of 5 minutes. If files are included in the request, execution time is billed even if the tool is not used due to files being preloaded onto the container.

Pricing: $0.05 per session-hour.