Zum Inhalt springen

smolagents - Code-First-KI-Agenten-Spickzettel

smolagents - Code-First-KI-Agenten-Spickzettel

smolagents ist eine minimale, Code-First-Agenten-Bibliothek von Hugging Face. Die zentrale Idee: Statt dass das Modell Tool-Aufrufe als JSON-Blobs emittiert, schreibt ein CodeAgent und führt Python-Code direkt aus. Das Ausdrücken von Aktionen als Code ermöglicht einen einzelnen Schritt, um mehrere Tools aufzurufen, Schleifen und Variablen zu verwenden und Logik zu ketten — was die Anzahl der LLM-Round-Trips reduziert (etwa ~30% weniger) und die Leistung bei komplexen Aufgaben verbessert. Es ist modell-agnostisch, unterstützt Sandbox-Ausführung und bleibt bewusst klein und hackbar.

Installation

MethodeBefehl
pippip install smolagents
Mit Tools-Extraspip install "smolagents[toolkit]"
Sandbox-Extraspip install "smolagents[e2b]" (oder [docker])
Modell-Schlüssel setzenexport HF_TOKEN=... oder Provider-Schlüssel
Verifizierenpython -c "import smolagents; print('ok')"

Kernkonzepte

BegriffBedeutung
CodeAgentAgent, der Python-Aktionen schreibt (Standard)
ToolCallingAgentAgent, der klassische JSON-Tool-Aufrufe emittiert
ToolEin aufrufbares, das der Agent verwenden kann (mit Schema)
ModellDas LLM-Backend (HF, OpenAI, LiteLLM, lokal)
SandboxWo generierter Code ausgeführt wird (lokal, E2B, Docker, Modal)

Ein minimaler 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?")
ObjektRolle
CodeAgent(tools=[...], model=...)Der Agent
agent.run("task")Führe eine Aufgabe von Anfang bis Ende aus
WebSearchTool()Ein eingebautes Tool
InferenceClientModel()HF-gehostetes Modell-Backend

Modelle

BackendKlasse
HF Inference APIInferenceClientModel
Lokale TransformersTransformersModel
Jeder Provider via LiteLLMLiteLLMModel(model_id="openai/gpt-4o")
OpenAI-kompatibler ServerOpenAIServerModel(...)
vLLM / lokale Endpointsvia LiteLLM / OpenAI-compatible

Tools definieren

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())
MechanismusVerwendung
@tool-DekoratorWandle eine typierte Funktion in ein Tool um
Tool-SubklasseMehr Kontrolle über Schema/Verhalten
Tool-SammlungenSätze von Tools importieren (z.B. vom Hub)
MCP-ToolsModel Context Protocol-Server verbinden

Sandboxed Execution (Wichtig)

Da CodeAgents generierten Python ausführen, isolieren Sie ihn in der Produktion.

SandboxWie
Lokal (Standard)Läuft im Prozess — in Ordnung nur für vertrauten Dev
E2Bexecutor_type="e2b" (Remote-Sandbox)
Dockerexecutor_type="docker"
ModalRemote-Sandbox-Ausführung
Erlaubte ImportsEinschränken, welche Module generierter Code importieren darf
agent = CodeAgent(tools=[...], model=..., executor_type="e2b")

Multi-Agent & Retrieval

MusterWie
Verwaltete AgentenGib einem Agent andere Agenten als Tools
Retrieval/RAGEin Retriever-Tool für begründete Antworten hinzufügen
PlanungPeriodische Planungsschritte für schwierige Aufgaben aktivieren
HandoffsSpezialist unter einem Manager-Agent komposieren

Häufige Workflows

# Ein Recherche-Agent, der in Code durchsucht und berechnet
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 im Vergleich zu anderen Agent-Frameworks

AspektsmolagentsLangGraphPydantic AI
AktionsformatPython-CodeGraph/State-MachineTypisierte Tool-Aufrufe
Größe/PhilosophieMinimal, hackbarVollständige State-OrchestrierungType-Safe, FastAPI-Style
LLM-EffizienzWeniger Anrufe (Code)Hängt abStandard
Best fürSingle-Agent-Code-SchleifenLanglebige State-AgentenType-Safe-Produktions-Agenten

Ressourcen