סוכן שכותב קוד שימושי רק אם משהו מריץ את הקוד בבטחה ומדווח על התוצאה. המדריך הזה בונה את הלולאה הזאת מההתחלה ועד הסוף: מודל כותב סקריפט 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 דולר לחשבון חדש מספיק לכ־1,800 הרצות כאלה.
לאן ממשיכים
- ה־SDK שלב אחר שלב: SDK של Python לארגזי חול ב־5 דקות או TypeScript.
- כל המתודות והשגיאות: מדריך ה־SDK.
- תעריפים וקרדיט ניסיון: עמוד ארגזי החול.
תגובות
אין עדיין תגובות. היו הראשונים.