0Pricing
AI Agents · บทเรียน

บริการแซนด์บ็อกซ์ E2B และระบบคลาวด์

E2B SDK, Daytona และ API แซนด์บ็อกซ์ที่มีการจัดการสำหรับเอเจนต์แปลโค้ด

บริการแซนด์บ็อกซ์ E2B และระบบคลาวด์ เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน

E2B คืออะไร

อีทูบี (สภาพแวดล้อมสำหรับสร้าง) คือบริการแซนด์บ็อกซ์บนคลาวด์ที่ออกแบบมาโดยเฉพาะสำหรับเอเจนต์ AI ที่ทำงานกับโค้ด บริการนี้มอบสภาพแวดล้อมที่ปลอดภัยและแยกออกจากกัน ซึ่งเข้าถึงได้ผ่าน SDK ของไพธอน/JS ที่เรียบง่าย โดยไม่ต้องจัดการด็อกเกอร์หรือ VM ด้วยตนเอง

แซนด์บ็อกซ์แต่ละชุดเป็น microVM ของไฟร์แครกเกอร์บนคลาวด์ของอีทูบี

# 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() ที่เรียกใช้ไพธอนและส่งคืนเอาต์พุตแบบมีโครงสร้าง ซึ่งรวมถึงเอาต์พุตมาตรฐาน ข้อผิดพลาดมาตรฐาน และวัตถุแสดงผลแบบหลากหลาย เช่น แผนภูมิและดาต้าเฟรม

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 เจสัน และรูปภาพ) ไปยังระบบไฟล์ของแซนด์บ็อกซ์ก่อนเรียกใช้โค้ดวิเคราะห์

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}

การติดตั้งแพ็กเกจขณะทำงาน

แซนด์บ็อกซ์ของอีทูบีติดตั้งไพธอนไว้ล่วงหน้าแล้ว ให้ติดตั้งแพ็กเกจเพิ่มเติมด้วย run_code() โดยเรียกใช้คำสั่งตัวจัดการแพ็กเกจ จากนั้นจึงใช้แพ็กเกจนั้นในการเรียกครั้งถัด ๆ ไปภายในเซสชันแซนด์บ็อกซ์เดียวกัน

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)

แซนด์บ็อกซ์แบบคงอยู่เทียบกับแบบชั่วคราว

อีทูบีรองรับโหมดวงจรชีวิตของแซนด์บ็อกซ์สองแบบ:

  • ชั่วคราว: แซนด์บ็อกซ์จะถูกทำลายเมื่อบล็อก 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

การเชื่อมต่อกับแซนด์บ็อกซ์ที่กำลังทำงานอยู่ใหม่

หากกระบวนการของเอเจนต์เริ่มต้นใหม่ หรือมีการส่งรหัสแซนด์บ็อกซ์ไปยังบริการอื่น คุณสามารถเชื่อมต่อกับแซนด์บ็อกซ์ที่มีอยู่เดิมใหม่โดยใช้ 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()

รูปแบบค่าบริการของอีทูบี

อีทูบีคิดค่าบริการตาม วินาทีที่แซนด์บ็อกซ์ทำงาน ซึ่งหมายถึงเวลาที่แซนด์บ็อกซ์ยังทำงานอยู่ ไม่ใช่เฉพาะเวลาที่โค้ดกำลังทำงาน ปัจจัยสำคัญในการคิดค่าบริการมีดังนี้:

  • เวลาที่ไม่ได้ใช้งานยังมีค่าใช้จ่าย หากแซนด์บ็อกซ์เป็นแบบคงอยู่
  • แซนด์บ็อกซ์แบบชั่วคราวจะคิดค่าบริการตั้งแต่สร้างจนถึงทำลาย
  • การส่งข้อมูลออกผ่านเครือข่ายอาจมีค่าบริการแยกต่างหาก
  • ใช้ 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

การใช้อีทูบีในลูปของเอเจนต์

ในเอเจนต์ที่ทำงานหลายรอบ ให้สร้างแซนด์บ็อกซ์เพียงครั้งเดียวและส่ง ID ของแซนด์บ็อกซ์ต่อไปในลูป โค้ดแต่ละส่วนที่ 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

บริการแซนด์บ็อกซ์บนคลาวด์ทางเลือก

อีทูบีไม่ใช่ตัวเลือกเดียว ยังมีบริการแซนด์บ็อกซ์บนคลาวด์อื่น ๆ ได้แก่:

  • โมดัล: แซนด์บ็อกซ์ GPU/CPU แบบไร้เซิร์ฟเวอร์ และอิมเมจด็อกเกอร์ที่กำหนดเอง
  • AWS Lambda: การแยกการทำงานต่อการเรียกใช้หนึ่งครั้ง (ใช้ไฟร์แครกเกอร์อยู่เบื้องหลัง)
  • ส่วนติดต่อโปรแกรมประยุกต์ตัวแปลโค้ด: แซนด์บ็อกซ์ในตัวของ OpenAI สำหรับเครื่องมือ ChatGPT
  • เดย์โทนา: แซนด์บ็อกซ์สำหรับการพัฒนาที่ผสานรวมกับกิต

ตัวแปรจะเป็นอย่างไรเมื่อแซนด์บ็อกซ์อีทูบีแบบชั่วคราวออกจากตัวจัดการบริบท

การทำความเข้าใจวงจรชีวิตของแซนด์บ็อกซ์มีความสำคัญอย่างยิ่งต่อการตัดสินใจว่าจะใช้แซนด์บ็อกซ์แบบชั่วคราวหรือแบบคงอยู่ในการสนทนาของเอเจนต์ที่ทำงานหลายรอบ

สรุปแซนด์บ็อกซ์บนคลาวด์ของอีทูบี

อีทูบีมี SDK ที่เรียบง่ายสำหรับแซนด์บ็อกซ์ microVM ของไฟร์แครกเกอร์ที่ทำงานบนคลาวด์ รูปแบบสำคัญ ได้แก่ แซนด์บ็อกซ์ แบบชั่วคราวสำหรับโค้ดที่ทำงานครั้งเดียว แซนด์บ็อกซ์ แบบคงอยู่สำหรับเอเจนต์ที่ทำงานหลายรอบ การ อัปโหลด/ดาวน์โหลดไฟล์สำหรับนำข้อมูลเข้าและออก และการ เชื่อมต่อใหม่ด้วย IDสำหรับเวิร์กโฟลว์ข้ามบริการ

ควรยุติแซนด์บ็อกซ์อย่างชัดเจนเสมอ เพื่อหลีกเลี่ยงค่าบริการที่ไม่จำเป็น

คำถามที่พบบ่อย

บทเรียน “บริการแซนด์บ็อกซ์ E2B และระบบคลาวด์” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “บริการแซนด์บ็อกซ์ E2B และระบบคลาวด์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “บริการแซนด์บ็อกซ์ E2B และระบบคลาวด์”

E2B SDK, Daytona และ API แซนด์บ็อกซ์ที่มีการจัดการสำหรับเอเจนต์แปลโค้ด คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “บริการแซนด์บ็อกซ์ E2B และระบบคลาวด์” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม

ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. แซนด์บ็อกซ์เอเจนต์บน Docker
  2. การแยก VM สำหรับเอเจนต์รันโค้ดความปลอดภัยสูง
  3. บริการแซนด์บ็อกซ์ E2B และระบบคลาวด์
  4. นโยบายความปลอดภัยสำหรับการเรียกใช้โค้ด
← กลับไปที่ AI Agents