−25%

στα Windows με ετήσια χρέωση, έως 31/10. Δείτε τα πακέτα

EQVPS
Ξεκινήστε

Η πρώτη σας εργασία agent σε sandbox: ένα LLM γράφει κώδικα, ένα microVM τον εκτελεί

Φτιάξτε τον μικρότερο χρήσιμο βρόχο εκτέλεσης κώδικα με AI: ένα μοντέλο γράφει script Python, ένα sandbox Firecracker το τρέχει, τα σφάλματα επιστρέφουν στο μοντέλο μέχρι να δουλέψει το script. Περίπου 40 γραμμές, συν την ίδια εργασία μέσω MCP χωρίς καθόλου κώδικα.

Ένας agent που γράφει κώδικα είναι χρήσιμος μόνο αν κάτι εκτελεί αυτόν τον κώδικα με ασφάλεια και αναφέρει το αποτέλεσμα. Αυτός ο οδηγός χτίζει αυτόν τον βρόχο από την αρχή ως το τέλος: ένα μοντέλο γράφει script Python, ένα sandbox το τρέχει, και αν αποτύχει, το σφάλμα γυρίζει στο μοντέλο. Μετά η ίδια εργασία χωρίς ούτε μία γραμμή κώδικα, μέσω MCP.

Χρειάζεστε Python 3.8+, token λογαριασμού EQVPS (δείτε σύνδεση λογαριασμού) και κλειδί API για ένα μοντέλο.

1. Ορίστε πρώτα όριο δαπανών

Ένας agent δημιουργεί sandboxes μόνος του, οπότε δώστε του ένα ταβάνι πριν ξεκινήσει. Δύο δολάρια την ημέρα και είκοσι τον μήνα αρκούν και περισσεύουν για πειράματα:

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}'

Όταν συμπληρωθεί ένα όριο, τα νέα sandboxes παίρνουν 429 budget_exceeded και τα προσωρινά που τρέχουν διαγράφονται. Λεπτομέρειες στα όρια και χρέωση sandboxes.

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. Αν το πρώτο script αποτύχει, θα δείτε τη δεύτερη προσπάθεια με το σφάλμα διορθωμένο.

Τι κάνει κάθε κομμάτι:

  • Sandbox.create(..., idle_timeout=120) ξεκινά ένα microVM σε περίπου ένα δευτερόλεπτο. Αν το script σας πεθάνει στη μέση, το sandbox θα διαγραφεί μόνο του έτσι κι αλλιώς μετά από 2 λεπτά αδράνειας.
  • sb.run(code, timeout=55) εκτελεί τον κώδικα και επιστρέφει κωδικό εξόδου, stdout και stderr. Ένα κρασάρισμα του κώδικα είναι κανονικό αποτέλεσμα, όχι exception, οπότε ο βρόχος μπορεί να το δείξει στο μοντέλο.
  • r.stderr[-3000:] στέλνει μόνο το τέλος του σφάλματος. Ένα πλήρες traceback από μεγάλο script μπορεί να σπαταλήσει πολύ από το context του μοντέλου.
  • Τρεις προσπάθειες είναι σκόπιμο όριο. Ένα μοντέλο που δεν διόρθωσε ένα script σε τρεις προσπάθειες συνήθως χρειάζεται καλύτερη περιγραφή της εργασίας, όχι τέταρτη προσπάθεια.

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 με τον server MCP της EQVPS, ο agent έχει ήδη τα εργαλεία sandbox: create_sandbox, run_code, exec_command, upload_file, download_file και kill_sandbox. Αρκεί ένα prompt:

Δημιούργησε ένα μικρό προσωρινό sandbox. Γράψε ένα script Python που μετρά τους πρώτους αριθμούς κάτω από 1.000.000, τρέξ' το εκεί, διόρθωσέ το αν αποτύχει, πες μου το αποτέλεσμα και διάγραψε το sandbox.

Ο agent κάνει τις ίδιες κλήσεις με το script παραπάνω. Ποια εργαλεία μπορείτε να επιτρέψετε χωρίς επιβεβαίωση εξηγείται στις προστασίες MCP.

Πόσο κόστισε

Το sandbox έζησε πολύ λιγότερο από ένα λεπτό και χρεώθηκε το ελάχιστο των 60 δευτερολέπτων: 0,00055 $ στο small. Η κλήση του μοντέλου κοστίζει περισσότερο από το sandbox. Η δοκιμαστική πίστωση 1 $ ενός νέου λογαριασμού καλύπτει περίπου 1.800 τέτοιες εκτελέσεις.

Πού να πάτε μετά

Συχνές ερωτήσεις

Γιατί να μην τρέξω απλώς τον κώδικα του μοντέλου στο δικό μου μηχάνημα;

Γιατί δεν ξέρετε τι θα κάνει. Ο παραγόμενος κώδικας μπορεί να σβήσει αρχεία, να διαβάσει τα κλειδιά σας ή να μπει σε ατέρμονο βρόχο. Σε sandbox τρέχει σε ξεχωριστό microVM με δικό του πυρήνα, και μετά το sandbox διαγράφεται.

Δουλεύει με άλλα μοντέλα εκτός από αυτό του παραδείγματος;

Ναι. Ο βρόχος χρειάζεται μόνο μια συνάρτηση που δέχεται μηνύματα και επιστρέφει κείμενο. Αντικαταστήστε τη συνάρτηση ask() με οποιοδήποτε chat API, ακόμη και με τοπικό μοντέλο.

Τι εμποδίζει έναν agent να δημιουργεί sandboxes ατελείωτα;

Ορίστε ημερήσιο και μηνιαίο όριο δαπανών πριν ξεκινήσετε. Όταν το όριο συμπληρωθεί, τα νέα sandboxes απορρίπτονται με 429 budget_exceeded. Επιπλέον, σε έναν λογαριασμό τρέχουν μόνο δύο εντολές ταυτόχρονα, οπότε ένας ανεξέλεγκτος βρόχος δεν μπορεί να πολλαπλασιαστεί.

Μπορεί ο παραγόμενος κώδικας να βγει στο διαδίκτυο;

Ναι, τα sandboxes έχουν εξερχόμενη πρόσβαση στο διαδίκτυο ώστε ο κώδικας να εγκαθιστά πακέτα και να φέρνει δεδομένα. Δεν έχουν εισερχόμενες θύρες. Μη βάζετε μυστικά στο prompt ή στον κώδικα· περάστε όσα χρειάζεται πραγματικά ένα script ως μεταβλητές περιβάλλοντος.

Σχόλια

Δεν υπάρχουν ακόμη σχόλια. Γίνετε ο πρώτος.

Αφήστε ένα σχόλιο

Τα σχόλια ελέγχονται πριν εμφανιστούν.