−25%

Windows کی سالانہ ادائیگی پر، 31 اکتوبر تک۔ پلانز دیکھیں

EQVPS
شروع کریں

سینڈباکس میں آپ کا پہلا ایجنٹ ٹاسک: LLM کوڈ لکھتا ہے، 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 لوٹاتا ہے۔ کوڈ کا کریش ہونا عام نتیجہ ہے، exception نہیں، اس لیے لوپ اسے ماڈل کو دکھا سکتا ہے۔
  • 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 سے، بغیر کوڈ

اگر آپ Claude Desktop یا Cursor جیسا MCP کلائنٹ EQVPS کے MCP سرور کے ساتھ استعمال کرتے ہیں تو ایجنٹ کے پاس سینڈباکس ٹولز پہلے سے ہیں: create_sandbox، run_code، exec_command، upload_file، download_file اور kill_sandbox۔ ایک پرامپٹ کافی ہے:

ایک چھوٹا عارضی سینڈباکس بناؤ۔ ایک Python اسکرپٹ لکھو جو 1,000,000 سے کم مفرد اعداد گنے، اسے وہاں چلاؤ، ناکام ہو تو ٹھیک کرو، مجھے نتیجہ بتاؤ اور سینڈباکس حذف کر دو۔

ایجنٹ وہی کالز کرتا ہے جو اوپر کی اسکرپٹ کرتی ہے۔ کون سے ٹولز بغیر تصدیق اجازت دینا محفوظ ہے، یہ MCP حفاظتی اقدامات میں بتایا گیا ہے۔

اس پر کتنا خرچ آیا

سینڈباکس ایک منٹ سے کافی کم چلا اور کم از کم 60 سیکنڈ کے حساب سے بل ہوا: small پر $0.00055۔ ماڈل کال کا خرچ سینڈباکس سے زیادہ ہے۔ نئے اکاؤنٹ کا $1 ٹرائل کریڈٹ ایسے تقریباً 1,800 رنز کے لیے کافی ہے۔

آگے کہاں جائیں

عمومی سوالات

ماڈل کا کوڈ سیدھا اپنی مشین پر کیوں نہ چلاؤں؟

کیونکہ آپ نہیں جانتے وہ کیا کرے گا۔ بنایا گیا کوڈ فائلیں مٹا سکتا ہے، آپ کی کیز پڑھ سکتا ہے یا لامتناہی لوپ میں پھنس سکتا ہے۔ سینڈباکس میں یہ اپنے kernel والے الگ microVM میں چلتا ہے، اور بعد میں سینڈباکس حذف ہو جاتا ہے۔

کیا یہ مثال والے ماڈل کے علاوہ دوسرے ماڈلز کے ساتھ بھی چلتا ہے؟

جی ہاں۔ لوپ کو بس ایک ایسا فنکشن چاہیے جو پیغامات لے اور ٹیکسٹ لوٹائے۔ ask() فنکشن کو کسی بھی چیٹ API سے بدلیں، لوکل ماڈل سے بھی۔

ایجنٹ کو لاتعداد سینڈباکس بنانے سے کیا روکتا ہے؟

شروع کرنے سے پہلے روزانہ اور ماہانہ خرچ کی حد مقرر کریں۔ حد پوری ہونے پر نئے سینڈباکس 429 budget_exceeded کے ساتھ رد ہو جاتے ہیں۔ ساتھ ہی ایک اکاؤنٹ پر بیک وقت صرف دو کمانڈز چلتی ہیں، اس لیے بے قابو لوپ کئی گنا نہیں بڑھ سکتا۔

کیا بنایا گیا کوڈ انٹرنیٹ تک جا سکتا ہے؟

جی ہاں، سینڈباکس باہر انٹرنیٹ سے جڑ سکتے ہیں تاکہ کوڈ پیکیج انسٹال کر سکے اور ڈیٹا لا سکے۔ ان میں آنے والے پورٹس نہیں۔ پرامپٹ یا کوڈ میں راز نہ ڈالیں؛ اسکرپٹ کو جو واقعی چاہیے وہ انوائرنمنٹ ویری ایبلز سے دیں۔

تبصرے

ابھی کوئی تبصرہ نہیں۔ پہلے بنیں۔

ایک تبصرہ چھوڑیں

تبصرے ظاہر ہونے سے پہلے moderate کیے جاتے ہیں۔