E2B i chmurowe usługi sandboxów
E2B SDK, Daytona i zarządzane interfejsy API sandboxów dla agentów z interpreterem kodu.
E2B i chmurowe usługi sandboxów to bezpłatna lekcja AI Agents na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.
Czym jest E2B?
E2B (Environments to Build) to chmurowa usługa piaskownic zaprojektowana specjalnie dla agentów AI wykonujących kod. Udostępnia bezpieczne, izolowane środowiska dostępne za pośrednictwem prostego pakietu SDK dla Pythona lub JavaScriptu, bez konieczności samodzielnego zarządzania Dockerem lub maszynami wirtualnymi.
Każda piaskownica to mikroVM Firecracker działająca w chmurze 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)Uruchamianie kodu w piaskownicy
Obiekt Sandbox udostępnia metodę run_code(), która wykonuje kod Pythona i zwraca ustrukturyzowane dane wyjściowe obejmujące stdout, stderr oraz obiekty rozszerzonego wyświetlania (wykresy, ramki danych).
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 errorObsługa błędów i wyjątków
Jeśli kod zgłosi wyjątek, w polu result.error zostanie umieszczony ślad stosu. Sama piaskownica nadal działa — mogą Państwo wysłać kolejny fragment kodu, aby naprawić błąd.
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)Przesyłanie plików do piaskownicy
Należy użyć sandbox.files.write(), aby przed uruchomieniem kodu analitycznego przesłać pliki danych (CSV, JSON, obrazy) do systemu plików piaskownicy.
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']"]Pobieranie plików z piaskownicy
Po zakończeniu obliczeń należy pobrać pliki wyjściowe (raporty, wykresy, przetworzone dane) za pomocą sandbox.files.read(). Plik jest zwracany w postaci bajtów.
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}Instalowanie pakietów w czasie działania
Piaskownice E2B mają fabrycznie zainstalowanego Pythona. Dodatkowe pakiety można zainstalować za pomocą run_code(), uruchamiając polecenie pip, a następnie używać ich w kolejnych wywołaniach w ramach tej samej sesji piaskownicy.
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)Piaskownice trwałe i efemeryczne
E2B obsługuje dwa tryby cyklu życia piaskownicy:
- Efemeryczna: piaskownica jest niszczona po wyjściu z bloku
with. Należy używać jej do jednorazowego wykonywania kodu. - Trwała: piaskownica pozostaje aktywna między kolejnymi żądaniami. Należy używać jej, gdy stan musi narastać między kolejnymi turami agenta.
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 cleanupPonowne łączenie z działającą piaskownicą
Jeśli proces agenta zostanie uruchomiony ponownie lub identyfikator sandbox_id zostanie przekazany do innej usługi, można ponownie połączyć się z istniejącą piaskownicą za pomocą jej identyfikatora bez utraty stanu.
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()Model cenowy E2B
E2B nalicza opłaty na podstawie sandbox-seconds — czasu działania piaskownicy, a nie tylko czasu wykonywania kodu. Najważniejsze czynniki wpływające na cenę:
- Czas bezczynności nadal generuje koszty, jeśli piaskownica jest trwała
- W przypadku piaskownic efemerycznych opłaty są naliczane od utworzenia do zniszczenia
- Wychodzący ruch sieciowy może być rozliczany osobno
- Należy użyć
timeout, aby ustawić termin automatycznego zakończenia działania
# 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 stepUżywanie E2B w pętli agenta
W agencie wieloturowym należy utworzyć piaskownicę raz i przekazywać jej identyfikator przez pętlę. Każdy fragment kodu wygenerowany przez LLM jest uruchamiany w tej samej sesji, dzięki czemu zmienne i zainstalowane pakiety zachowują się między kolejnymi turami.
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.contentAlternatywne usługi piaskownic w chmurze
E2B nie jest jedyną opcją. Inne usługi piaskownic w chmurze:
- Modal: bezserwerowe piaskownice GPU/CPU, niestandardowe obrazy Docker
- AWS Lambda: izolacja wykonywania dla każdego wywołania (pod spodem Firecracker)
- Code Interpreter API: wbudowana piaskownica OpenAI dla narzędzi ChatGPT
- Daytona: środowiska programistyczne z integracją z Git
Co dzieje się ze zmiennymi po zakończeniu działania efemerycznej piaskownicy w menedżerze kontekstu?
Zrozumienie cyklu życia piaskownicy ma kluczowe znaczenie przy podejmowaniu decyzji, kiedy używać piaskownic efemerycznych, a kiedy trwałych w wieloturowych rozmowach z agentem.
Podsumowanie piaskownic E2B w chmurze
E2B udostępnia prosty pakiet SDK do hostowanych w chmurze piaskownic opartych na mikroVM-ach Firecracker. Najważniejsze wzorce to: piaskownice efemeryczne do jednorazowego wykonywania kodu, piaskownice trwałe dla agentów wieloturowych, przesyłanie i pobieranie plików w celu wymiany danych oraz ponowne łączenie za pomocą identyfikatora w przepływach pracy obejmujących wiele usług.
Należy zawsze jawnie kończyć działanie piaskownic, aby uniknąć niepotrzebnych opłat.
Często zadawane pytania
Czy lekcja „E2B i chmurowe usługi sandboxów” jest bezpłatna?
Tak — pełny tekst „E2B i chmurowe usługi sandboxów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.
Co nauczysz się w „E2B i chmurowe usługi sandboxów”?
E2B SDK, Daytona i zarządzane interfejsy API sandboxów dla agentów z interpreterem kodu. Ćwiczysz AI Agents z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć AI Agents?
Nie wymagamy żadnego doświadczenia. AI Agents w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „E2B i chmurowe usługi sandboxów”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents?
Tak. Każda lekcja AI Agents zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Sandboxy agentów oparte na Dockerze
- Izolacja maszyn wirtualnych dla agentów wykonujących kod o wysokim poziomie bezpieczeństwa
- E2B i chmurowe usługi sandboxów
- Zasady bezpieczeństwa wykonywania kodu