Saltar al contenido principal

Smolagentes de Cara Abrazada: Una guía con ejemplos

Aprende a simplificar la creación de agentes de IA con la nueva biblioteca Python de Hugging Face, smolagents, y sigue un proyecto de demostración para verlo en acción.
Actualizado 17 ene 2025  · 8 min de lectura

smolagents de Hugging Face es una nueva biblioteca Python que simplifica la creación de agentes de IAhaciéndolos más accesibles a los desarrolladores.

En este blog, te presentaré la biblioteca smolagents, te explicaré por qué es útil y te guiaré a través de un proyecto de demostración para mostrar sus capacidades. 

¿Qué son los Smolagents de Hugging Face?

Como se describe en el de Hugging Facesmolagents es "una biblioteca muy sencilla que desbloquea las capacidades agénticas de los modelos lingüísticos". Pero, ¿por qué necesitamos bibliotecas para construir agentes?

En el fondo, los agentes se basan en LLM para resolver dinámicamente una tarea observando su entorno, haciendo planes y ejecutándolos con las herramientas de que disponen. Construir estos agentes, aunque no es imposible, requiere que escribas desde cero muchos componentes. Estos componentes garantizan que los agentes funcionen correctamente sin consumir tu crédito de API ni tiempo de ejecución. Los marcos agenticos facilitan esto para que no tengas que reinventar las ruedas.

A menudo se critican los marcos de agentes de IA con dos puntos:

  1. Construyen demasiadas capas de abstracción, lo que las hace rígidas y difíciles de depurar.
  2. Se centran en "flujos de trabajo" en lugar de construir agentes que puedan colaborar dinámicamente por sí mismos.

Por otra parte, los smolagentes tienen cualidades que los hacen muy prometedores para estas aplicaciones agénticas:

  • Las abstracciones del marco se mantienen al mínimo.
  • Mientras que la mayoría de los marcos hacen que los agentes definan sus acciones en formato JSON/texto, el enfoque principal de smolagents es Agentes de Código en el que las acciones se escriben como fragmentos de código Python (esto es diferente de los agentes que escriben código).
  • Al ser un framework de Cara Abrazada, smolagents se integra bien con el Hub y la biblioteca Transformers. Puedes utilizar muchos modelos del hub (algunos de ellos sólo puedes utilizarlos como usuario Pro), y también puedes trabajar con modelos propietarios de OpenAI, Anthropic, etc.
  • Puedes utilizar fácilmente las herramientas ya proporcionadas, o definir tus herramientas personalizadas con un esfuerzo mínimo, casi tan sencillo como escribir una función de Python.

Estas cualidades son las que, sobre el papel, hacen que los smolagentes se puedan conectar a los agentes de IA con poco esfuerzo, así que veamos si se mantienen en la práctica.

Construir un proyecto de demostración con Smolagents

En esta sección, construiremos una demostración sencilla con smolagents. Nuestra aplicación hará que un agente consiga el periódico más votado en la Cara Abrazada Documentos diarios página. Construimos nuestras herramientas personalizadas para el agente y vemos cómo funcionan en acción.

Hugging Face's Daily Papers, una buena fuente para estar al día de los principales documentos de investigación diarios.

Daily Papers, una buena fuente para estar al día de los principales trabajos de investigación diarios.

Configurar smolagents

Para utilizar smolagents, sólo tienes que instalar la biblioteca y proporcionar un token de Cara Abrazada. La facilidad de configuración del marco es un punto positivo.

Para instalar el paquete, ejecuta

pip install smolagents

Construir herramientas personalizadas

Aunque el marco proporciona herramientas integradas que puedes utilizar directamente (por ejemplo, DuckDuckGoSearchTool), crear tus propias herramientas es igual de sencillo. Para nuestro propósito, construimos cuatro herramientas, cada una para un fin concreto:

  • Conseguir el título del diario más importante.
  • Obtener la identificación del documento utilizando su título.
  • Descargar el artículo de arXiv con el ID.
  • Leer el archivo PDF descargado.

Una causa común de los errores de los agentes es el uso de herramientas. Para optimizar las herramientas con fines agénticos, es importante asegurarse de que los agentes entienden claramente qué herramienta utilizar y cómo utilizarla. Para conseguirlo, sé lo más explícito posible al definir estas herramientas:

  • Elige un nombre informativo para la función.
  • Las entradas y salidas de la función deben tener indicaciones de tipo.
  • Debe incluirse una descripción de la finalidad de la herramienta. Esto sirve de manual al agente.

Ahora vamos a construir nuestra primera herramienta personalizada para analizar la página de los periódicos del día y obtener el título del periódico principal:

from smolagents import tool 
# import packages that are used in our tools
import requests
from bs4 import BeautifulSoup
import json

@tool
def get_hugging_face_top_daily_paper() -> str:
    """
    This is a tool that returns the most upvoted paper on Hugging Face daily papers.
    It returns the title of the paper
    """
    try:
      url = "<https://huggingface.co/papers>"
      response = requests.get(url)
      response.raise_for_status()  # Raise an exception for bad status codes (4xx or 5xx)
      soup = BeautifulSoup(response.content, "html.parser")

      # Extract the title element from the JSON-like data in the "data-props" attribute
      containers = soup.find_all('div', class_='SVELTE_HYDRATER contents')
      top_paper = ""

      for container in containers:
          data_props = container.get('data-props', '')
          if data_props:
              try:
                  # Parse the JSON-like string
                  json_data = json.loads(data_props.replace('&quot;', '"'))
                  if 'dailyPapers' in json_data:
                      top_paper = json_data['dailyPapers'][0]['title']
              except json.JSONDecodeError:
                  continue

      return top_paper
    except requests.exceptions.RequestException as e:
      print(f"Error occurred while fetching the HTML: {e}")
      return None

Fíjate en el decorador @tool, la clara denominación de la herramienta, las sugerencias de tipo y el docstring. Del mismo modo, definimos la herramienta get_paper_id_by_title para obtener el ID del artículo por su título, de modo que podamos descargarlo de arXiv. Para esta herramienta, utilizamos la API de Hugging Face.

from huggingface_hub import HfApi

@tool
def get_paper_id_by_title(title: str) -> str:
    """
    This is a tool that returns the arxiv paper id by its title.
    It returns the title of the paper

    Args:
        title: The paper title for which to get the id.
    """
    api = HfApi()
    papers = api.list_papers(query=title)
    if papers:
        paper = next(iter(papers))
        return paper.id
    else:
        return None

La descarga del documento utilizando su ID puede hacerse mediante el paquete Python arxiv. Guardamos el papel localmente con un nombre determinado, que utilizamos después para leerlo:

import arxiv

@tool
def download_paper_by_id(paper_id: str) -> None:
    """
    This tool gets the id of a paper and downloads it from arxiv. It saves the paper locally 
    in the current directory as "paper.pdf".

    Args:
        paper_id: The id of the paper to download.
    """
    paper = next(arxiv.Client().results(arxiv.Search(id_list=[paper_id])))
    paper.download_pdf(filename="paper.pdf")
    return None

Para leer un archivo PDF, puedes utilizar el paquete pypdf. Sólo leeremos las tres primeras páginas del documento para ahorrar en el uso de tokens.

from pypdf import PdfReader

@tool
def read_pdf_file(file_path: str) -> str:
    """
    This function reads the first three pages of a PDF file and returns its content as a string.
    Args:
        file_path: The path to the PDF file.
    Returns:
        A string containing the content of the PDF file.
    """
    content = ""
    reader = PdfReader('paper.pdf')
    print(len(reader.pages))
    pages = reader.pages[:3]
    for page in pages:
        content += page.extract_text()
    return content

Si defines herramientas personalizadas y al agente le cuesta utilizarlas correctamente o pasar los argumentos adecuados, considera la posibilidad de hacer que los nombres de las funciones y variables, así como las descripciones de las herramientas, sean más claros y explícitos.

Ejecutar el Agente

Con nuestras herramientas configuradas, ahora podemos inicializar y ejecutar nuestro agente. Utilizamos el modelo Qwen2.5-Coder-32B-Instruct, que es de uso gratuito. Las herramientas que necesita un agente se pueden pasar al definir el agente. Puedes ver que el proceso de definición y ejecución de un agente requiere un código mínimo:

from smolagents import CodeAgent, HfApiModel

model_id = "Qwen/Qwen2.5-Coder-32B-Instruct"

model = HfApiModel(model_id=model_id, token=<YOUR-API>)
agent = CodeAgent(tools=[get_hugging_face_top_daily_paper,
                         get_paper_id_by_title,
                         download_paper_by_id,
                         read_pdf_file],
                  model=model,
                  add_base_tools=True)

agent.run(
    "Summarize today's top paper on Hugging Face daily papers by reading it.",
)

A medida que el agente actúa, emite su proceso paso a paso. Esto nos permite ver cómo define sus acciones en código mientras utiliza las herramientas personalizadas que le hemos proporcionado:

Salida del agente Smolagent en el paso 0

Salida del agente en el paso 0

El agente puede terminar de leer el documento en el primer paso (Paso 0). En el segundo paso, el modelo enumera los puntos clave del documento, de nuevo, en una lista Python.

salida del agente smolagent en el paso 1.

Resultado del agente en el paso 1

En el tercer paso (Paso 2), el agente crea un resumen de los puntos clave y lo imprime en el paso final (Paso 3).

salida del agente smolagent en los pasos 2, 3.

Salida del agente en los pasos 2, 3.

El agente fue capaz de identificar qué herramientas utilizar en cada paso y terminó la tarea sin errores. Ten en cuenta que toda la canalización podría optimizarse para utilizar menos herramientas, pero tenía curiosidad por comprobar cómo utiliza el agente las múltiples llamadas a herramientas.

En tareas más exigentes, que requieran un razonamiento más complejo o el uso de herramientas, también puedes utilizar modelos más capaces como columna vertebral de tus agentes, como los que ofrecen OpenAI o Claude.

Conclusión

¿Qué es lo que buscas en un marco agencial? Tu respuesta deja claro cuál utilizar, pero si se trata de un marco sencillo que no esté hinchado por abstracciones, te dé control, tenga buenas integraciones y proporcione lo básico sin coger el timón, entonces smolagents es una buena opción para probar.

Estar bien integrado en el ecosistema de Hugging Face significa tener más modelos y herramientas a mano, además del apoyo de la comunidad de código abierto. El marco funciona bien en lo que promete. Podría beneficiarse de más herramientas integradas, y podemos cruzar los dedos para ver que eso ocurre mientras se desarrolla.

Si tienes curiosidad por leer más sobre los agentes de IA y los smolagentes, no te pierdas estos recursos:


Hesam Sheikh Hassani's photo
Author
Hesam Sheikh Hassani
LinkedIn
Twitter

Estudiante de Máster en Inteligencia Artificial y redactor técnico de IA. Comparto ideas sobre la última tecnología de IA, haciendo accesible la investigación en ML y simplificando los complejos temas de IA necesarios para mantenerte a la vanguardia.

Temas

Aprende IA con estos cursos

curso

Working with Hugging Face

4 hr
5.5K
Navigate and use the extensive repository of models and datasets available on the Hugging Face Hub.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado
An AI juggles tasks

blog

Cinco proyectos que puedes crear con modelos de IA generativa (con ejemplos)

Aprende a utilizar modelos de IA generativa para crear un editor de imágenes, un chatbot similar a ChatGPT con pocos recursos y una aplicación clasificadora de aprobación de préstamos y a automatizar interacciones PDF y un asistente de voz con GPT.
Abid Ali Awan's photo

Abid Ali Awan

10 min

tutorial

Construir agentes LangChain para automatizar tareas en Python

Un tutorial completo sobre la construcción de agentes LangChain multiherramienta para automatizar tareas en Python utilizando LLMs y modelos de chat utilizando OpenAI.
Bex Tuychiev's photo

Bex Tuychiev

14 min

tutorial

Ajuste fino de GPT-3 mediante la API OpenAI y Python

Libere todo el potencial de GPT-3 mediante el ajuste fino. Aprenda a utilizar la API de OpenAI y Python para mejorar este modelo de red neuronal avanzado para su caso de uso específico.
Zoumana Keita 's photo

Zoumana Keita

12 min

tutorial

Guía para principiantes de la API de OpenAI: Tutorial práctico y prácticas recomendadas

Este tutorial te presenta la API de OpenAI, sus casos de uso, un enfoque práctico para utilizar la API y todas las prácticas recomendadas que debes seguir.
Arunn Thevapalan's photo

Arunn Thevapalan

13 min

tutorial

Ajuste fino de LLaMA 2: Guía paso a paso para personalizar el modelo de lenguaje grande

Aprende a ajustar Llama-2 en Colab utilizando nuevas técnicas para superar las limitaciones de memoria y computación y hacer más accesibles los grandes modelos lingüísticos de código abierto.
Abid Ali Awan's photo

Abid Ali Awan

12 min

tutorial

Tutorial sobre cómo crear aplicaciones LLM con LangChain

Explore el potencial sin explotar de los grandes modelos lingüísticos con LangChain, un marco Python de código abierto para crear aplicaciones avanzadas de IA.
Moez Ali's photo

Moez Ali

12 min

Ver másVer más