Агент, който пише код, е полезен само ако нещо изпълнява този код безопасно и докладва резултата. Това ръководство изгражда такъв цикъл от началото до края: модел пише Python скрипт, пясъчник го изпълнява, а ако се провали, грешката се връща към модела. След това същата задача без нито ред код, през MCP.
Нужни са ви Python 3.8+, токен на акаунт в EQVPS (вижте свързване на акаунта) и API ключ за модел.
1. Първо задайте лимит на разходите
Агентът създава пясъчници сам, затова му дайте таван, преди да започне. Два долара на ден и двайсет на месец са повече от достатъчно за експерименти:
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}'
Когато лимит бъде достигнат, новите пясъчници получават 429 budget_exceeded, а работещите временни се изтриват. Подробностите са в лимити и таксуване на пясъчниците.
2. Инсталирайте двете библиотеки
pip install eqvps anthropic
export EQVPS_API_KEY="your-eqvps-token"
export ANTHROPIC_API_KEY="your-model-key"
Примерът използва един доставчик на модели, но нищо не зависи от него. Само функцията ask() говори с модела.
3. Цикълът напиши, изпълни, поправи
Запазете това като 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."},
]
Пуснете го:
python3 agent.py
Типично пускане отпечатва attempt 1: exit code 0, а след това 78498. Ако първият скрипт се провали, ще видите втория опит с поправената грешка.
Какво прави всяка част:
Sandbox.create(..., idle_timeout=120)стартира microVM за около секунда. Ако скриптът ви умре по средата, пясъчникът така или иначе ще се изтрие сам след 2 минути бездействие.sb.run(code, timeout=55)изпълнява кода и връща кода на изход, stdout и stderr. Срив в кода е нормален резултат, а не изключение, затова цикълът може да го покаже на модела.r.stderr[-3000:]изпраща само края на грешката. Пълен traceback от голям скрипт може да изхаби много от контекста на модела.- Три опита са съзнателно ограничение. Модел, който не е поправил скрипт за три опита, обикновено има нужда от по-добро описание на задачата, а не от четвърти опит.
4. Когато задачата изисква повече от 55 секунди
Синхронно извикване трае най-много 55 секунди. По-дългата работа пуснете във фонов режим и изчакайте:
task = sb.run(code, background=True)
result = task.wait(timeout=1800)
Задачата продължава да работи, дори ако вашият wait стигне таймаута си, и можете да я подхванете отново с sb.task(task_id).
5. Същата задача през MCP, без код
Ако използвате MCP клиент като Claude Desktop или Cursor с MCP сървъра на EQVPS, агентът вече има инструментите за пясъчници: create_sandbox, run_code, exec_command, upload_file, download_file и kill_sandbox. Достатъчен е един промпт:
Създай малък временен пясъчник. Напиши Python скрипт, който брои простите числа под 1 000 000, изпълни го там, поправи го, ако се провали, кажи ми резултата и изтрий пясъчника.
Агентът прави същите извиквания като скрипта по-горе. Кои инструменти е безопасно да разрешите без потвърждение, е обяснено в защитите на MCP.
Колко струваше
Пясъчникът живя доста по-малко от минута и беше таксуван с минимума от 60 секунди: 0,00055 $ на small. Извикването на модела струва повече от пясъчника. Пробният кредит от 1 $ на нов акаунт стига за около 1800 такива пускания.
Накъде оттук
- SDK стъпка по стъпка: Python SDK за пясъчници за 5 минути или TypeScript.
- Всички методи и грешки: справочник за SDK.
- Тарифи и пробен кредит: страницата на пясъчниците.
Коментари
Още няма коментари. Бъди първият.