Agen yang menulis kode hanya berguna jika ada yang menjalankan kode itu dengan aman dan melaporkan hasilnya. Panduan ini membangun loop tersebut dari awal sampai akhir: model menulis skrip Python, sandbox menjalankannya, dan jika gagal, error dikembalikan ke model. Lalu tugas yang sama tanpa menulis kode, lewat MCP.
Anda butuh Python 3.8+, token akun EQVPS (lihat menghubungkan akun), dan kunci API untuk sebuah model.
1. Tetapkan batas pengeluaran dulu
Agen membuat sandbox sendiri, jadi beri ia batas atas sebelum mulai. Dua dolar per hari dan dua puluh per bulan lebih dari cukup untuk bereksperimen:
curl -X PUT https://api.eqvps.com/api/v1/eqvps/sandboxes/budget \
-H "Authorization: Bearer $EQVPS_API_KEY" -H "Content-Type: application/json" \
-d '{"daily_usd": 2, "monthly_usd": 20}'
Saat batas tercapai, sandbox baru mendapat 429 budget_exceeded dan sandbox sementara yang berjalan dihapus. Detailnya ada di batas dan penagihan sandbox.
2. Pasang dua pustaka
pip install eqvps anthropic
export EQVPS_API_KEY="your-eqvps-token"
export ANTHROPIC_API_KEY="your-model-key"
Contoh ini memakai satu penyedia model, tetapi tidak ada yang bergantung padanya. Hanya fungsi ask() yang berbicara dengan model.
3. Loop tulis, jalankan, perbaiki
Simpan ini sebagai agent.py:
import re
import anthropic
from eqvps import Sandbox
TASK = "Count the prime numbers below 1,000,000 and print only the number."
client = anthropic.Anthropic()
def ask(messages):
msg = client.messages.create(model="claude-sonnet-5", max_tokens=2000, messages=messages)
return msg.content[0].text
def extract_code(text):
m = re.search(r"`{3}(?:python)?\n(.*?)`{3}", text, re.S)
return m.group(1) if m else text
messages = [{"role": "user", "content": "Write a Python 3 script for this task. "
"Reply with a single code block and nothing else.\n\nTask: " + TASK}]
with Sandbox.create(tariff="small", idle_timeout=120) as sb:
for attempt in range(1, 4):
reply = ask(messages)
r = sb.run(extract_code(reply), timeout=55)
print(f"attempt {attempt}: exit code {r.exit_code}")
if r.ok:
print(r.stdout.strip())
break
messages += [
{"role": "assistant", "content": reply},
{"role": "user", "content": f"The script failed with exit code {r.exit_code}.\n"
f"stderr:\n{r.stderr[-3000:]}\nFix it. Reply with a single code block."},
]
Jalankan:
python3 agent.py
Run yang umum mencetak attempt 1: exit code 0 lalu 78498. Jika skrip pertama gagal, Anda akan melihat percobaan kedua dengan error yang sudah diperbaiki.
Apa yang dilakukan setiap bagian:
Sandbox.create(..., idle_timeout=120)menyalakan microVM dalam sekitar satu detik. Jika skrip Anda mati di tengah jalan, sandbox tetap menghapus dirinya setelah 2 menit tidak aktif.sb.run(code, timeout=55)menjalankan kode dan mengembalikan kode keluar, stdout, dan stderr. Crash di kode adalah hasil biasa, bukan exception, jadi loop bisa menunjukkannya ke model.r.stderr[-3000:]hanya mengirim bagian akhir error. Traceback lengkap dari skrip besar bisa membuang banyak konteks model.- Tiga percobaan adalah batas yang disengaja. Model yang belum memperbaiki skrip dalam tiga kali biasanya butuh deskripsi tugas yang lebih baik, bukan percobaan keempat.
4. Saat tugas butuh lebih dari 55 detik
Panggilan sinkron paling lama 55 detik. Untuk pekerjaan yang lebih lama, jalankan di latar belakang lalu tunggu:
task = sb.run(code, background=True)
result = task.wait(timeout=1800)
Tugas tetap berjalan meskipun wait Anda kena batas waktu, dan Anda bisa melanjutkannya dengan sb.task(task_id).
5. Tugas yang sama lewat MCP, tanpa kode
Jika Anda memakai klien MCP seperti Claude Desktop atau Cursor dengan server MCP EQVPS, agen sudah punya alat sandbox: create_sandbox, run_code, exec_command, upload_file, download_file, dan kill_sandbox. Cukup satu prompt:
Buat sandbox sementara yang kecil. Tulis skrip Python yang menghitung bilangan prima di bawah 1.000.000, jalankan di sana, perbaiki jika gagal, beri tahu saya hasilnya, lalu hapus sandbox-nya.
Agen melakukan panggilan yang sama dengan skrip di atas. Alat mana yang aman diizinkan tanpa konfirmasi dijelaskan di pengaman MCP.
Berapa biayanya
Sandbox hidup jauh kurang dari satu menit dan ditagih minimum 60 detik: $0.00055 di small. Panggilan model lebih mahal daripada sandbox. Kredit uji coba $1 untuk akun baru cukup untuk sekitar 1.800 run seperti ini.
Ke mana selanjutnya
- SDK langkah demi langkah: SDK Python untuk sandbox dalam 5 menit atau TypeScript.
- Semua metode dan error: referensi SDK.
- Tarif dan kredit uji coba: halaman sandbox.
Komentar
Belum ada komentar. Jadilah yang pertama.