−25%

על Windows בתשלום שנתי, עד 31.10. לחבילות

EQVPS
התחלה

משימת הסוכן הראשונה שלכם בארגז חול: מודל שפה כותב קוד, microVM מריץ אותו

בנו את הלולאה המועילה הקטנה ביותר להרצת קוד עם AI: מודל כותב סקריפט Python, ארגז חול של Firecracker מריץ אותו, והשגיאות חוזרות למודל עד שהסקריפט עובד. כ־40 שורות, ובנוסף אותה משימה דרך MCP בלי שום קוד.

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

לאן ממשיכים

שאלות נפוצות

למה לא פשוט להריץ את הקוד של המודל על המכונה שלי?

כי אתם לא יודעים מה הוא יעשה. קוד שנוצר יכול למחוק קבצים, לקרוא את המפתחות שלכם או להיכנס ללולאה אינסופית. בארגז חול הוא רץ ב־microVM נפרד עם ליבה משלו, ואחר כך ארגז החול נמחק.

זה עובד גם עם מודלים אחרים מזה שבדוגמה?

כן. הלולאה צריכה רק פונקציה שמקבלת הודעות ומחזירה טקסט. החליפו את הפונקציה ask() בכל API של צ'אט, כולל מודל מקומי.

מה מונע מסוכן ליצור ארגזי חול בלי סוף?

קבעו תקרת הוצאה יומית וחודשית לפני שמתחילים. כשמגיעים לתקרה, ארגזי חול חדשים נדחים עם 429 budget_exceeded. בנוסף, בכל חשבון רצות רק שתי פקודות בו־זמנית, כך שלולאה שיצאה משליטה לא יכולה להתרבות.

האם הקוד שנוצר יכול לגשת לאינטרנט?

כן, לארגזי החול יש גישה יוצאת לאינטרנט כדי שהקוד יוכל להתקין חבילות ולהביא נתונים. אין להם פורטים נכנסים. אל תשימו סודות בפרומפט או בקוד; העבירו את מה שהסקריפט באמת צריך כמשתני סביבה.

תגובות

אין עדיין תגובות. היו הראשונים.

השאירו תגובה

התגובות עוברות מודרציה לפני שהן מופיעות.