აგენტი, რომელიც კოდს წერს, მხოლოდ მაშინაა სასარგებლო, როცა რაღაც ამ კოდს უსაფრთხოდ ასრულებს და შედეგს აცნობებს. ეს გზამკვლევი ამ ციკლს თავიდან ბოლომდე აწყობს: მოდელი წერს Python სკრიპტს, sandbox უშვებს მას, და თუ ის ვერ სრულდება, შეცდომა მოდელს უბრუნდება. შემდეგ იგივე ამოცანა კოდის ერთი ხაზის გარეშე, MCP-ით.
გჭირდებათ Python 3.8+, EQVPS-ის ანგარიშის ტოკენი (იხ. ანგარიშის დაკავშირება) და მოდელის API გასაღები.
1. ჯერ დააყენეთ ხარჯის ლიმიტი
აგენტი sandbox-ებს თავად ქმნის, ამიტომ დაწყებამდე მიეცით ჭერი. ექსპერიმენტებისთვის დღეში ორი დოლარი და თვეში ოცი დოლარი სრულიად საკმარისია:
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}'
ლიმიტის მიღწევისას ახალი sandbox-ები იღებენ 429 budget_exceeded-ს, ხოლო გაშვებული დროებითი sandbox-ები იშლება. დეტალები sandbox-ის ლიმიტებსა და ბილინგშია.
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-ს. თუ თქვენი სკრიპტი შუა გზაზე მოკვდება, sandbox მაინც თავს წაშლის 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, EQVPS-ის MCP სერვერთან ერთად, აგენტს უკვე აქვს sandbox-ის ხელსაწყოები: create_sandbox, run_code, exec_command, upload_file, download_file და kill_sandbox. ერთი პრომპტი საკმარისია:
შექმენი პატარა დროებითი sandbox. დაწერე Python სკრიპტი, რომელიც 1 000 000-ზე ნაკლებ მარტივ რიცხვებს დაითვლის, გაუშვი იქ, გაასწორე, თუ ვერ შესრულდება, მითხარი შედეგი და წაშალე sandbox.
აგენტი იმავე გამოძახებებს აკეთებს, რასაც ზემოთ მოცემული სკრიპტი. რომელი ხელსაწყოების დაშვება შეიძლება დადასტურების გარეშე, ახსნილია MCP-ის დამცავ ზღვრებში.
რა დაჯდა
sandbox ერთ წუთზე გაცილებით ნაკლები არსებობდა და მინიმალური 60 წამით დაირიცხა: small-ზე $0.00055. მოდელის გამოძახება sandbox-ზე ძვირი ჯდება. ახალი ანგარიშის $1-იანი საცდელი კრედიტი დაახლოებით 1 800 ასეთ გაშვებას ჰყოფნის.
სად წავიდეთ შემდეგ
- SDK ნაბიჯ-ნაბიჯ: Sandbox-ის Python SDK 5 წუთში ან TypeScript.
- ყველა მეთოდი და შეცდომა: SDK-ის ცნობარი.
- ტარიფები და საცდელი კრედიტი: sandbox-ის გვერდი.
კომენტარები
ჯერ არ არის კომენტარები. იყავით პირველი.