{"id":587,"date":"2025-01-11T15:16:14","date_gmt":"2025-01-11T15:16:14","guid":{"rendered":"https:\/\/smolagents.org\/?post_type=docs&#038;p=587"},"modified":"2025-01-11T15:16:16","modified_gmt":"2025-01-11T15:16:16","password":"","slug":"agents-guided-tour","status":"publish","type":"docs","link":"https:\/\/smolagents.org\/it\/docs\/agents-guided-tour\/","title":{"rendered":"Agenti - Visita guidata"},"content":{"rendered":"<p>In questa visita guidata imparerete come costruire un agente, come eseguirlo e come personalizzarlo per farlo funzionare meglio per il vostro caso d'uso.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/huggingface.co\/docs\/smolagents\/guided_tour#building-your-agent\" target=\"_blank\" rel=\"noopener\"><\/a>Costruire il vostro agente<\/h3>\n\n\n\n<p>Per inizializzare un agente minimo, sono necessari almeno questi due argomenti:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>modello<\/code>un modello di generazione del testo per alimentare il vostro agente - perch\u00e9 l'agente \u00e8 diverso da un semplice LLM, \u00e8 un sistema che usa un LLM come motore. \u00c8 possibile utilizzare una qualsiasi di queste opzioni:\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/huggingface.co\/docs\/smolagents\/v1.2.2\/en\/reference\/agents#smolagents.TransformersModel\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">TrasformatoriModello<\/a>\u00a0prende un oggetto preinizializzato\u00a0<code>trasformatori<\/code>\u00a0per eseguire l'inferenza sulla propria macchina locale usando\u00a0<code>trasformatori<\/code>.<\/li>\n\n\n\n<li><a href=\"https:\/\/huggingface.co\/docs\/smolagents\/v1.2.2\/en\/reference\/agents#smolagents.HfApiModel\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">HfApiModel<\/a>\u00a0fa leva su un\u00a0<code>huggingface_hub.InferenceClient<\/code>\u00a0sotto il cofano.<\/li>\n\n\n\n<li><a href=\"https:\/\/huggingface.co\/docs\/smolagents\/v1.2.2\/en\/reference\/agents#smolagents.LiteLLMModel\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Modello LiteLLMM<\/a>\u00a0consente di chiamare oltre 100 modelli diversi attraverso\u00a0<a href=\"https:\/\/docs.litellm.ai\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">LiteLLM<\/a>!<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><code>strumenti<\/code>, Un elenco di\u00a0<code>Strumenti<\/code>\u00a0che l'agente pu\u00f2 utilizzare per risolvere il compito. Pu\u00f2 essere un elenco vuoto. \u00c8 anche possibile aggiungere la casella degli strumenti predefinita in cima al proprio elenco di strumenti\u00a0<code>strumenti<\/code>\u00a0definendo l'argomento opzionale\u00a0<code>add_base_tools=True<\/code>.<\/li>\n<\/ul>\n\n\n\n<p>Una volta che si dispone di questi due argomenti,\u00a0<code>strumenti<\/code>\u00a0e\u00a0<code>modello<\/code>\u00e8 possibile creare un agente ed eseguirlo. \u00c8 possibile utilizzare qualsiasi LLM, sia tramite\u00a0<a href=\"https:\/\/huggingface.co\/docs\/api-inference\/en\/index\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Viso abbracciato API<\/a>,\u00a0<a href=\"https:\/\/github.com\/huggingface\/transformers\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">trasformatori<\/a>,\u00a0<a href=\"https:\/\/ollama.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">ollama<\/a>, o\u00a0<a href=\"https:\/\/www.litellm.ai\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">LiteLLM<\/a>.<\/p>\n\n\n\n<p>Viso abbracciato API<\/p>\n\n\n\n<p>Modello di trasformatori locali<\/p>\n\n\n\n<p>OpenAI o API antropica<\/p>\n\n\n\n<p>Ollama<\/p>\n\n\n\n<p>L'API di Hugging Face pu\u00f2 essere utilizzata gratuitamente senza un token, ma avr\u00e0 una limitazione di velocit\u00e0.<\/p>\n\n\n\n<p>Per accedere ai modelli con accesso limitato o per aumentare i limiti tariffari con un account PRO, \u00e8 necessario impostare la variabile d'ambiente&nbsp;<code>HF_TOKEN<\/code>&nbsp;o passare&nbsp;<code>gettone<\/code>&nbsp;all'inizializzazione di&nbsp;<code>HfApiModel<\/code>.<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">da smolagents import CodeAgent, HfApiModel\n\nmodel_id = \"meta-llama\/Llama-3.3-70B-Instruct\"\n\nmodel = HfApiModel(model_id=model_id, token=\"\")\nagent = CodeAgent(tools=[], model=model, add_base_tools=True)\n\nagent.run(\n    \"Potresti darmi il 118\u00b0 numero della sequenza di Fibonacci?\",\n)<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><a href=\"https:\/\/huggingface.co\/docs\/smolagents\/guided_tour#codeagent-and-toolcallingagent\" target=\"_blank\" rel=\"noopener\"><\/a>CodeAgent e ToolCallingAgent<\/h4>\n\n\n\n<p>Il\u00a0<a href=\"https:\/\/huggingface.co\/docs\/smolagents\/v1.2.2\/en\/reference\/agents#smolagents.CodeAgent\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">CodiceAgente<\/a>\u00a0\u00e8 il nostro agente predefinito. Scriver\u00e0 ed eseguir\u00e0 frammenti di codice python a ogni passo.<\/p>\n\n\n\n<p>Per impostazione predefinita, l'esecuzione avviene nell'ambiente locale. Questo dovrebbe essere sicuro, perch\u00e9 le uniche funzioni che possono essere chiamate sono gli strumenti forniti dall'utente (specialmente se si tratta solo di strumenti di Hugging Face) e un insieme di funzioni sicure predefinite come&nbsp;<code>stampa<\/code>&nbsp;o le funzioni del programma&nbsp;<code>matematica<\/code>&nbsp;per cui si \u00e8 gi\u00e0 limitati in ci\u00f2 che si pu\u00f2 eseguire.<\/p>\n\n\n\n<p>Inoltre, l'interprete Python non consente importazioni predefinite al di fuori di un elenco sicuro, quindi tutti gli attacchi pi\u00f9 ovvi non dovrebbero essere un problema. \u00c8 possibile autorizzare importazioni aggiuntive passando i moduli autorizzati come elenco di stringhe nell'argomento\u00a0<code>importazioni_autorizzate_aggiuntive<\/code>\u00a0all'inizializzazione dell'applicazione\u00a0<a href=\"https:\/\/huggingface.co\/docs\/smolagents\/v1.2.2\/en\/reference\/agents#smolagents.CodeAgent\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">CodiceAgente<\/a>:<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">model = HfApiModel()\nagent = CodeAgent(tools=[], model=model, additional_authorized_imports=['requests', 'bs4'])\nagent.run(\"Potresti farmi avere il titolo della pagina all'url 'https:\/\/huggingface.co\/blog'?\")<\/pre>\n\n\n\n<p>L'LLM pu\u00f2 generare codice arbitrario che verr\u00e0 poi eseguito: non aggiungere importazioni non sicure!<\/p>\n\n\n\n<p>L'esecuzione si interrompe in caso di codice che tenta di eseguire un'operazione illegale o se si verifica un errore regolare di Python con il codice generato dall'agente.<\/p>\n\n\n\n<p>Si pu\u00f2 anche utilizzare\u00a0<a href=\"https:\/\/e2b.dev\/docs#what-is-e2-b\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Esecutore di codice E2B<\/a>\u00a0al posto dell'interprete locale di Python, prima di tutto\u00a0<a href=\"https:\/\/e2b.dev\/dashboard?tab=keys\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">impostazione del\u00a0<code>E2B_API_KEY<\/code>\u00a0variabile d'ambiente<\/a>\u00a0e poi passare\u00a0<code>use_e2b_executor=True<\/code>\u00a0all'inizializzazione dell'agente.<\/p>\n\n\n\n<p>Per saperne di pi\u00f9 sull'esecuzione del codice\u00a0<a href=\"https:\/\/huggingface.co\/docs\/smolagents\/tutorials\/secure_code_execution\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">in questa esercitazione<\/a>.<\/p>\n\n\n\n<p>Supportiamo anche il modo ampiamente diffuso di scrivere le azioni come blob di tipo JSON: si tratta di\u00a0<a href=\"https:\/\/huggingface.co\/docs\/smolagents\/v1.2.2\/en\/reference\/agents#smolagents.ToolCallingAgent\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Agente di chiamata dello strumento<\/a>funziona pi\u00f9 o meno come\u00a0<a href=\"https:\/\/huggingface.co\/docs\/smolagents\/v1.2.2\/en\/reference\/agents#smolagents.CodeAgent\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">CodiceAgente<\/a>, naturalmente senza\u00a0<code>importazioni_autorizzate_aggiuntive<\/code>\u00a0poich\u00e9 non esegue codice:<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">da smolagents import ToolCallingAgent\n\nagent = ToolCallingAgent(tools=[], model=model)\nagent.run(\"Potresti trovarmi il titolo della pagina all'URL 'https:\/\/huggingface.co\/blog'?\")<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/huggingface.co\/docs\/smolagents\/guided_tour#inspecting-an-agent-run\" target=\"_blank\" rel=\"noopener\"><\/a>Ispezione di un'esecuzione dell'agente<\/h3>\n\n\n\n<p>Ecco alcuni attributi utili per verificare cosa \u00e8 successo dopo una corsa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>agent.logs<\/code>\u00a0memorizza i log a grana fine dell'agente. A ogni passo dell'esecuzione dell'agente, tutto viene memorizzato in un dizionario che poi viene aggiunto a\u00a0<code>agent.logs<\/code>.<\/li>\n\n\n\n<li>In corsa\u00a0<code>agent.write_inner_memory_from_logs()<\/code>\u00a0crea una memoria interna dei registri dell'agente per la visualizzazione da parte di LLM, come un elenco di messaggi di chat. Questo metodo analizza ogni fase del registro e memorizza in un messaggio solo ci\u00f2 che gli interessa: ad esempio, salver\u00e0 il prompt di sistema e l'attivit\u00e0 in messaggi separati, poi per ogni fase memorizzer\u00e0 l'output di LLM in un messaggio e l'output della chiamata allo strumento in un altro messaggio. Si pu\u00f2 usare questo metodo se si desidera una visione di livello superiore di ci\u00f2 che \u00e8 accaduto, ma non tutti i registri saranno trascritti con questo metodo.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/huggingface.co\/docs\/smolagents\/guided_tour#tools\" target=\"_blank\" rel=\"noopener\"><\/a>Strumenti<\/h2>\n\n\n\n<p>Uno strumento \u00e8 una funzione atomica che deve essere utilizzata da un agente. Per essere utilizzato da un LLM, ha bisogno anche di alcuni attributi che costituiscono la sua API e che saranno utilizzati per descrivere al LLM come chiamare questo strumento:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un nome<\/li>\n\n\n\n<li>Una descrizione<\/li>\n\n\n\n<li>Tipi di ingresso e descrizioni<\/li>\n\n\n\n<li>Un tipo di uscita<\/li>\n<\/ul>\n\n\n\n<p>\u00c8 possibile, ad esempio, controllare il valore\u00a0<a href=\"https:\/\/huggingface.co\/docs\/smolagents\/v1.2.2\/en\/reference\/tools#smolagents.PythonInterpreterTool\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">StrumentoInterpretePython<\/a>: ha un nome, una descrizione, descrizioni di input, un tipo di output e un\u00a0<code>in avanti<\/code>\u00a0per eseguire l'azione.<\/p>\n\n\n\n<p>Quando l'agente viene inizializzato, gli attributi dello strumento vengono utilizzati per generare una descrizione dello strumento che viene inserita nel prompt di sistema dell'agente. In questo modo l'agente sa quali strumenti pu\u00f2 usare e perch\u00e9.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/huggingface.co\/docs\/smolagents\/guided_tour#default-toolbox\" target=\"_blank\" rel=\"noopener\"><\/a>Casella degli strumenti predefinita<\/h3>\n\n\n\n<p>Transformers viene fornito con un set di strumenti predefinito per il potenziamento degli agenti, che si pu\u00f2 aggiungere al proprio agente al momento dell'inizializzazione con l'argomento&nbsp;<code>add_base_tools = Vero<\/code>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ricerca web DuckDuckGo*<\/strong>: esegue una ricerca sul Web utilizzando il browser DuckDuckGo.<\/li>\n\n\n\n<li><strong>Interprete di codice Python<\/strong>: esegue il codice Python generato da LLM in un ambiente sicuro. Questo strumento sar\u00e0 aggiunto solo a\u00a0<a href=\"https:\/\/huggingface.co\/docs\/smolagents\/v1.2.2\/en\/reference\/agents#smolagents.ToolCallingAgent\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Agente di chiamata dello strumento<\/a>\u00a0se lo si inizializza con\u00a0<code>add_base_tools=True<\/code>poich\u00e9 l'agente basato sul codice pu\u00f2 gi\u00e0 eseguire nativamente il codice Python<\/li>\n\n\n\n<li><strong>Trascrittore<\/strong>: una pipeline speech-to-text costruita su Whisper-Turbo che trascrive un audio in testo.<\/li>\n<\/ul>\n\n\n\n<p>\u00c8 possibile utilizzare manualmente uno strumento chiamandolo con i suoi argomenti.<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">da smolagents importiamo DuckDuckGoSearchTool\n\nsearch_tool = DuckDuckGoSearchTool()\nprint(search_tool(\"Chi \u00e8 l'attuale presidente della Russia?\"))<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/huggingface.co\/docs\/smolagents\/guided_tour#create-a-new-tool\" target=\"_blank\" rel=\"noopener\"><\/a>Creare un nuovo strumento<\/h3>\n\n\n\n<p>\u00c8 possibile creare strumenti personalizzati per casi d'uso non coperti dagli strumenti predefiniti di Hugging Face. Ad esempio, creiamo uno strumento che restituisca il modello pi\u00f9 scaricato per una determinata attivit\u00e0 dall'Hub.<\/p>\n\n\n\n<p>Iniziate con il codice qui sotto.<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">da huggingface_hub importa elenco_modelli\n\ncompito = \"classificazione del testo\"\n\nmost_downloaded_model = next(iter(list_models(filter=task, sort=\"downloads\", direction=-1))\nprint(most_downloaded_model.id)<\/pre>\n\n\n\n<p>Questo codice pu\u00f2 essere rapidamente convertito in uno strumento, semplicemente avvolgendolo in una funzione e aggiungendo l'opzione\u00a0<code>strumento<\/code>\u00a0decoratore: Questo non \u00e8 l'unico modo per costruire lo strumento: \u00e8 possibile definirlo direttamente come una sottoclasse di\u00a0<a href=\"https:\/\/huggingface.co\/docs\/smolagents\/v1.2.2\/en\/reference\/tools#smolagents.Tool\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Strumento<\/a>che offre una maggiore flessibilit\u00e0, ad esempio la possibilit\u00e0 di inizializzare attributi di classe pesanti.<\/p>\n\n\n\n<p>Vediamo come funziona per entrambe le opzioni:<\/p>\n\n\n\n<p>Decorare una funzione con @tool<\/p>\n\n\n\n<p>Strumento di sottoclasse<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">da smolagents importiamo lo strumento\n\n@strumento\ndef model_download_tool(task: str) -&gt; str:\n    \"\"\"\n    \u00c8 uno strumento che restituisce il modello pi\u00f9 scaricato di una determinata attivit\u00e0 sull'hub Hugging Face.\n    Restituisce il nome del punto di controllo.\n\n    Args:\n        attivit\u00e0: L'attivit\u00e0 per cui ottenere il conteggio dei download.\n    \"\"\"\n    most_downloaded_model = next(iter(list_models(filter=task, sort=\"downloads\", direction=-1))\n    restituire most_downloaded_model.id<\/pre>\n\n\n\n<p>La funzione necessita di:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un nome chiaro. Il nome deve essere sufficientemente descrittivo di ci\u00f2 che fa questo strumento per aiutare il cervello LLM che alimenta l'agente. Dal momento che questo strumento restituisce il modello con il maggior numero di download per un compito, chiamiamolo\u00a0<code>strumento_di_download_del_modello<\/code>.<\/li>\n\n\n\n<li>Suggerimenti di tipo su ingressi e uscite<\/li>\n\n\n\n<li>Una descrizione, che include una parte \"Args:\" in cui viene descritto ogni argomento (senza indicazione del tipo, questa volta, che sar\u00e0 ricavato dal suggerimento del tipo). Come per il nome dello strumento, questa descrizione \u00e8 un manuale di istruzioni per l'LLM che alimenta l'agente, quindi non trascuratela. Tutti questi elementi saranno automaticamente inseriti nel prompt di sistema dell'agente al momento dell'inizializzazione: sforzatevi quindi di renderli il pi\u00f9 chiari possibile!<\/li>\n<\/ul>\n\n\n\n<p>Questo formato di definizione \u00e8 lo stesso degli schemi degli strumenti utilizzati in\u00a0<code>applica_template_chat<\/code>l'unica differenza \u00e8 l'aggiunta di\u00a0<code>strumento<\/code>\u00a0decoratore: per saperne di pi\u00f9 sull'uso dello strumento API\u00a0<a href=\"https:\/\/huggingface.co\/blog\/unified-tool-use#passing-tools-to-a-chat-template\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">qui<\/a>.<\/p>\n\n\n\n<p>Quindi \u00e8 possibile inizializzare direttamente l'agente:<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">da smolagents import CodeAgent, HfApiModel\nagent = CodeAgent(tools=[model_download_tool], model=HfApiModel())\nagent.run(\n    \"Puoi darmi il nome del modello che ha il maggior numero di download nell'attivit\u00e0 'text-to-video' sull'Hub Hugging Face?\".\n)<\/pre>\n\n\n\n<p>Si ottengono i seguenti log:<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 nuova corsa \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 \u2502\n\u2502 Potete darmi il nome del modello che ha il maggior numero di download nel task 'text-to-video' \u2502\n\u2502 nell'attivit\u00e0 \"Hugging Face Hub\"?                                                            \u2502\n\u2502 \u2502\n\u2570\u2500 HfApiModel - Qwen\/Qwen2.5-Coder-32B-Instruct \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 Passo 0 \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u256d\u2500 Esecuzione di questo codice: \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 1 model_name = model_download_tool(task=\"text-to-video\") \u2502\n\u2502 2 print(nome_modello) \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\nRegistri di esecuzione:\nByteDance\/AnimateDiff-Lightning\n\nUscita: Nessuno\n[Passo 0: Durata 0,27 secondi| Gettoni di input: 2.069 | Gettoni di output: 60]\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 Passo 1 \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nEsecuzione del codice: \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 1 final_answer(\"ByteDance\/AnimateDiff-Lightning\") \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\nUscita - Risposta finale: ByteDance\/AnimateDiff-Lightning\n[Passo 1: Durata 0,10 secondi| Gettoni di input: 4.288 | Gettoni di output: 148]\nUscita[20]: 'ByteDance\/AnimateDiff-Lightning'<\/pre>\n\n\n\n<p>Per saperne di pi\u00f9 sugli strumenti, consultare la sezione\u00a0<a href=\"https:\/\/huggingface.co\/docs\/smolagents\/tutorials\/tools#what-is-a-tool-and-how-to-build-one\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Tutorial dedicato<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/huggingface.co\/docs\/smolagents\/guided_tour#multi-agents\" target=\"_blank\" rel=\"noopener\"><\/a>Agenti multipli<\/h2>\n\n\n\n<p>I sistemi multi-agente sono stati introdotti con il framework Microsoft\u00a0<a href=\"https:\/\/huggingface.co\/papers\/2308.08155\" target=\"_blank\" rel=\"noopener\">Aut<\/a><a href=\"https:\/\/huggingface.co\/papers\/2308.08155\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">o<\/a><a href=\"https:\/\/huggingface.co\/papers\/2308.08155\" target=\"_blank\" rel=\"noopener\">gen<\/a>.<\/p>\n\n\n\n<p>In questo tipo di struttura, ci sono diversi agenti che lavorano insieme per risolvere il compito, invece di uno solo. Questo tipo di struttura offre empiricamente prestazioni migliori nella maggior parte dei benchmark. Il motivo di queste prestazioni migliori \u00e8 concettualmente semplice: per molti compiti, piuttosto che usare un sistema \"tuttofare\", si preferisce specializzare le unit\u00e0 su sottocompiti. In questo caso, avere agenti con set di strumenti e memorie separati permette di ottenere una specializzazione efficiente. Ad esempio, perch\u00e9 riempire la memoria dell'agente che genera codice con tutti i contenuti delle pagine web visitate dall'agente di ricerca web? \u00c8 meglio tenerli separati.<\/p>\n\n\n\n<p>Si possono facilmente costruire sistemi multi-agente gerarchici con&nbsp;<code>smolagents<\/code>.<\/p>\n\n\n\n<p>Per farlo, incapsulare l'agente in un oggetto\u00a0<a href=\"https:\/\/huggingface.co\/docs\/smolagents\/v1.2.2\/en\/reference\/agents#smolagents.ManagedAgent\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Agente gestito<\/a>\u00a0oggetto. Questo oggetto ha bisogno di argomenti\u00a0<code>agente<\/code>,\u00a0<code>nome<\/code>, e un\u00a0<code>descrizione<\/code>che sar\u00e0 poi incorporato nel prompt di sistema dell'agente manager per fargli sapere come chiamare questo agente gestito, come facciamo anche per gli strumenti.<\/p>\n\n\n\n<p>Ecco un esempio di creazione di un agente che gestisca uno specifico agente di ricerca web, utilizzando il nostro\u00a0<a href=\"https:\/\/huggingface.co\/docs\/smolagents\/v1.2.2\/en\/reference\/tools#smolagents.DuckDuckGoSearchTool\" target=\"_blank\" rel=\"noopener\">AnatraDuc<\/a><a href=\"https:\/\/huggingface.co\/docs\/smolagents\/v1.2.2\/en\/reference\/tools#smolagents.DuckDuckGoSearchTool\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">k<\/a><a href=\"https:\/\/huggingface.co\/docs\/smolagents\/v1.2.2\/en\/reference\/tools#smolagents.DuckDuckGoSearchTool\" target=\"_blank\" rel=\"noopener\">GoSearchTool<\/a>:<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">da smolagents import CodeAgent, HfApiModel, DuckDuckGoSearchTool, ManagedAgent\n\nmodel = HfApiModel()\n\nweb_agent = CodeAgent(tools=[DuckDuckGoSearchTool()], model=model)\n\nmanaged_web_agent = ManagedAgent(\n    agent=web_agent,\n    name=\"web_search\",\n    description=\"Esegue ricerche sul web per voi. Fornitegli la vostra query come argomento\".\n)\n\nmanager_agent = CodeAgent(\n    tools=[], model=model, managed_agents=[managed_web_agent]\n)\n\nmanager_agent.run(\"Chi \u00e8 l'amministratore delegato di Hugging Face?\")<\/pre>\n\n\n\n<p>Per un esempio approfondito di un'efficiente implementazione multi-agente, vedere\u00a0<a href=\"https:\/\/huggingface.co\/blog\/beating-gaia\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">come abbiamo spinto il nostro sistema multi-agente in cima alla classifica di GAIA<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/huggingface.co\/docs\/smolagents\/guided_tour#talk-with-your-agent-and-visualize-its-thoughts-in-a-cool-gradio-interface\" target=\"_blank\" rel=\"noopener\"><\/a>Parlate con il vostro agente e visualizzate i suoi pensieri in un'interfaccia Gradio di grande impatto.<\/h2>\n\n\n\n<p>\u00c8 possibile utilizzare&nbsp;<code>GradioUI<\/code>&nbsp;per inviare in modo interattivo compiti all'agente e osservare il suo processo di pensiero ed esecuzione; ecco un esempio:<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">da smolagents importiamo (\n    load_tool,\n    CodeAgent,\n    HfApiModel,\n    GradioUI\n)\n\n<em># Strumento di importazione da Hub<\/em>\nstrumento_di_generazione_immagine = load_tool(\"m-ric\/text-to-image\")\n\nmodello = HfApiModel(model_id)\n\n<em># Inizializzare l'agente con lo strumento di generazione delle immagini<\/em>\nagent = CodeAgent(tools=[image_generation_tool], model=modello)\n\nGradioUI(agent).launch()<\/pre>\n\n\n\n<p>Sotto il cofano, quando l'utente digita una nuova risposta, l'agente viene lanciato con&nbsp;<code>agent.run(user_request, reset=False)<\/code>. Il&nbsp;<code>reset=False<\/code>&nbsp;significa che la memoria dell'agente non viene svuotata prima di lanciare questo nuovo task, lasciando che la conversazione continui.<\/p>\n\n\n\n<p>\u00c8 inoltre possibile utilizzare questo&nbsp;<code>reset=False<\/code>&nbsp;per mantenere la conversazione in qualsiasi altra applicazione agenziale.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/huggingface.co\/docs\/smolagents\/guided_tour#next-steps\" target=\"_blank\" rel=\"noopener\"><\/a>Le prossime tappe<\/h2>\n\n\n\n<p>Per un utilizzo pi\u00f9 approfondito, si consiglia di consultare le nostre esercitazioni:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/huggingface.co\/docs\/smolagents\/tutorials\/secure_code_execution\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">la spiegazione del funzionamento dei nostri agenti di codice<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/huggingface.co\/docs\/smolagents\/tutorials\/building_good_agents\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">questa guida su come costruire buoni agenti<\/a>.<\/li>\n\n\n\n<li><a href=\"https:\/\/huggingface.co\/docs\/smolagents\/tutorials\/building_good_agents\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">la guida approfondita all'uso degli strumenti<\/a>.<\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>In this guided visit, you will learn how to build an agent, how to run it, and how to customize it to make it work better for your use-case. Building your agent To initialize a minimal agent, you need at least these two arguments: Once you have these two arguments,\u00a0tools\u00a0and\u00a0model, you can create an agent&#8230;<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"footnotes":""},"doc_category":[7],"doc_tag":[],"class_list":["post-587","docs","type-docs","status-publish","hentry","doc_category-get-started"],"year_month":"2026-04","word_count":1967,"total_views":"5536","reactions":{"happy":"0","normal":"0","sad":"0"},"author_info":{"name":"smolagents","author_nicename":"wd-gstargmail-com","author_url":"https:\/\/smolagents.org\/it\/author\/wd-gstargmail-com\/"},"doc_category_info":[{"term_name":"Get started","term_url":"https:\/\/smolagents.org\/it\/docs-category\/get-started\/"}],"doc_tag_info":[],"_links":{"self":[{"href":"https:\/\/smolagents.org\/it\/wp-json\/wp\/v2\/docs\/587","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/smolagents.org\/it\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/smolagents.org\/it\/wp-json\/wp\/v2\/types\/docs"}],"author":[{"embeddable":true,"href":"https:\/\/smolagents.org\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/smolagents.org\/it\/wp-json\/wp\/v2\/comments?post=587"}],"version-history":[{"count":1,"href":"https:\/\/smolagents.org\/it\/wp-json\/wp\/v2\/docs\/587\/revisions"}],"predecessor-version":[{"id":588,"href":"https:\/\/smolagents.org\/it\/wp-json\/wp\/v2\/docs\/587\/revisions\/588"}],"wp:attachment":[{"href":"https:\/\/smolagents.org\/it\/wp-json\/wp\/v2\/media?parent=587"}],"wp:term":[{"taxonomy":"doc_category","embeddable":true,"href":"https:\/\/smolagents.org\/it\/wp-json\/wp\/v2\/doc_category?post=587"},{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/smolagents.org\/it\/wp-json\/wp\/v2\/doc_tag?post=587"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}