Kod yazan bir ajan, ancak bir şey o kodu güvenle çalıştırıp sonucu bildirirse işe yarar. Bu rehber o döngüyü baştan sona kurar: bir model Python betiği yazar, bir sandbox onu çalıştırır, betik başarısız olursa hata modele geri gider. Ardından aynı görevi hiç kod yazmadan, MCP üzerinden yaparız.
Python 3.8+, bir EQVPS hesap token'ı (hesabınızı bağlama sayfasına bakın) ve bir model için API anahtarı gerekir.
1. Önce harcama limiti koyun
Ajan sandbox'ları kendi başına oluşturur; bu yüzden başlamadan önce ona bir tavan verin. Günde iki, ayda yirmi dolar denemeler için fazlasıyla yeterlidir:
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}'
Bir limite ulaşıldığında yeni sandbox'lar 429 budget_exceeded alır ve çalışan geçici sandbox'lar silinir. Ayrıntılar sandbox sınırları ve faturalama sayfasındadır.
2. İki kütüphaneyi kurun
pip install eqvps anthropic
export EQVPS_API_KEY="your-eqvps-token"
export ANTHROPIC_API_KEY="your-model-key"
Örnek tek bir model sağlayıcısı kullanır, ancak hiçbir şey ona bağlı değildir. Modelle yalnızca ask() fonksiyonu konuşur.
3. Yaz, çalıştır, düzelt döngüsü
Bunu agent.py olarak kaydedin:
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."},
]
Çalıştırın:
python3 agent.py
Tipik bir çalıştırma önce attempt 1: exit code 0, sonra 78498 yazdırır. İlk betik başarısız olursa hatası düzeltilmiş ikinci denemeyi görürsünüz.
Her parçanın yaptığı iş:
Sandbox.create(..., idle_timeout=120)yaklaşık bir saniyede bir microVM başlatır. Betiğiniz yarıda ölse bile sandbox 2 dakikalık hareketsizlikten sonra kendini yine siler.sb.run(code, timeout=55)kodu çalıştırır ve çıkış kodunu, stdout ve stderr'i döndürür. Koddaki bir çökme istisna değil, normal bir sonuçtur; bu yüzden döngü onu modele gösterebilir.r.stderr[-3000:]hatanın yalnızca sonunu gönderir. Büyük bir betiğin tam traceback'i modelin bağlamının büyük kısmını boşa harcayabilir.- Üç deneme bilinçli bir sınırdır. Bir betiği üç denemede düzeltemeyen bir modelin genellikle dördüncü denemeye değil, daha iyi bir görev tanımına ihtiyacı vardır.
4. Görev 55 saniyeden fazla sürdüğünde
Eşzamanlı bir çağrı en fazla 55 saniye sürebilir. Daha uzun işleri arka planda başlatıp bekleyin:
task = sb.run(code, background=True)
result = task.wait(timeout=1800)
wait zaman aşımına uğrasa bile görev çalışmaya devam eder ve ona sb.task(task_id) ile yeniden bağlanabilirsiniz.
5. Aynı görev MCP üzerinden, kodsuz
Claude Desktop veya Cursor gibi bir MCP istemcisini EQVPS MCP sunucusuyla kullanıyorsanız ajanın sandbox araçları zaten vardır: create_sandbox, run_code, exec_command, upload_file, download_file ve kill_sandbox. Bir istem yeterlidir:
Küçük bir geçici sandbox oluştur. 1.000.000'dan küçük asal sayıları sayan bir Python betiği yaz, orada çalıştır, başarısız olursa düzelt, bana sonucu söyle ve sandbox'ı sil.
Ajan yukarıdaki betikle aynı çağrıları yapar. Hangi araçlara onay olmadan izin verilebileceği MCP güvenlik önlemleri sayfasında anlatılır.
Maliyeti
Sandbox bir dakikadan çok daha kısa yaşadı ve 60 saniyelik asgari süre üzerinden faturalandı: small tarifesinde 0,00055 $. Model çağrısı sandbox'tan daha pahalıdır. Yeni bir hesabın 1 $'lık deneme kredisi bunun gibi yaklaşık 1.800 çalıştırmayı karşılar.
Buradan sonra
- SDK adım adım: 5 dakikada sandbox için Python SDK ya da TypeScript.
- Tüm yöntemler ve hatalar: SDK başvurusu.
- Tarifeler ve deneme kredisi: sandbox sayfası.
Yorumlar
Henüz yorum yok. İlk olun.