Ir al contenido

smolagents - Agentes de IA Orientados a Código

smolagents - Agentes de IA Orientados a Código

smolagents es una librería minimalista orientada a código de Hugging Face. Su idea central: en lugar de hacer que el modelo emita llamadas a herramientas como blobs JSON, un CodeAgent escribe y ejecuta código Python directamente. Expresar acciones como código permite que un paso único llame a múltiples herramientas, use bucles y variables, y encadene lógica — lo cual reduce el número de viajes de ida y vuelta a LLM (aproximadamente ~30% menos) y mejora el rendimiento en tareas complejas. Es agnóstico de modelo, soporta ejecución en sandbox, y deliberadamente se mantiene pequeño y modificable.

Installation

MétodoComando
pippip install smolagents
Con extras de herramientaspip install "smolagents[toolkit]"
Extras de sandboxpip install "smolagents[e2b]" (o [docker])
Establece una clave de modeloexport HF_TOKEN=... o claves de proveedor
Verificarpython -c "import smolagents; print('ok')"

Core Concepts

TérminoSignificado
CodeAgentAgente que escribe acciones Python (el predeterminado)
ToolCallingAgentAgente que emite llamadas a herramientas JSON clásicas
HerramientaUna herramienta llamable que el agente puede usar (con un esquema)
ModeloEl backend de LLM (HF, OpenAI, LiteLLM, local)
SandboxDónde se ejecuta código generado (local, E2B, Docker, Modal)

A Minimal CodeAgent

from smolagents import CodeAgent, WebSearchTool, InferenceClientModel

agent = CodeAgent(
    tools=[WebSearchTool()],
    model=InferenceClientModel(),   # HF Inference API
)

agent.run("How many seconds would it take a cheetah to cross the Golden Gate Bridge?")
ObjetoRol
CodeAgent(tools=[...], model=...)El agente
agent.run("task")Ejecuta una tarea de extremo a extremo
WebSearchTool()Una herramienta integrada
InferenceClientModel()Backend de modelo hospedado en HF

Models

BackendClase
HF Inference APIInferenceClientModel
Transformadores localesTransformersModel
Cualquier proveedor vía LiteLLMLiteLLMModel(model_id="openai/gpt-4o")
Servidor compatible con OpenAIOpenAIServerModel(...)
vLLM / puntos finales localesvía LiteLLM / compatible con OpenAI

Defining Tools

from smolagents import tool

@tool
def get_weather(city: str) -> str:
    """Return the weather for a city.

    Args:
        city: The city to look up.
    """
    return f"Sunny in {city}"

agent = CodeAgent(tools=[get_weather], model=InferenceClientModel())
MecanismoUso
Decorador @toolConvierte una función tipada en una herramienta
Subclase ToolMás control sobre esquema/comportamiento
Colecciones de herramientasImporta conjuntos de herramientas (p. ej. desde el Hub)
Herramientas MCPConecta servidores Model Context Protocol

Sandboxed Execution (Important)

Porque CodeAgents ejecutan Python generado, aísla en producción.

SandboxCómo
Local (predeterminado)Ejecuta en proceso — bien solo para desarrollo confiable
E2Bexecutor_type="e2b" (sandbox remoto)
Dockerexecutor_type="docker"
ModalEjecución sandboxeada remota
Importaciones permitidasRestringe qué módulos puede importar código generado
agent = CodeAgent(tools=[...], model=..., executor_type="e2b")

Multi-Agent & Retrieval

PatrónCómo
Agentes gestionadosDale a un agente otros agentes como herramientas
Recuperación/RAGAñade una herramienta retriever para respuestas fundamentadas
PlanificaciónHabilita pasos de planificación periódica para tareas difíciles
HandoffsCompone especialistas bajo un agente gestor

Common Workflows

# Un agente de investigación que navega y computa en código
from smolagents import CodeAgent, WebSearchTool, InferenceClientModel
agent = CodeAgent(tools=[WebSearchTool()], model=InferenceClientModel(),
                  executor_type="docker")
agent.run("Compare the population growth of Tokyo and Delhi since 2000.")

smolagents vs Other Agent Frameworks

AspectosmolagentsLangGraphPydantic AI
Formato de acciónCódigo PythonGráfico/máquina de estadosLlamadas a herramientas tipadas
Tamaño/filosofíaMinimalista, modificableOrquestación de estado completoType-safe, estilo FastAPI
Eficiencia de LLMMenos llamadas (código)DependeEstándar
Mejor paraBucles de código de agente únicoAgentes duraderos con estadoAgentes de producción type-safe

Resources