0Pricing
AI Agents · درس

خدمات E2B وبيئات الاختبار السحابية

حزمة E2B SDK وDaytona وواجهات sandbox المُدارة لوكلاء مفسّر التعليمات البرمجية.

خدمات E2B وبيئات الاختبار السحابية درس مجاني في AI Agents على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Agents، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Agents 4 دروس في المجموع.

ما المقصود بـ E2B؟

E2B (Environments to Build) هي خدمة بيئة معزولة سحابية مصممة خصيصًا لوكلاء التعليمات البرمجية المعتمدين على الذكاء الاصطناعي. وتوفر بيئات آمنة ومعزولة يمكن الوصول إليها عبر SDK بسيط لـ Python/JS، من دون الحاجة إلى إدارة Docker أو الأجهزة الافتراضية بنفسك.

كل بيئة معزولة هي جهاز افتراضي مصغر من Firecracker في سحابة E2B.

# Install the SDK
# pip install e2b-code-interpreter

from e2b_code_interpreter import Sandbox

sandbox = Sandbox()  # creates a new cloud sandbox
print('Sandbox ID:', sandbox.sandbox_id)

تشغيل التعليمات البرمجية في بيئة معزولة

يوفر الكائن Sandbox أسلوب run_code() ينفّذ Python ويعيد مخرجات منظمة تتضمن stdout وstderr وكائنات عرض غنية (مثل المخططات وإطارات البيانات).

from e2b_code_interpreter import Sandbox

with Sandbox() as sandbox:
    result = sandbox.run_code('print(2 ** 10)')
    print(result.logs.stdout)   # ['1024']
    print(result.error)         # None if no error

معالجة الأخطاء والاستثناءات

إذا رفعت التعليمات البرمجية استثناءً، فستحتوي result.error على تتبع المكدس. وتستمر البيئة المعزولة نفسها في التشغيل، ويمكنك إرسال تعليمات برمجية لاحقة لإصلاح الخطأ.

from e2b_code_interpreter import Sandbox

with Sandbox() as sandbox:
    result = sandbox.run_code('1 / 0')

    if result.error:
        print('Error name:', result.error.name)    # ZeroDivisionError
        print('Traceback:', result.error.traceback)
    else:
        print(result.logs.stdout)

تحميل الملفات إلى البيئة المعزولة

استخدم sandbox.files.write() لتحميل ملفات البيانات (CSV وJSON والصور) إلى نظام ملفات البيئة المعزولة قبل تشغيل تعليمات التحليل البرمجية.

from e2b_code_interpreter import Sandbox

csv_content = 'name,score\nAlice,95\nBob,87\nCarol,92'

with Sandbox() as sandbox:
    sandbox.files.write('/home/user/data.csv', csv_content.encode())

    result = sandbox.run_code(
        'import csv\n'
        'rows = list(csv.DictReader(open("/home/user/data.csv")))\n'
        'print([r["name"] for r in rows])'
    )
    print(result.logs.stdout)   # ["['Alice', 'Bob', 'Carol']"]

تنزيل الملفات من البيئة المعزولة

بعد إتمام الحساب، استرجع ملفات الإخراج (التقارير والمخططات والبيانات المعالَجة) باستخدام sandbox.files.read(). ويُعاد الملف على هيئة بايتات.

from e2b_code_interpreter import Sandbox
import json

with Sandbox() as sandbox:
    sandbox.run_code(
        'import json\n'
        'result = {"mean": 91.3, "max": 95}\n'
        'json.dump(result, open("/home/user/output.json", "w"))'
    )
    data = sandbox.files.read('/home/user/output.json')
    parsed = json.loads(data)
    print(parsed)  # {'mean': 91.3, 'max': 95}

تثبيت الحزم أثناء التشغيل

تأتي بيئات E2B المعزولة مزودة بـ Python مثبتًا مسبقًا. ثبّت حزم إضافية باستخدام run_code() عبر تشغيل أمر pip، ثم استخدم الحزمة في الاستدعاءات اللاحقة ضمن جلسة البيئة المعزولة نفسها.

from e2b_code_interpreter import Sandbox

with Sandbox() as sandbox:
    # Install pandas inside the sandbox
    sandbox.run_code('import subprocess; subprocess.run(["pip", "install", "pandas", "-q"])')

    # Now use pandas
    result = sandbox.run_code(
        'import pandas as pd\n'
        'df = pd.DataFrame({"x": [1,2,3], "y": [4,5,6]})\n'
        'print(df.describe())'
    )
    print(result.logs.stdout)

البيئات المعزولة المؤقتة مقابل المستمرة

تدعم E2B نمطين لدورة حياة البيئة المعزولة:

  • مؤقتة: تُدمّر البيئة المعزولة عند خروج التنفيذ من الكتلة with. استخدمها لتنفيذ التعليمات البرمجية لمرة واحدة.
  • مستمرة: تظل البيئة المعزولة قيد التشغيل عبر طلبات متعددة. استخدمها عندما تحتاج الحالة إلى التراكم عبر أدوار الوكيل.
from e2b_code_interpreter import Sandbox

# Ephemeral (default context manager)
with Sandbox() as sb:
    sb.run_code('x = 42')
# Sandbox destroyed here

# Persistent: keep alive for N seconds
sb = Sandbox(timeout=300)  # keep alive 5 minutes
try:
    sb.run_code('import numpy as np')  # expensive import cached
    sb.run_code('arr = np.arange(1000)')
    result = sb.run_code('print(arr.mean())')
    print(result.logs.stdout)
finally:
    sb.kill()  # explicit cleanup

إعادة الاتصال ببيئة معزولة قيد التشغيل

إذا أُعيد تشغيل عملية الوكيل أو مُرّر sandbox_id إلى خدمة أخرى، فيمكنك إعادة الاتصال ببيئة معزولة موجودة باستخدام معرّفها من دون فقدان الحالة.

from e2b_code_interpreter import Sandbox

# First session
sb1 = Sandbox(timeout=300)
sb1.run_code('accumulated_data = []')
sandbox_id = sb1.sandbox_id
print('Created:', sandbox_id)

# Later — different process, same sandbox
sb2 = Sandbox.connect(sandbox_id)
result = sb2.run_code('accumulated_data.append(1); print(accumulated_data)')
print(result.logs.stdout)  # '[1]' — state preserved

sb2.kill()

نموذج تسعير E2B

تفرض E2B رسومًا بناءً على ثواني البيئة المعزولة — أي مدة بقاء البيئة المعزولة قيد التشغيل، وليس مدة تشغيل التعليمات البرمجية فقط. وتشمل عوامل التسعير الرئيسية ما يلي:

  • تظل فترة الخمول مدفوعة إذا كانت البيئة المعزولة مستمرة
  • تُحتسب رسوم البيئات المعزولة المؤقتة من وقت إنشائها حتى تدميرها
  • قد تُفرض رسوم منفصلة على حركة البيانات الصادرة من الشبكة
  • استخدم timeout لتعيين مهلة إنهاء تلقائي
# Cost-optimization patterns:

# 1. Use short timeouts for one-shot executions
with Sandbox(timeout=60) as sb:
    result = sb.run_code('print("done")')
    # Auto-kills after 60s if not killed first

# 2. Kill immediately after use
sb = Sandbox()
try:
    sb.run_code('process_data()')
finally:
    sb.kill()   # don't wait for timeout

# 3. Share one sandbox across multiple agent steps
#    instead of creating a new one per step

استخدام E2B في حلقة الوكيل

في وكيل متعدد الأدوار، أنشئ البيئة المعزولة مرة واحدة ومرّر معرّفها عبر الحلقة. ويُشغّل كل مقطع من التعليمات البرمجية التي ينشئها LLM في الجلسة نفسها، لذلك تستمر المتغيرات والحزم المثبتة عبر الأدوار.

from e2b_code_interpreter import Sandbox
import openai

client = openai.OpenAI(api_key='YOUR_OPENAI_KEY')

def run_agent(user_question: str):
    with Sandbox(timeout=120) as sb:
        messages = [{'role': 'user', 'content': user_question}]

        for _ in range(5):  # max 5 turns
            resp = client.chat.completions.create(
                model='gpt-4o', messages=messages,
                tools=[{'type': 'function', 'function': {
                    'name': 'run_python',
                    'description': 'Execute Python in a secure sandbox',
                    'parameters': {'type': 'object',
                                   'properties': {'code': {'type': 'string'}},
                                   'required': ['code']}
                }}]
            )
            msg = resp.choices[0].message
            if msg.tool_calls:
                code = eval(msg.tool_calls[0].function.arguments)['code']
                result = sb.run_code(code)
                messages.append({'role': 'tool',
                                  'tool_call_id': msg.tool_calls[0].id,
                                  'content': str(result.logs.stdout)})
            else:
                return msg.content

خدمات البيئات المعزولة السحابية البديلة

ليست E2B الخيار الوحيد. ومن خدمات البيئات المعزولة السحابية الأخرى:

  • Modal: بيئات معزولة بلا خادم لوحدات معالجة الرسومات/وحدات المعالجة المركزية، مع صور Docker مخصصة
  • AWS Lambda: عزل التنفيذ لكل استدعاء (باستخدام Firecracker في الخلفية)
  • Code Interpreter API: بيئة OpenAI المعزولة المضمنة لأدوات ChatGPT
  • Daytona: بيئات معزولة للتطوير مع تكامل Git

ماذا يحدث للمتغيرات عند خروج بيئة E2B المعزولة المؤقتة من مدير السياق الخاص بها؟

يُعد فهم دورة حياة البيئة المعزولة أمرًا بالغ الأهمية لتحديد متى تستخدم البيئات المعزولة المؤقتة أو المستمرة في محادثات الوكيل متعددة الأدوار.

مراجعة البيئات المعزولة السحابية في E2B

توفر E2B SDK بسيطًا لبيئات Firecracker المعزولة المستضافة سحابيًا. وتشمل الأنماط الرئيسية: البيئات المعزولة المؤقتة لتنفيذ التعليمات البرمجية لمرة واحدة، والبيئات المعزولة المستمرة للوكلاء متعددي الأدوار، وتحميل الملفات وتنزيلها لإدخال البيانات وإخراجها، وإعادة الاتصال باستخدام المعرّف لسير العمل عبر الخدمات.

احرص دائمًا على إيقاف البيئات المعزولة صراحةً لتجنب الفوترة غير الضرورية.

الأسئلة الشائعة

هل درس «خدمات E2B وبيئات الاختبار السحابية» مجاني؟

نعم — نص درس «خدمات E2B وبيئات الاختبار السحابية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Agents، انتقل إلى CoddyKit PRO. تتضمن دورة AI Agents 4 دروس في المجموع.

ماذا ستتعلم في «خدمات E2B وبيئات الاختبار السحابية»؟

حزمة E2B SDK وDaytona وواجهات sandbox المُدارة لوكلاء مفسّر التعليمات البرمجية. تتمرن على AI Agents مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ AI Agents؟

لا تُشترط خبرة سابقة. AI Agents على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «خدمات E2B وبيئات الاختبار السحابية»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس AI Agents هذا؟

نعم. كل درس في AI Agents يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. بيئات اختبار الوكلاء المعتمدة على Docker
  2. العزل باستخدام الآلات الافتراضية لوكلاء التعليمات البرمجية عالية الأمان
  3. خدمات E2B وبيئات الاختبار السحابية
  4. سياسات الأمان لتنفيذ التعليمات البرمجية
← العودة إلى AI Agents