{"id":600,"date":"2025-01-11T15:33:15","date_gmt":"2025-01-11T15:33:15","guid":{"rendered":"https:\/\/smolagents.org\/?post_type=docs&#038;p=600"},"modified":"2025-01-11T15:40:57","modified_gmt":"2025-01-11T15:40:57","password":"","slug":"orchestrate-a-multi-agent-system-%f0%9f%a4%96%f0%9f%a4%9d%f0%9f%a4%96","status":"publish","type":"docs","link":"https:\/\/smolagents.org\/it\/docs\/orchestrate-a-multi-agent-system-\ud83e\udd16\ud83e\udd1d\ud83e\udd16\/","title":{"rendered":"Orchestrare un sistema multi-agente \ud83e\udd16\ud83e\udd1d\ud83e\udd16\ud83e\udd1d\ud83e\udd16"},"content":{"rendered":"<p>In questo quaderno faremo un&nbsp;<strong>browser web multi-agente: un sistema agenziale con diversi agenti che collaborano per risolvere problemi utilizzando il web!<\/strong><\/p>\n\n\n\n<p>Si tratta di una semplice gerarchia, che utilizza un elemento&nbsp;<code>Agente gestito<\/code>&nbsp;per avvolgere l'agente di ricerca web gestito:<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">              +----------------+\n              | Agente manager\n              +----------------+\n                       |\n        _______________|______________\n       | |\n  Interprete di codice +--------------------------------+\n       strumento | Agente gestito |\n                     | +------------------+ |\n                     | | Agente di ricerca web | |\n                     | +------------------+ |\n                     | | | |\n                     | Strumento di ricerca web | |\n                     | Strumento per visitare le pagine web\n                     +--------------------------------+<\/pre>\n\n\n\n<p>Impostiamo questo sistema.<\/p>\n\n\n\n<p>Eseguire la riga seguente per installare le dipendenze richieste:<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pip installa markdownify duckduckgo-search smolagents --upgrade -q<\/pre>\n\n\n\n<p>Effettuiamo il login per chiamare l'API HF Inference:<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">da huggingface_hub importa login\n\nlogin()<\/pre>\n\n\n\n<p>\u26a1\ufe0f Il nostro agente sar\u00e0 alimentato da\u00a0<a href=\"https:\/\/huggingface.co\/Qwen\/Qwen2.5-Coder-32B-Instruct\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Qwen\/Qwen2.5-Coder-32B-Istruzione<\/a>\u00a0utilizzando\u00a0<code>HfApiModel<\/code>\u00a0che utilizza l'API di inferenza di HF: l'API di inferenza consente di eseguire rapidamente e facilmente qualsiasi modello di SO.<\/p>\n\n\n\n<p><em>Nota:<\/em>\u00a0L'Inference API ospita modelli basati su vari criteri e i modelli distribuiti possono essere aggiornati o sostituiti senza preavviso. Per saperne di pi\u00f9\u00a0<a href=\"https:\/\/huggingface.co\/docs\/api-inference\/supported-models\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">qui<\/a>.<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">model_id = \"Qwen\/Qwen2.5-Coder-32B-Istruzione\"<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/huggingface.co\/docs\/smolagents\/examples\/multiagents#-create-a-web-search-tool\" target=\"_blank\" rel=\"noopener\"><\/a>\ud83d\udd0d Creare uno strumento di ricerca sul web<\/h2>\n\n\n\n<p>Per la navigazione sul web, possiamo gi\u00e0 utilizzare il nostro preesistente\u00a0<a href=\"https:\/\/github.com\/huggingface\/smolagents\/blob\/main\/src\/smolagents\/default_tools\/search.py\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><code>DuckDuckGoSearchTool<\/code><\/a>\u00a0per fornire un equivalente della ricerca su Google.<\/p>\n\n\n\n<p>Ma poi dovremo anche essere in grado di accedere alla pagina trovata dal metodo&nbsp;<code>DuckDuckGoSearchTool<\/code>. Per farlo, si pu\u00f2 importare la libreria incorporata&nbsp;<code>Strumento per visitare la pagina web<\/code>ma lo costruiremo di nuovo per vedere come si fa.<\/p>\n\n\n\n<p>Creiamo quindi il nostro&nbsp;<code>Strumento per visitare la pagina web<\/code>&nbsp;da zero utilizzando&nbsp;<code>markdownify<\/code>.<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">importare re\nimportare richieste\nda markdownify import markdownify\nda requests.exceptions import RequestException\nda smolagents importare tool\n\n\n@strumento\ndef visit_webpage(url: str) -&gt; str:\n    \"\"\"Visita una pagina web all'URL indicato e ne restituisce il contenuto come stringa markdown.\n\n    Args:\n        url: L'URL della pagina web da visitare.\n\n    Restituisce:\n        Il contenuto della pagina web convertito in Markdown o un messaggio di errore se la richiesta fallisce.\n    \"\"\"\n    prova:\n        <em># Inviare una richiesta GET all'URL<\/em>\n        response = requests.get(url)\n        response.raise_for_status()  <em># Sollevare un'eccezione per i codici di stato errati<\/em>\n\n        <em># Convertire il contenuto HTML in Markdown<\/em>\n        markdown_content = markdownify(response.text).strip()\n\n        <em># Rimuovere le interruzioni di riga multiple<\/em>\n        markdown_content = re.sub(r\"\\n{3,}\", \"\\n\", markdown_content)\n\n        restituire markdown_content\n\n    tranne RequestException as e:\n        return f \"Errore nel recupero della pagina web: {str(e)}\"\n    except Exception as e:\n        return f \"Si \u00e8 verificato un errore imprevisto: {str(e)}\"<\/pre>\n\n\n\n<p>Ok, ora inizializziamo e testiamo il nostro strumento!<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">print(visit_webpage(\"https:\/\/en.wikipedia.org\/wiki\/Hugging_Face\")[:500])<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/huggingface.co\/docs\/smolagents\/examples\/multiagents#build-our-multi-agent-system-\" target=\"_blank\" rel=\"noopener\"><\/a>Costruire il nostro sistema multi-agente \ud83e\udd16\ud83e\udd1d\ud83e\udd16<\/h2>\n\n\n\n<p>Ora che abbiamo tutti gli strumenti&nbsp;<code>ricerca<\/code>&nbsp;e&nbsp;<code>visita_pagina_web<\/code>, possiamo usarli per creare l'agente web.<\/p>\n\n\n\n<p>Quale configurazione scegliere per questo agente?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La navigazione web \u00e8 un'attivit\u00e0 a linea temporale singola che non richiede chiamate di strumenti in parallelo, per cui la chiamata di strumenti JSON funziona bene. Abbiamo quindi scelto un metodo\u00a0<code>Agente Json<\/code>.<\/li>\n\n\n\n<li>Inoltre, dato che a volte la ricerca sul web richiede l'esplorazione di molte pagine prima di trovare la risposta corretta, preferiamo aumentare il numero di pagine di ricerca.\u00a0<code>passi_massimi<\/code>\u00a0a 10.<\/li>\n<\/ul>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">da smolagents importiamo (\n    CodeAgent,\n    ToolCallingAgent,\n    HfApiModel,\n    ManagedAgent,\n    DuckDuckGoSearchTool,\n    LiteLLMModel,\n)\n\nmodello = HfApiModel(model_id)\n\nweb_agent = ToolCallingAgent(\n    tools=[DuckDuckGoSearchTool(), visit_webpage],\n    modello=modello,\n    max_steps=10,\n)<\/pre>\n\n\n\n<p>Si avvolge poi questo agente in un oggetto&nbsp;<code>Agente gestito<\/code>&nbsp;che lo render\u00e0 richiamabile dal suo agente gestore.<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">managed_web_agent = ManagedAgent(\n    agent=web_agent,\n    name=\"ricerca\",\n    description=\"Esegue ricerche sul Web per voi. Dategli la vostra query come argomento\",\n)<\/pre>\n\n\n\n<p>Infine, creiamo un agente manager e, al momento dell'inizializzazione, gli passiamo il nostro agente gestito nella sua cartella&nbsp;<code>agenti gestiti<\/code>&nbsp;argomento.<\/p>\n\n\n\n<p>Poich\u00e9 questo agente \u00e8 quello che ha il compito di pianificare e pensare, un ragionamento avanzato sar\u00e0 utile, per cui un&nbsp;<code>CodiceAgente<\/code>&nbsp;sar\u00e0 la scelta migliore.<\/p>\n\n\n\n<p>Inoltre, vogliamo porre una domanda che riguardi l'anno in corso ed esegua calcoli aggiuntivi sui dati: aggiungiamo quindi&nbsp;<code>additional_authorized_imports=[\"time\", \"numpy\", \"pandas\"]<\/code>nel caso in cui l'agente abbia bisogno di questi pacchetti.<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">manager_agent = CodeAgent(\n    strumenti=[],\n    model=modello,\n    managed_agents=[managed_web_agent],\n    additional_authorized_imports=[\"time\", \"numpy\", \"pandas\"],\n)<\/pre>\n\n\n\n<p>Questo \u00e8 tutto! Ora facciamo funzionare il nostro sistema! Selezioniamo una domanda che richiede calcoli e ricerche:<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">answer = manager_agent.run(\"Se la formazione LLM continua a crescere al ritmo attuale fino al 2030, quale sarebbe l'energia elettrica in GW necessaria per alimentare i maggiori corsi di formazione entro il 2030? A quanto corrisponderebbe, rispetto ad alcuni Paesi? Si prega di fornire una fonte per i numeri utilizzati\").<\/pre>\n\n\n\n<p>La risposta \u00e8 questo rapporto:<\/p>\n\n\n\n<p>Copiato<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">In base alle attuali proiezioni di crescita e alle stime del consumo energetico, se i corsi di formazione LLM continueranno a crescere al ritmo attuale fino al 2030\nritmo attuale fino al 2030:\n\n1. L'energia elettrica necessaria per alimentare i maggiori corsi di formazione entro il 2030 sarebbe di circa 303,74 GW, che si traduce in circa 2.660.762 GWh\/anno.\nche si traduce in circa 2.660.762 GWh\/anno.\n\n2. Confrontando questo dato con il consumo di elettricit\u00e0 dei Paesi:\n   - Sarebbe equivalente a circa 34% del consumo totale di elettricit\u00e0 della Cina.\n   - Supererebbe il consumo totale di elettricit\u00e0 di India (184%), Russia (267%) e Giappone (291%).\n   - Sarebbe quasi 9 volte il consumo di elettricit\u00e0 di Paesi come l'Italia o il Messico.\n\n3. Fonte dei numeri:\n   - La stima iniziale di 5 GW per la futura formazione LLM proviene da Matt Garman, CEO di AWS.\n   - La proiezione di crescita ha utilizzato un CAGR di 79,80% ricavato da una ricerca di mercato di Springs.\n   - I dati sul consumo di energia elettrica del Paese provengono dalla U.S. Energy Information Administration, principalmente per il 2021.\n2021.<\/pre>\n\n\n\n<p>Sembra che ci sia bisogno di impianti di potenza di dimensioni ragguardevoli se la\u00a0<a href=\"https:\/\/gwern.net\/scaling-hypothesis\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">ipotesi di scala<\/a>\u00a0continua a valere.<\/p>\n\n\n\n<p>I nostri agenti sono riusciti a collaborare in modo efficiente per risolvere il compito! \u2705<\/p>\n\n\n\n<p>\ud83d\udca1 Si pu\u00f2 facilmente estendere questa orchestrazione a pi\u00f9 agenti: uno esegue il codice, uno la ricerca sul web, uno gestisce il caricamento dei file...<\/p>","protected":false},"excerpt":{"rendered":"<p>In this notebook we will make a&nbsp;multi-agent web browser: an agentic system with several agents collaborating to solve problems using the web! It will be a simple hierarchy, using a&nbsp;ManagedAgent&nbsp;object to wrap the managed web search agent: Copied +&#8212;&#8212;&#8212;&#8212;&#8212;-+ | Manager agent | +&#8212;&#8212;&#8212;&#8212;&#8212;-+ | _______________|______________ | | Code interpreter +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+ tool | Managed 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":[9],"doc_tag":[],"class_list":["post-600","docs","type-docs","status-publish","hentry","doc_category-conceptual-guides"],"year_month":"2026-04","word_count":932,"total_views":"5341","reactions":{"happy":"1","normal":"0","sad":"1"},"author_info":{"name":"smolagents","author_nicename":"wd-gstargmail-com","author_url":"https:\/\/smolagents.org\/it\/author\/wd-gstargmail-com\/"},"doc_category_info":[{"term_name":"Conceptual guides","term_url":"https:\/\/smolagents.org\/it\/docs-category\/conceptual-guides\/"}],"doc_tag_info":[],"_links":{"self":[{"href":"https:\/\/smolagents.org\/it\/wp-json\/wp\/v2\/docs\/600","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=600"}],"version-history":[{"count":1,"href":"https:\/\/smolagents.org\/it\/wp-json\/wp\/v2\/docs\/600\/revisions"}],"predecessor-version":[{"id":601,"href":"https:\/\/smolagents.org\/it\/wp-json\/wp\/v2\/docs\/600\/revisions\/601"}],"wp:attachment":[{"href":"https:\/\/smolagents.org\/it\/wp-json\/wp\/v2\/media?parent=600"}],"wp:term":[{"taxonomy":"doc_category","embeddable":true,"href":"https:\/\/smolagents.org\/it\/wp-json\/wp\/v2\/doc_category?post=600"},{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/smolagents.org\/it\/wp-json\/wp\/v2\/doc_tag?post=600"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}