E2B и облачные сервисы песочниц
SDK E2B, Daytona и управляемые API песочниц для агентов — интерпретаторов кода.
«E2B и облачные сервисы песочниц» — бесплатный урок AI Agents на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Что такое E2B?
E2B (Environments to Build — «среды для создания») — облачный сервис песочниц, специально разработанный для агентов ИИ, работающих с кодом. Он предоставляет безопасные изолированные среды, доступные через простой SDK для Python/JS, без необходимости самостоятельно управлять Docker или VM.
Каждая песочница — это MicroVM 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 и возвращает структурированный результат, включая стандартный вывод, стандартный поток ошибок и объекты расширенного отображения (графики, таблицы данных).
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Повторное подключение к работающей песочнице
Если процесс агента перезапускается или идентификатор песочницы передается другой службе, можно повторно подключиться к существующей песочнице по ее идентификатору без потери состояния.
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: бессерверные песочницы с GPU/CPU и пользовательские образы Docker
- AWS Lambda: изоляция выполнения при каждом вызове (в основе используется Firecracker)
- Code Interpreter API: встроенная песочница OpenAI для инструментов ChatGPT
- Daytona: среды разработки с интеграцией Git
Что происходит с переменными, когда эфемерная песочница E2B выходит из контекстного менеджера?
Понимание жизненного цикла песочницы крайне важно для выбора между эфемерными и постоянными песочницами в многошаговых диалогах с агентом.
Итоги по облачным песочницам E2B
E2B предоставляет простой SDK для облачных песочниц на основе MicroVM Firecracker. Основные подходы: эфемерные песочницы для однократного выполнения кода, постоянные песочницы для многошаговых агентов, загрузка и скачивание файлов для передачи данных в песочницу и из нее, а также повторное подключение по идентификатору для рабочих процессов между службами.
Всегда явно завершайте работу песочниц, чтобы избежать ненужных расходов.
Часто задаваемые вопросы
Урок «E2B и облачные сервисы песочниц» бесплатный?
Да — полный текст урока «E2B и облачные сервисы песочниц» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «E2B и облачные сервисы песочниц»?
SDK E2B, Daytona и управляемые API песочниц для агентов — интерпретаторов кода. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «E2B и облачные сервисы песочниц»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Песочницы агентов на основе Docker
- Изоляция в VM для защищённых агентов, работающих с кодом
- E2B и облачные сервисы песочниц
- Политики безопасности для выполнения кода