- Publicado el
Lanzando flujos de trabajo de IA en sandboxes de E2B: una guía para principiantes

En esta publicación, exploramos cómo configurar sandboxes de E2B y aprovechar DeepSeek AI para ejecutar flujos de trabajo de IA impulsados por Python. Al integrar la generación de código impulsada por LLM con los versátiles sandboxes de E2B, los desarrolladores pueden simplificar tareas complejas como el procesamiento y visualización de datos. Los ejemplos a continuación demuestran flujos de trabajo paso a paso, incluyendo la creación de scripts de Python impulsados por IA y la generación de insights a través de gráficos.
¿Qué es E2B?
E2B es una infraestructura de código abierto que permite a los desarrolladores ejecutar código generado por IA en sandboxes seguros y aislados alojados en la nube. Estos sandboxes son máquinas virtuales (VMs) ligeras que pueden iniciarse en tan solo ~150ms, lo que las hace ideales para aplicaciones en tiempo real. Ya sea que estés construyendo herramientas de análisis de datos con IA, entornos de codificación o aplicaciones completas de IA, E2B proporciona la base para hacer que tus proyectos sean escalables, seguros y eficientes.
Para más detalles, consulta mi entrada de blog sobre Construyendo aplicaciones impulsadas por IA con sandboxes de E2B.
Configuración de sandboxes de E2B
Los sandboxes de E2B proporcionan entornos aislados y escalables perfectos para ejecutar aplicaciones de IA. Sigue estos pasos para comenzar:
- Regístrate en E2B: Crea una cuenta en la plataforma E2B.
- Configura las claves API:
- Genera una clave API para E2B y configúrala como una variable de entorno:
export E2B_API_KEY=your_key
- Genera una clave API desde DeepSeek AI y configúrala como una variable de entorno:
export DEEPSEEK_API_KEY=your_key
- Opcional: Si decides usar Mistral como la API, necesitarás configurar esta variable de entorno:
export MISTRAL_API_KEY=your_key
Una vez que tu sandbox esté listo, puedes proceder a ejecutar flujos de trabajo e interactuar con DeepSeek AI.
Ejecución de flujos de trabajo impulsados por IA
Esta sección demuestra cómo ejecutar flujos de trabajo impulsados por IA utilizando el entorno de sandbox de E2B. El script de Python e2b_llm_integration.py
se integra con modelos de IA como DeepSeek y Mistral para generar y ejecutar código Python. A continuación, desglosamos la funcionalidad del script y cómo aprovecha los sandboxes de E2B para una ejecución segura y aislada.
Resumen del script de Python
El script de Python, e2b_llm_integration.py
, sirve como una herramienta integral para generar y ejecutar código Python utilizando modelos de IA como Mistral y DeepSeek. Facilita la interacción con estos modelos al aceptar prompts del usuario, recuperar el código Python generado y ejecutarlo dentro de un entorno de sandbox de E2B. Las características clave incluyen:
- Soporte para las APIs de Mistral y DeepSeek con selección flexible de API.
- Extracción de bloques de código Python usando regex para una ejecución limpia.
- Soporte para argumentos de línea de comandos para especificar prompts, opciones de API, rutas de archivos de salida y archivos de entrada.
- Manejo de archivos: El script espera que el código Python generado cree un archivo (por ejemplo, un gráfico) dentro del entorno de sandbox. Después de la ejecución, el script recupera este archivo del sandbox y lo guarda en el directorio local especificado. Esto asegura que la salida (por ejemplo, visualizaciones) sea accesible fuera del sandbox.
Argumentos de línea de comandos
El script admite los siguientes argumentos de línea de comandos:
prompt
: El prompt proporcionado por el usuario para el modelo de IA.--file
: Opcional; Ruta a un archivo de texto que contiene el prompt.--api
: Opcional; Especifica la API a usar (mistral
odeepseek
). El valor predeterminado esdeepseek
.--output
: Opcional; Ruta local para guardar el archivo generado. El valor predeterminado esplot.jpg
.
"""
Script Name: e2b_llm_integration.py
Description:
This script facilitates the generation and execution of Python code using AI models such as Mistral and DeepSeek. It accepts a user-provided prompt, sends it to the specified model (default is DeepSeek), retrieves the generated code, and executes it within a sandboxed environment provided by E2B. The script supports both Mistral and DeepSeek APIs, allowing for flexible API selection, output file path specification, and input prompt sourcing from either direct input or a text file.
Key Features:
- Extracts Python code blocks from the model's response using regex.
- Executes the generated code in a secure, sandboxed environment using E2B.
- Supports command-line arguments for user prompts, API selection, output file paths, and input prompt files.
Usage:
- Default API (DeepSeek):
python e2b_llm_integration.py "<your prompt>"
- Specify API:
python e2b_llm_integration.py "<your prompt>" --api <mistral|deepseek>
- Specify output file path:
python e2b_llm_integration.py "<your prompt>" --output <path/to/output/file>
- Use a prompt from a text file:
python e2b_llm_integration.py --file <path/to/prompt_file.txt>
Dependencies:
- Python 3.6+
- mistralai: Python client for the Mistral API.
- e2b-code-interpreter: Python client for the E2B Sandbox API.
- openai: Python client for the OpenAI API, used for DeepSeek.
Environment Variables:
- MISTRAL_API_KEY: API key for accessing the Mistral API.
- DEEPSEEK_API_KEY: API key for accessing the DeepSeek API.
- E2B_API_KEY: API key for accessing the E2B Sandbox API.
Arguments:
- prompt (str): User prompt for the AI model.
- --file (str): Optional; Path to a text file containing the prompt.
- --api (str): Optional; Specify the API to use ('mistral' or 'deepseek'). Default is 'deepseek'.
- --output (str): Optional; Local path to save the generated file. Default is 'plot.jpg'.
Version: 1.0.0
"""
import os
import sys
import re
import logging
import argparse
from typing import Optional
from mistralai import Mistral
from e2b_code_interpreter import Sandbox
from openai import OpenAI
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
class CodeGenerator:
"""
A class to handle the generation of Python code using specified AI models.
Attributes:
api_option (str): The API to use for code generation ('mistral' or 'deepseek').
prompt (str): The user-provided prompt for code generation.
api_key (str): The API key for accessing the specified API.
"""
def __init__(self, api_option: str, prompt: str):
"""
Initializes the CodeGenerator with the specified API option and prompt.
Args:
api_option (str): The API to use for code generation ('mistral' or 'deepseek').
prompt (str): The user-provided prompt for code generation.
"""
self.api_option = api_option
self.prompt = prompt
self.api_key = os.environ.get("MISTRAL_API_KEY" if api_option == "mistral" else "DEEPSEEK_API_KEY")
if not self.api_key:
print(f"Error: The environment variable {'MISTRAL_API_KEY' if api_option == 'mistral' else 'DEEPSEEK_API_KEY'} is not set.")
sys.exit(1)
def get_client(self):
"""
Returns a client instance for the specified API.
Returns:
An instance of the client for the specified API.
"""
if self.api_option == "mistral":
return Mistral(api_key=self.api_key)
elif self.api_option == "deepseek":
return OpenAI(api_key=self.api_key, base_url="https://api.deepseek.com")
def generate_code(self):
"""
Generates Python code based on the user-provided prompt using the specified API.
Returns:
str: The generated Python code.
"""
client = self.get_client()
system_prompt = (
"""
You are a Python coding assistant that only outputs Python code without any explanations or comments. For all modules or packages you use in the script, do not assume the packages are installed. Include the necessary installation commands before the import statements. This is an example for the module SomeClass:
import subprocess
import sys
try:
from some_module import SomeClass
except ImportError:
subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'some_module'])
from some_module import SomeClass
You will be asked to create a method and call it. The call to the method has to be with if __name__ == "__main__":
Document well the method in the header including:
- Arguments
- Purpose of the method
- Return values
Very important: write the Python code like this:
```python
code
```
"""
)
try:
if self.api_option == "mistral":
response = client.chat.complete(
model="codestral-latest",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": self.prompt}
],
temperature=0.0
)
elif self.api_option == "deepseek":
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": self.prompt}
],
stream=False,
temperature=0.0
)
return response.choices[0].message.content.strip()
except Exception as e:
print(f"Error communicating with {self.api_option.capitalize()} API: {e}")
sys.exit(1)
def extract_code_block(content: str) -> Optional[str]:
"""
Extracts a Python code block from the given text data using regex.
Args:
content (str): The text data containing a Python code block.
Returns:
Optional[str]: The extracted Python code block, or None if not found.
"""
if not content:
logging.warning("Content is empty or None.")
return None
match = re.search(r'\`\`\`python(.*?)\`\`\`', content, re.DOTALL)
if match:
return match.group(1).strip() # Return the Python code without the backticks
logging.warning("No Python code block found in the content.")
return None
def main():
"""
Main function to parse command-line arguments, generate code, and execute it in a sandboxed environment.
"""
# Command-line argument parsing
parser = argparse.ArgumentParser(description="Generate and execute Python code using AI models.")
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument("prompt", type=str, nargs="?", help="Prompt for the AI model.")
group.add_argument("--file", type=str, help="Path to a text file containing the prompt.")
parser.add_argument(
"--api", type=str, choices=["mistral", "deepseek"], default="deepseek",
help="Specify the API to use (default: deepseek)."
)
parser.add_argument(
"--output", type=str, default="plot.jpg",
help="Optional: Local path to save the file (default: plot.jpg)."
)
args = parser.parse_args()
# Check for E2B_API_KEY environment variable
if not os.environ.get("E2B_API_KEY"):
print("Error: The environment variable E2B_API_KEY is not set.")
sys.exit(1)
# Read the prompt from the provided argument or file
if args.file:
try:
with open(args.file, 'r') as file:
prompt = file.read().strip()
except Exception as e:
print(f"Error reading the prompt file: {e}")
sys.exit(1)
else:
prompt = args.prompt
api_option = args.api
local_file_path = args.output
sandbox_filename = os.path.basename(local_file_path) # Extract only the filename for the sandbox
print("Input Prompt:")
print(prompt)
print(f"Using model: {api_option.capitalize()}")
print(f"Local file path: {local_file_path}")
# Generate code
code_generator = CodeGenerator(api_option, prompt)
raw_code = code_generator.generate_code()
code = extract_code_block(raw_code)
if not code:
print("Error: Received empty code from the model.")
sys.exit(1)
print("Generated Code:")
print("----------------")
print("```python")
print(code)
print("```")
print("----------------\n")
# Execute code in E2B Sandbox
try:
with Sandbox() as sandbox:
execution = sandbox.run_code(code)
result = execution.text
logs = execution.logs
try:
# Attempt to download file from the sandbox
content = sandbox.files.read(f"/home/user/{sandbox_filename}", format="bytes")
# Write file to the specified local path
with open(local_file_path, "wb") as file:
file.write(content)
logging.info(f"File successfully downloaded and saved to {local_file_path}")
except Exception as e:
logging.error(f"Failed to download file from sandbox: {e}")
except Exception as e:
logging.error(f"Error executing code in Sandbox: {e}")
sys.exit(1)
logging.info("Execution Output:")
logging.info("Stdout Logs:")
for log in logs.stdout:
logging.info(log)
logging.info("Stderr Logs:")
for log in logs.stderr:
logging.info(log)
logging.info("Execution Result:")
logging.info(result)
if __name__ == "__main__":
main()
Consideraciones clave para el diseño de prompts en la generación de código
Un aspecto crítico del prompt utilizado para la generación de código es la instrucción explícita al modelo de IA: "Eres un asistente de codificación en Python que solo genera código Python sin explicaciones ni comentarios." Esto asegura que la salida generada sea código limpio y ejecutable sin texto adicional. Además, el prompt incluye la instrucción: "Para todos los módulos o paquetes que uses en el script, no asumas que los paquetes están instalados. Incluye los comandos de instalación necesarios antes de las declaraciones de importación." Esto asegura que el código generado sea autónomo y pueda ejecutarse en entornos donde las dependencias no estén preinstaladas.
Ejemplos de flujos de trabajo
A continuación, se presentan cuatro ejemplos que demuestran cómo usar la integración de E2B y DeepSeek AI para tareas de procesamiento y visualización de datos. Cada caso destaca un caso de uso diferente, desde el análisis de tendencias de temperatura hasta la visualización del crecimiento del PIB.
Nota: Estos ejemplos se ejecutaron utilizando la API de DeepSeek, y los resultados para la API de Mistral no han sido probados ni verificados.
Caso 1: Análisis de tendencias de temperatura mínima
Prompt: "Descarga el archivo CSV desde la URL proporcionada, genera un gráfico de series de tiempo de la temperatura mínima en cada año, convertida a Celsius, y guárdalo como un archivo JPEG llamado 'graph_001.jpg'. Imprime el tamaño del archivo generado. Este es el formato del archivo CSV: ..."
Ejecución: El script descargó y procesó los datos CSV, calculando las temperaturas mínimas anuales. Se generó un gráfico de series de tiempo para visualizar las tendencias de temperatura a lo largo del tiempo, convertidas a Celsius, y se guardó como graph_001.jpg
.

Figura 1: Gráfico de series de tiempo que muestra las tendencias de temperatura mínima a lo largo del tiempo.
Caso 2: Visualización de la distribución del PIB
Prompt: "Descarga el archivo CSV desde la URL proporcionada, lee y procesa los datos, y genera un gráfico de pastel en formato JPG que muestre la distribución del PIB de las 10 economías más grandes para el año 2022. Incluye los nombres de los países como etiquetas en el gráfico de pastel y guárdalo como graph_002.jpg. Imprime el tamaño del archivo guardado en bytes. Este es el formato del archivo CSV: ..."
Ejecución: Utilizando DeepSeek AI, el script descargó y procesó los datos CSV, identificando las 10 economías más grandes por PIB en 2022. Se generó un gráfico de pastel con segmentos etiquetados que representan las contribuciones al PIB y se guardó como graph_002.jpg
.

Figura 2: Gráfico de pastel que muestra la distribución del PIB de las 10 economías más grandes en 2022.
Caso 3: Análisis de anomalías de temperatura global
Prompt: "Descarga el archivo CSV desde la URL proporcionada, genera un gráfico de series de tiempo de las anomalías anuales de temperatura global en formato JPG y guárdalo en un archivo local llamado 'graph_003.jpg'. Imprime el tamaño del archivo generado. Este es el formato del archivo CSV: ..."
Ejecución: El script descargó y procesó los datos CSV, visualizando las anomalías anuales de temperatura global a lo largo del tiempo. Se generó un gráfico de series de tiempo y se guardó como graph_003.jpg
.

Figura 3: Gráfico de series de tiempo que muestra las anomalías anuales de temperatura global.
Caso 4: Análisis de tendencias de crecimiento del PIB de EE. UU.
Prompt: "Descarga el archivo desde la URL proporcionada. Descomprímelo y procesa el archivo CSV relevante, excluyendo aquellos que comienzan con 'Metadata'. Genera un gráfico con el crecimiento porcentual interanual del PIB en los Estados Unidos desde 2008 hasta 2021, agregando los nombres de los países como etiquetas. Guarda el gráfico como 'graph_004.jpg' y verifica su existencia, imprimiendo el tamaño del archivo en bytes. Incluye registros de seguimiento para la solución de problemas en el manejo de archivos y los pasos de procesamiento de datos. Este es el formato del archivo CSV: ..."
Ejecución: El script manejó la descarga, descompresión y procesamiento de los datos, incluyendo el manejo adecuado de errores y el registro de seguimiento. Se calculó el crecimiento interanual del PIB para los Estados Unidos y se visualizó en un gráfico etiquetado, que se guardó como graph_004.jpg
después de verificar su existencia y tamaño.

Figura 4: Gráfico de líneas que muestra el crecimiento interanual del PIB en los Estados Unidos desde 2008 hasta 2021.
Conclusiones
La integración de sandboxes de E2B con DeepSeek AI ofrece una solución robusta para ejecutar flujos de trabajo de Python impulsados por IA, como lo demuestran los cuatro casos anteriores. Cada ejemplo generó visualizaciones precisas, destacando la efectividad de este enfoque para tareas de procesamiento y visualización de datos. Sin embargo, al elegir entre sandboxes en la nube y locales, considera lo siguiente:
- Costo: Los sandboxes en la nube como E2B son escalables pero pueden incurrir en costos más altos, mientras que los sandboxes locales son más económicos pero menos escalables.
- Seguridad: Los sandboxes locales mantienen los datos en entornos controlados, mientras que los sandboxes en la nube requieren un cifrado robusto y gestión de acceso.
- Escalabilidad: Los sandboxes en la nube sobresalen en escalabilidad y colaboración, mientras que los sandboxes locales son más adecuados para proyectos más pequeños y seguros.
Elige según las necesidades de tu proyecto: nube para escalabilidad y colaboración, o local para seguridad y eficiencia de costos. Equilibrar estos factores asegura una productividad y seguridad óptimas en tus flujos de trabajo.
¿Disfrutaste esta publicación? ¿Te resultó útil? No dudes en dejar un comentario a continuación para compartir tus pensamientos o hacer preguntas. Se requiere una cuenta de GitHub para unirse a la discusión.