−25%

Windows-এর বার্ষিক পেমেন্টে, ৩১ অক্টোবর পর্যন্ত। প্ল্যান দেখুন

EQVPS
শুরু করুন

স্যান্ডবক্সে আপনার প্রথম এজেন্ট টাস্ক: LLM কোড লেখে, microVM সেটি চালায়

AI দিয়ে কোড চালানোর সবচেয়ে ছোট কাজের লুপ তৈরি করুন: মডেল Python স্ক্রিপ্ট লেখে, Firecracker স্যান্ডবক্স তা চালায়, আর স্ক্রিপ্ট না চলা পর্যন্ত ত্রুটি মডেলের কাছে ফেরে। প্রায় ৪০ লাইন, সঙ্গে কোনো কোড ছাড়াই MCP দিয়ে একই কাজ।

কোড লেখা এজেন্ট তখনই কাজের, যখন কিছু একটা সেই কোড নিরাপদে চালিয়ে ফল জানায়। এই গাইড সেই লুপ শুরু থেকে শেষ পর্যন্ত তৈরি করে: মডেল একটি Python স্ক্রিপ্ট লেখে, স্যান্ডবক্স তা চালায়, আর ব্যর্থ হলে ত্রুটি মডেলের কাছে ফিরে যায়। তারপর একই কাজ এক লাইন কোড ছাড়াই, MCP দিয়ে।

আপনার লাগবে Python 3.8+, একটি EQVPS অ্যাকাউন্ট টোকেন (অ্যাকাউন্ট সংযোগ দেখুন) এবং কোনো মডেলের API কী।

১. আগে খরচের সীমা ঠিক করুন

এজেন্ট নিজেই স্যান্ডবক্স তৈরি করে, তাই শুরুর আগে তাকে একটা ছাদ দিন। পরীক্ষার জন্য দিনে দুই ডলার আর মাসে বিশ ডলার যথেষ্টের চেয়েও বেশি:

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 পায় এবং চলমান অস্থায়ী স্যান্ডবক্স মুছে যায়। বিস্তারিত আছে স্যান্ডবক্সের সীমা ও বিলিং-এ।

২. দুটি লাইব্রেরি ইনস্টল করুন

pip install eqvps anthropic
export EQVPS_API_KEY="your-eqvps-token"
export ANTHROPIC_API_KEY="your-model-key"

উদাহরণে একটি মডেল প্রদানকারী ব্যবহার করা হয়েছে, কিন্তু কিছুই তার ওপর নির্ভর করে না। মডেলের সঙ্গে কথা বলে শুধু ask() ফাংশন।

৩. লেখো, চালাও, ঠিক করো লুপ

এটি 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 চালু করে। আপনার স্ক্রিপ্ট মাঝপথে থেমে গেলেও স্যান্ডবক্স ২ মিনিট নিষ্ক্রিয় থাকার পর নিজেই মুছে যায়।
  • sb.run(code, timeout=55) কোড চালিয়ে এক্সিট কোড, stdout ও stderr ফেরত দেয়। কোড ক্র্যাশ করা স্বাভাবিক ফল, exception নয়, তাই লুপ তা মডেলকে দেখাতে পারে।
  • r.stderr[-3000:] ত্রুটির শুধু শেষ অংশ পাঠায়। বড় স্ক্রিপ্টের পুরো traceback মডেলের অনেক কনটেক্সট নষ্ট করতে পারে।
  • তিনবার চেষ্টা ইচ্ছাকৃত সীমা। যে মডেল তিনবারে স্ক্রিপ্ট ঠিক করতে পারেনি, তার সাধারণত চতুর্থ চেষ্টা নয়, ভালো কাজের বর্ণনা দরকার।

৪. কাজে ৫৫ সেকেন্ডের বেশি লাগলে

একটি সিনক্রোনাস কল সর্বোচ্চ ৫৫ সেকেন্ড চলে। লম্বা কাজ ব্যাকগ্রাউন্ডে শুরু করে অপেক্ষা করুন:

task = sb.run(code, background=True)
result = task.wait(timeout=1800)

আপনার wait টাইমআউট হলেও টাস্ক চলতে থাকে, আর sb.task(task_id) দিয়ে আবার ধরতে পারেন।

৫. একই কাজ MCP দিয়ে, কোড ছাড়া

Claude Desktop বা Cursor-এর মতো MCP ক্লায়েন্টে EQVPS MCP সার্ভার ব্যবহার করলে এজেন্টের কাছে আগে থেকেই স্যান্ডবক্স টুল আছে: create_sandbox, run_code, exec_command, upload_file, download_file এবং kill_sandbox। একটি প্রম্পটই যথেষ্ট:

একটি ছোট অস্থায়ী স্যান্ডবক্স তৈরি করো। এমন একটি Python স্ক্রিপ্ট লেখো যা 1,000,000-এর কম মৌলিক সংখ্যা গোনে, সেখানে চালাও, ব্যর্থ হলে ঠিক করো, আমাকে ফল জানাও এবং স্যান্ডবক্স মুছে দাও।

এজেন্ট ওপরের স্ক্রিপ্টের মতোই কল করে। কোন টুল নিশ্চিতকরণ ছাড়া অনুমতি দেওয়া নিরাপদ, তা আছে MCP সুরক্ষা ব্যবস্থা-য়।

খরচ কত হলো

স্যান্ডবক্স এক মিনিটেরও অনেক কম ছিল এবং সর্বনিম্ন ৬০ সেকেন্ড হিসেবে বিল হয়েছে: small-এ $0.00055। মডেল কলের খরচ স্যান্ডবক্সের চেয়ে বেশি। নতুন অ্যাকাউন্টের $1 ট্রায়াল ক্রেডিটে এমন প্রায় ১,৮০০টি রান হয়।

এরপর কোথায়

FAQ

মডেলের কোড সরাসরি নিজের মেশিনে কেন চালাব না?

কারণ আপনি জানেন না এটি কী করবে। তৈরি হওয়া কোড ফাইল মুছতে, আপনার কী পড়তে বা অসীম লুপে আটকে যেতে পারে। স্যান্ডবক্সে এটি নিজস্ব kernel-যুক্ত আলাদা microVM-এ চলে, আর পরে স্যান্ডবক্স মুছে যায়।

উদাহরণের মডেল ছাড়া অন্য মডেলেও কি এটা চলে?

হ্যাঁ। লুপের শুধু এমন একটি ফাংশন লাগে যা বার্তা নেয় আর টেক্সট ফেরত দেয়। ask() ফাংশনটি যেকোনো চ্যাট API দিয়ে বদলান, লোকাল মডেল দিয়েও।

এজেন্টকে অসংখ্য স্যান্ডবক্স তৈরি করা থেকে কী আটকায়?

শুরুর আগে দৈনিক ও মাসিক খরচের সীমা ঠিক করুন। সীমায় পৌঁছালে নতুন স্যান্ডবক্স 429 budget_exceeded দিয়ে প্রত্যাখ্যাত হয়। তা ছাড়া এক অ্যাকাউন্টে একসঙ্গে শুধু দুটি কমান্ড চলে, তাই নিয়ন্ত্রণহীন লুপ বহুগুণ বাড়তে পারে না।

তৈরি হওয়া কোড কি ইন্টারনেটে যেতে পারে?

হ্যাঁ, স্যান্ডবক্স বাইরের ইন্টারনেটে যেতে পারে যাতে কোড প্যাকেজ ইনস্টল ও ডেটা আনতে পারে। আসার কোনো পোর্ট নেই। প্রম্পট বা কোডে গোপন তথ্য রাখবেন না; স্ক্রিপ্টের সত্যিই যা দরকার তা এনভায়রনমেন্ট ভেরিয়েবল হিসেবে দিন।

মন্তব্য

এখনো কোনো মন্তব্য নেই। প্রথম হোন।

একটি মন্তব্য দিন

মন্তব্য প্রকাশের আগে মডারেট করা হয়।