Salta ai contenuti

smolagents - Cheatsheet Code-First AI Agents

smolagents - Cheatsheet Code-First AI Agents

smolagents è una libreria agent minimalista e code-first da Hugging Face. L”idea centrale: invece di far emettere al modello tool call come blob JSON, un CodeAgent scrive ed esegue codice Python direttamente. Esprimere le azioni come codice permette a un singolo step di chiamare molteplici tool, usare loop e variabili, e concatenare logica — il che riduce il numero di round-trip LLM (circa ~30% in meno) e migliora la performance su task complessi. È model-agnostic, supporta esecuzione sandboxata, e rimane deliberatamente piccolo e hackable.

Installazione

MetodoComando
pippip install smolagents
Con tools extraspip install "smolagents[toolkit]"
Sandbox extraspip install "smolagents[e2b]" (o [docker])
Imposta una model keyexport HF_TOKEN=... o provider keys
Verificapython -c "import smolagents; print(''ok'')"

Concetti Principali

TermineSignificato
CodeAgentAgent che scrive azioni Python (il default)
ToolCallingAgentAgent che emette classiche JSON tool call
ToolUn callable che l”agent può usare (con uno schema)
ModelIl backend LLM (HF, OpenAI, LiteLLM, local)
SandboxDove il codice generato esegue (local, E2B, Docker, Modal)

Un CodeAgent Minimalista

from smolagents import CodeAgent, WebSearchTool, InferenceClientModel

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

agent.run("Quanti secondi occorrerebbero a un ghepardo per attraversare il Golden Gate Bridge?")
OggettoRuolo
CodeAgent(tools=[...], model=...)L”agent
agent.run("task")Esegui un task end to end
WebSearchTool()Un tool built-in
InferenceClientModel()Backend modello HF-hosted

Modelli

BackendClasse
HF Inference APIInferenceClientModel
Local transformersTransformersModel
Qualsiasi provider via LiteLLMLiteLLMModel(model_id="openai/gpt-4o")
OpenAI-compatible serverOpenAIServerModel(...)
vLLM / local endpointsvia LiteLLM / OpenAI-compatible

Definire Tool

from smolagents import tool

@tool
def get_weather(city: str) -> str:
    """Ritorna il weather per una città.

    Args:
        city: La città da cercare.
    """
    return f"Sunny in {city}"

agent = CodeAgent(tools=[get_weather], model=InferenceClientModel())
MeccanismoUsa
@tool decoratorTrasforma una funzione tipizzata in un tool
Tool subclassPiù controllo su schema/behavior
Tool CollectionsImporta set di tool (e.g. dal Hub)
MCP toolsConnetti server Model Context Protocol

Esecuzione Sandboxata (Importante)

Poiché CodeAgents eseguono Python generato, isolalo in produzione.

SandboxCome
Local (default)Esegue in-process — ok solo per dev trusted
E2Bexecutor_type="e2b" (remote sandbox)
Dockerexecutor_type="docker"
ModalRemote sandboxed execution
Allowed importsLimita quali moduli il codice generato può importare
agent = CodeAgent(tools=[...], model=..., executor_type="e2b")

Multi-Agent & Retrieval

PatternCome
Managed agentsDai a un agent altri agent come tool
Retrieval/RAGAggiungi un retriever tool per risposte grounded
PlanningAbilita periodic planning steps per task hard
HandoffsComponi specialisti sotto un manager agent

Workflow Comuni

# Un research agent che naviga e computa in codice
from smolagents import CodeAgent, WebSearchTool, InferenceClientModel
agent = CodeAgent(tools=[WebSearchTool()], model=InferenceClientModel(),
                  executor_type="docker")
agent.run("Compara la crescita della popolazione di Tokyo e Delhi dal 2000.")

smolagents vs Altri Framework di Agent

AspettosmolagentsLangGraphPydantic AI
Action formatPython codeGraph/state machineTyped tool calls
Size/philosophyMinimal, hackableFull state orchestrationType-safe, FastAPI-style
LLM efficiencyFewer calls (code)DependsStandard
Best forSingle-agent code loopsDurable stateful agentsType-safe production agents

Risorse