En agent, der skriver kode, er kun nyttig, hvis noget kører koden sikkert og melder resultatet tilbage. Denne guide bygger den løkke fra start til slut: en model skriver et Python-script, en sandkasse kører det, og hvis det fejler, går fejlen tilbage til modellen. Derefter den samme opgave uden en linje kode, via MCP.
Du skal bruge Python 3.8+, en EQVPS-kontotoken (se forbind din konto) og en API-nøgle til en model.
1. Sæt et forbrugsloft først
En agent opretter sandkasser på egen hånd, så giv den et loft, før den starter. To dollar om dagen og tyve om måneden er rigeligt til eksperimenter:
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}'
Når et loft nås, får nye sandkasser 429 budget_exceeded, og kørende midlertidige slettes. Detaljerne står i grænser og afregning for sandboxes.
2. Installér de to biblioteker
pip install eqvps anthropic
export EQVPS_API_KEY="your-eqvps-token"
export ANTHROPIC_API_KEY="your-model-key"
Eksemplet bruger én modeludbyder, men intet afhænger af den. Kun funktionen ask() taler med modellen.
3. Løkken skriv, kør, ret
Gem dette som 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."},
]
Kør det:
python3 agent.py
En typisk kørsel udskriver attempt 1: exit code 0 og derefter 78498. Hvis det første script fejler, ser du det andet forsøg med fejlen rettet.
Hvad hver del gør:
Sandbox.create(..., idle_timeout=120)starter en microVM på cirka et sekund. Hvis dit script dør halvvejs, sletter sandkassen alligevel sig selv efter 2 minutters inaktivitet.sb.run(code, timeout=55)kører koden og returnerer exitkode, stdout og stderr. Et crash i koden er et normalt resultat, ikke en exception, så løkken kan vise det til modellen.r.stderr[-3000:]sender kun slutningen af fejlen. En fuld traceback fra et stort script kan spilde meget af modellens kontekst.- Tre forsøg er en bevidst grænse. En model, der ikke har rettet et script på tre forsøg, har som regel brug for en bedre opgavebeskrivelse, ikke et fjerde forsøg.
4. Når opgaven kræver mere end 55 sekunder
Et synkront kald må højst tage 55 sekunder. Start længere arbejde i baggrunden og vent:
task = sb.run(code, background=True)
result = task.wait(timeout=1800)
Opgaven kører videre, selv om din wait rammer sin timeout, og du kan tage den op igen med sb.task(task_id).
5. Den samme opgave via MCP, uden kode
Bruger du en MCP-klient som Claude Desktop eller Cursor med EQVPS' MCP-server, har agenten allerede sandkasseværktøjerne: create_sandbox, run_code, exec_command, upload_file, download_file og kill_sandbox. En prompt er nok:
Opret en lille midlertidig sandkasse. Skriv et Python-script, der tæller primtallene under 1.000.000, kør det der, ret det, hvis det fejler, fortæl mig resultatet, og slet sandkassen.
Agenten foretager de samme kald som scriptet ovenfor. Hvilke værktøjer du kan tillade uden bekræftelse, står i MCP-værn.
Hvad det kostede
Sandkassen levede langt under et minut og blev afregnet med minimum på 60 sekunder: 0,00055 $ på small. Modelkaldet koster mere end sandkassen. Prøvekreditten på 1 $ til en ny konto dækker cirka 1.800 kørsler som denne.
Hvor du går hen nu
- SDK'et trin for trin: Python-SDK til sandkasser på 5 minutter eller TypeScript.
- Alle metoder og fejl: SDK-reference.
- Tariffer og prøvekredit: sandkassesiden.
Kommentarer
Ingen kommentarer endnu. Vær den første.