En este cuaderno haremos un navegador web multiagente: ¡un sistema agéntico con varios agentes que colaboran para resolver problemas utilizando la web!
Será una jerarquía simple, utilizando un ManagedAgent
para envolver el agente de búsqueda web gestionado:
Copiado
+----------------+ | Agente Manager | +----------------+ | _______________|______________ | | Intérprete de código +--------------------------------+ Herramienta Agente gestionado | +------------------+ | | Agente de búsqueda web | +------------------+ | | | | | | Herramienta de búsqueda web | | | Herramienta de visita de páginas web | +--------------------------------+
Vamos a configurar este sistema.
Ejecute la siguiente línea para instalar las dependencias necesarias:
Copiado
pip install markdownify duckduckgo-search smolagents --upgrade -q
Iniciemos sesión para llamar a la API de inferencia de HF:
Copiado
from huggingface_hub import login login()
⚡️ Nuestro agente será impulsado por Qwen/Qwen2.5-Coder-32B-Instruct utilizando HfApiModel
que utiliza la API de inferencia de HF: la API de inferencia permite ejecutar rápida y fácilmente cualquier modelo de SO.
Nota: La API de inferencia alberga modelos basados en diversos criterios, y los modelos desplegados pueden actualizarse o sustituirse sin previo aviso. Más información aquí.
Copiado
model_id = "Qwen/Qwen2.5-Coder-32B-Instruct"
🔍 Crear una herramienta de búsqueda web #
Para la navegación web, ya podemos utilizar nuestro DuckDuckGoSearchTool
para proporcionar un equivalente de búsqueda en Google.
Pero entonces también tendremos que ser capaces de pico en la página encontrada por el DuckDuckGoSearchTool
. Para ello, podemos importar la biblioteca integrada Herramienta VisitWebpage
...pero volveremos a construirlo para ver cómo se hace.
Así que vamos a crear nuestro Herramienta VisitWebpage
desde cero utilizando markdownify
.
Copiado
importar re importar solicitudes from markdownify import markdownify from requests.exceptions import RequestException from smolagents import herramienta @herramienta def visitar_pagina_web(url: str) -> str: """Visita una página web en la URL dada y devuelve su contenido como una cadena markdown. Args: url: La URL de la página web a visitar. Devuelve: El contenido de la página web convertido a Markdown, o un mensaje de error si la petición falla. """ intentar: # Enviar una solicitud GET a la URL response = requests.get(url) response.raise_for_status() # Lanzar una excepción para códigos de estado erróneos # Convierte el contenido HTML a Markdown markdown_content = markdownify(response.text).strip() # Eliminar saltos de línea múltiples markdown_content = re.sub(r"\n{3,}", "\n\n", markdown_content) return contenido_marcado except RequestException as e: return f "Error fetching the webpage: {str(e)}" except Exception como e: return f "Se ha producido un error inesperado: {str(e)}"
Bien, ahora vamos a inicializar y probar nuestra herramienta.
Copiado
print(visita_página("https://en.wikipedia.org/wiki/Hugging_Face")[:500])
Construir nuestro sistema multiagente 🤖🤝🤖. #
Ahora que tenemos todas las herramientas busque en
y visitar_página_web
podemos utilizarlos para crear el agente web.
¿Qué configuración elegir para este agente?
- La navegación web es una tarea de una sola línea 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
JsonAgent
. - Además, como a veces la búsqueda en la web requiere explorar muchas páginas antes de encontrar la respuesta correcta, preferimos aumentar el número de
pasos_máx
a 10.
Copiado
de smolagents import ( CodeAgent, ToolCallingAgent, HfApiModel, ManagedAgent, DuckDuckGoSearchTool, LiteLLMModel, ) model = HfApiModel(model_id) web_agent = ToolCallingAgent( tools=[DuckDuckGoSearchTool(), visit_webpage], model=modelo, max_steps=10, )
A continuación, envolvemos este agente en un ManagedAgent
que lo hará invocable por su agente gestor.
Copiado
managed_web_agent = Agente gestionado( agent=agente_web, name="búsqueda", description="Ejecuta búsquedas web por ti. Dale tu consulta como argumento", )
Finalmente creamos un agente gestor, y al inicializarlo le pasamos nuestro agente gestionado en su agentes_gestionados
argumento.
Dado que este agente es el encargado de planificar y pensar, el razonamiento avanzado será beneficioso, por lo que un CodeAgent
será la mejor opción.
Además, queremos hacer una pregunta que incluya el año en curso y realice cálculos de datos adicionales: así que añadamos additional_authorized_imports=["time", "numpy", "pandas"]
por si el agente necesita estos paquetes.
Copiado
manager_agent = CodeAgent( herramientas=[], model=modelo, managed_agents=[managed_web_agent], additional_authorized_imports=["time", "numpy", "pandas"], )
Eso es todo. Ahora vamos a poner en marcha nuestro sistema. Seleccionamos una pregunta que requiere cálculo e investigación:
Copiado
answer = manager_agent.run("Si la formación LLM sigue creciendo al ritmo actual hasta 2030, ¿cuál sería la potencia eléctrica en GW necesaria para alimentar las mayores carreras de formación en 2030? ¿A cuánto correspondería en comparación con algunos países? Por favor, facilite la fuente de las cifras utilizadas.")
Obtenemos este informe como respuesta:
Copiado
Sobre la base de las proyecciones de crecimiento actuales y las estimaciones de consumo de energía, si las formaciones LLM siguen aumentando al ritmo actual hasta 2030 ritmo actual hasta 2030: 1. La energía eléctrica necesaria para alimentar las mayores formaciones en 2030 sería de aproximadamente 303,74 GW, lo que se traduce en unos 2.660.762 GWh/año. lo que equivale a unos 2.660.762 GWh/año. 2. Comparando esto con el consumo eléctrico de los países: - Equivaldría a unas 34% del consumo total de electricidad de China. - Superaría el consumo total de electricidad de India (184%), Rusia (267%) y Japón (291%). - Sería casi 9 veces el consumo eléctrico de países como Italia o México. 3. Fuente de las cifras: - La estimación inicial de 5 GW para la futura formación de LLM procede del CEO de AWS, Matt Garman. - La proyección de crecimiento utilizó una CAGR de 79,80% procedente de un estudio de mercado de Springs. - Los datos de consumo eléctrico del país proceden de la Administración de Información Energética de EE.UU., principalmente para el año 2021.
Parece que vamos a necesitar algunas centrales de tamaño considerable si el hipótesis de escala sigue siendo cierto.
¡Nuestros agentes consiguieron colaborar eficazmente para resolver la tarea! ✅
💡 Puedes ampliar fácilmente esta orquestación a más agentes: uno hace la ejecución de código, otro la búsqueda web, otro se encarga de la carga de ficheros....