{"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\/es\/docs\/orchestrate-a-multi-agent-system-\ud83e\udd16\ud83e\udd1d\ud83e\udd16\/","title":{"rendered":"Orquestar un sistema multiagente \ud83e\udd16\ud83e\udd1d\ud83e\udd16"},"content":{"rendered":"<p>En este cuaderno haremos un&nbsp;<strong>navegador web multiagente: \u00a1un sistema ag\u00e9ntico con varios agentes que colaboran para resolver problemas utilizando la web!<\/strong><\/p>\n\n\n\n<p>Ser\u00e1 una jerarqu\u00eda simple, utilizando un&nbsp;<code>ManagedAgent<\/code>&nbsp;para envolver el agente de b\u00fasqueda web gestionado:<\/p>\n\n\n\n<p>Copiado<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">              +----------------+\n              | Agente Manager |\n              +----------------+\n                       |\n        _______________|______________\n       | |\n  Int\u00e9rprete de c\u00f3digo +--------------------------------+\n       Herramienta Agente gestionado\n                     | +------------------+ |\n                     | Agente de b\u00fasqueda web\n                     | +------------------+ |\n                     | | | |\n                     | Herramienta de b\u00fasqueda web | |\n                     | Herramienta de visita de p\u00e1ginas web |\n                     +--------------------------------+<\/pre>\n\n\n\n<p>Vamos a configurar este sistema.<\/p>\n\n\n\n<p>Ejecute la siguiente l\u00ednea para instalar las dependencias necesarias:<\/p>\n\n\n\n<p>Copiado<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pip install markdownify duckduckgo-search smolagents --upgrade -q<\/pre>\n\n\n\n<p>Iniciemos sesi\u00f3n para llamar a la API de inferencia de HF:<\/p>\n\n\n\n<p>Copiado<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">from huggingface_hub import login\n\nlogin()<\/pre>\n\n\n\n<p>\u26a1\ufe0f Nuestro agente ser\u00e1 impulsado por\u00a0<a href=\"https:\/\/huggingface.co\/Qwen\/Qwen2.5-Coder-32B-Instruct\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Qwen\/Qwen2.5-Coder-32B-Instruct<\/a>\u00a0utilizando\u00a0<code>HfApiModel<\/code>\u00a0que utiliza la API de inferencia de HF: la API de inferencia permite ejecutar r\u00e1pida y f\u00e1cilmente cualquier modelo de SO.<\/p>\n\n\n\n<p><em>Nota:<\/em>\u00a0La API de inferencia alberga modelos basados en diversos criterios, y los modelos desplegados pueden actualizarse o sustituirse sin previo aviso. M\u00e1s informaci\u00f3n\u00a0<a href=\"https:\/\/huggingface.co\/docs\/api-inference\/supported-models\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">aqu\u00ed<\/a>.<\/p>\n\n\n\n<p>Copiado<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">model_id = \"Qwen\/Qwen2.5-Coder-32B-Instruct\"<\/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 Crear una herramienta de b\u00fasqueda web<\/h2>\n\n\n\n<p>Para la navegaci\u00f3n web, ya podemos utilizar nuestro\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>\u00a0para proporcionar un equivalente de b\u00fasqueda en Google.<\/p>\n\n\n\n<p>Pero entonces tambi\u00e9n tendremos que ser capaces de pico en la p\u00e1gina encontrada por el&nbsp;<code>DuckDuckGoSearchTool<\/code>. Para ello, podemos importar la biblioteca integrada&nbsp;<code>Herramienta VisitWebpage<\/code>...pero volveremos a construirlo para ver c\u00f3mo se hace.<\/p>\n\n\n\n<p>As\u00ed que vamos a crear nuestro&nbsp;<code>Herramienta VisitWebpage<\/code>&nbsp;desde cero utilizando&nbsp;<code>markdownify<\/code>.<\/p>\n\n\n\n<p>Copiado<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">importar re\nimportar solicitudes\nfrom markdownify import markdownify\nfrom requests.exceptions import RequestException\nfrom smolagents import herramienta\n\n\n@herramienta\ndef visitar_pagina_web(url: str) -&gt; str:\n    \"\"\"Visita una p\u00e1gina web en la URL dada y devuelve su contenido como una cadena markdown.\n\n    Args:\n        url: La URL de la p\u00e1gina web a visitar.\n\n    Devuelve:\n        El contenido de la p\u00e1gina web convertido a Markdown, o un mensaje de error si la petici\u00f3n falla.\n    \"\"\"\n    intentar:\n        <em># Enviar una solicitud GET a la URL<\/em>\n        response = requests.get(url)\n        response.raise_for_status()  <em># Lanzar una excepci\u00f3n para c\u00f3digos de estado err\u00f3neos<\/em>\n\n        <em># Convierte el contenido HTML a Markdown<\/em>\n        markdown_content = markdownify(response.text).strip()\n\n        <em># Eliminar saltos de l\u00ednea m\u00faltiples<\/em>\n        markdown_content = re.sub(r\"\\n{3,}\", \"\\n\\n\", markdown_content)\n\n        return contenido_marcado\n\n    except RequestException as e:\n        return f \"Error fetching the webpage: {str(e)}\"\n    except Exception como e:\n        return f \"Se ha producido un error inesperado: {str(e)}\"<\/pre>\n\n\n\n<p>Bien, ahora vamos a inicializar y probar nuestra herramienta.<\/p>\n\n\n\n<p>Copiado<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">print(visita_p\u00e1gina(\"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>Construir nuestro sistema multiagente \ud83e\udd16\ud83e\udd1d\ud83e\udd16.<\/h2>\n\n\n\n<p>Ahora que tenemos todas las herramientas&nbsp;<code>busque en<\/code>&nbsp;y&nbsp;<code>visitar_p\u00e1gina_web<\/code>podemos utilizarlos para crear el agente web.<\/p>\n\n\n\n<p>\u00bfQu\u00e9 configuraci\u00f3n elegir para este agente?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La navegaci\u00f3n web es una tarea de una sola l\u00ednea de tiempo que no requiere llamadas a herramientas paralelas, por lo que la llamada a herramientas JSON funciona bien para ello. Por tanto, elegimos un\u00a0<code>JsonAgent<\/code>.<\/li>\n\n\n\n<li>Adem\u00e1s, como a veces la b\u00fasqueda en la web requiere explorar muchas p\u00e1ginas antes de encontrar la respuesta correcta, preferimos aumentar el n\u00famero de\u00a0<code>pasos_m\u00e1x<\/code>\u00a0a 10.<\/li>\n<\/ul>\n\n\n\n<p>Copiado<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">de smolagents import (\n    CodeAgent,\n    ToolCallingAgent,\n    HfApiModel,\n    ManagedAgent,\n    DuckDuckGoSearchTool,\n    LiteLLMModel,\n)\n\nmodel = HfApiModel(model_id)\n\nweb_agent = ToolCallingAgent(\n    tools=[DuckDuckGoSearchTool(), visit_webpage],\n    model=modelo,\n    max_steps=10,\n)<\/pre>\n\n\n\n<p>A continuaci\u00f3n, envolvemos este agente en un&nbsp;<code>ManagedAgent<\/code>&nbsp;que lo har\u00e1 invocable por su agente gestor.<\/p>\n\n\n\n<p>Copiado<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">managed_web_agent = Agente gestionado(\n    agent=agente_web,\n    name=\"b\u00fasqueda\",\n    description=\"Ejecuta b\u00fasquedas web por ti. Dale tu consulta como argumento\",\n)<\/pre>\n\n\n\n<p>Finalmente creamos un agente gestor, y al inicializarlo le pasamos nuestro agente gestionado en su&nbsp;<code>agentes_gestionados<\/code>&nbsp;argumento.<\/p>\n\n\n\n<p>Dado que este agente es el encargado de planificar y pensar, el razonamiento avanzado ser\u00e1 beneficioso, por lo que un&nbsp;<code>CodeAgent<\/code>&nbsp;ser\u00e1 la mejor opci\u00f3n.<\/p>\n\n\n\n<p>Adem\u00e1s, queremos hacer una pregunta que incluya el a\u00f1o en curso y realice c\u00e1lculos de datos adicionales: as\u00ed que a\u00f1adamos&nbsp;<code>additional_authorized_imports=[\"time\", \"numpy\", \"pandas\"]<\/code>por si el agente necesita estos paquetes.<\/p>\n\n\n\n<p>Copiado<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">manager_agent = CodeAgent(\n    herramientas=[],\n    model=modelo,\n    managed_agents=[managed_web_agent],\n    additional_authorized_imports=[\"time\", \"numpy\", \"pandas\"],\n)<\/pre>\n\n\n\n<p>Eso es todo. Ahora vamos a poner en marcha nuestro sistema. Seleccionamos una pregunta que requiere c\u00e1lculo e investigaci\u00f3n:<\/p>\n\n\n\n<p>Copiado<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">answer = manager_agent.run(\"Si la formaci\u00f3n LLM sigue creciendo al ritmo actual hasta 2030, \u00bfcu\u00e1l ser\u00eda la potencia el\u00e9ctrica en GW necesaria para alimentar las mayores carreras de formaci\u00f3n en 2030? \u00bfA cu\u00e1nto corresponder\u00eda en comparaci\u00f3n con algunos pa\u00edses? Por favor, facilite la fuente de las cifras utilizadas.\")<\/pre>\n\n\n\n<p>Obtenemos este informe como respuesta:<\/p>\n\n\n\n<p>Copiado<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Sobre la base de las proyecciones de crecimiento actuales y las estimaciones de consumo de energ\u00eda, si las formaciones LLM siguen aumentando al ritmo actual hasta 2030\nritmo actual hasta 2030:\n\n1. La energ\u00eda el\u00e9ctrica necesaria para alimentar las mayores formaciones en 2030 ser\u00eda de aproximadamente 303,74 GW, lo que se traduce en unos 2.660.762 GWh\/a\u00f1o.\nlo que equivale a unos 2.660.762 GWh\/a\u00f1o.\n\n2. Comparando esto con el consumo el\u00e9ctrico de los pa\u00edses:\n   - Equivaldr\u00eda a unas 34% del consumo total de electricidad de China.\n   - Superar\u00eda el consumo total de electricidad de India (184%), Rusia (267%) y Jap\u00f3n (291%).\n   - Ser\u00eda casi 9 veces el consumo el\u00e9ctrico de pa\u00edses como Italia o M\u00e9xico.\n\n3. Fuente de las cifras:\n   - La estimaci\u00f3n inicial de 5 GW para la futura formaci\u00f3n de LLM procede del CEO de AWS, Matt Garman.\n   - La proyecci\u00f3n de crecimiento utiliz\u00f3 una CAGR de 79,80% procedente de un estudio de mercado de Springs.\n   - Los datos de consumo el\u00e9ctrico del pa\u00eds proceden de la Administraci\u00f3n de Informaci\u00f3n Energ\u00e9tica de EE.UU., principalmente para el a\u00f1o\n2021.<\/pre>\n\n\n\n<p>Parece que vamos a necesitar algunas centrales de tama\u00f1o considerable si el\u00a0<a href=\"https:\/\/gwern.net\/scaling-hypothesis\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">hip\u00f3tesis de escala<\/a>\u00a0sigue siendo cierto.<\/p>\n\n\n\n<p>\u00a1Nuestros agentes consiguieron colaborar eficazmente para resolver la tarea! \u2705<\/p>\n\n\n\n<p>\ud83d\udca1 Puedes ampliar f\u00e1cilmente esta orquestaci\u00f3n a m\u00e1s agentes: uno hace la ejecuci\u00f3n de c\u00f3digo, otro la b\u00fasqueda web, otro se encarga de la carga de ficheros....<\/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":"5339","reactions":{"happy":"1","normal":"0","sad":"1"},"author_info":{"name":"smolagents","author_nicename":"wd-gstargmail-com","author_url":"https:\/\/smolagents.org\/es\/author\/wd-gstargmail-com\/"},"doc_category_info":[{"term_name":"Conceptual guides","term_url":"https:\/\/smolagents.org\/es\/docs-category\/conceptual-guides\/"}],"doc_tag_info":[],"_links":{"self":[{"href":"https:\/\/smolagents.org\/es\/wp-json\/wp\/v2\/docs\/600","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/smolagents.org\/es\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/smolagents.org\/es\/wp-json\/wp\/v2\/types\/docs"}],"author":[{"embeddable":true,"href":"https:\/\/smolagents.org\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/smolagents.org\/es\/wp-json\/wp\/v2\/comments?post=600"}],"version-history":[{"count":1,"href":"https:\/\/smolagents.org\/es\/wp-json\/wp\/v2\/docs\/600\/revisions"}],"predecessor-version":[{"id":601,"href":"https:\/\/smolagents.org\/es\/wp-json\/wp\/v2\/docs\/600\/revisions\/601"}],"wp:attachment":[{"href":"https:\/\/smolagents.org\/es\/wp-json\/wp\/v2\/media?parent=600"}],"wp:term":[{"taxonomy":"doc_category","embeddable":true,"href":"https:\/\/smolagents.org\/es\/wp-json\/wp\/v2\/doc_category?post=600"},{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/smolagents.org\/es\/wp-json\/wp\/v2\/doc_tag?post=600"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}