#
Construyendo e Integrando Herramientas para Tu Agente

En esta sección, le daremos a Alfred acceso a la web, permitiéndole encontrar las últimas noticias y actualizaciones globales. Además, tendrá acceso a datos meteorológicos y estadísticas de descargas de modelos de Hugging Face Hub, para que pueda mantener conversaciones relevantes sobre temas actuales.

##
Dale a Tu Agente Acceso a la Web

Recuerda que queremos que Alfred establezca su presencia como un verdadero anfitrión renacentista, con un profundo conocimiento del mundo.

Para lograrlo, necesitamos asegurarnos de que Alfred tenga acceso a las últimas noticias e información sobre el mundo.

¡Comencemos creando una herramienta de búsqueda web para Alfred!

smolagents
llama-index
langgraph

    from smolagents import DuckDuckGoSearchTool

    # Inicializar la herramienta de búsqueda DuckDuckGo
    search_tool = DuckDuckGoSearchTool()

    # Ejemplo de uso
    results = search_tool("¿Quién es el actual Presidente de Francia?")
    print(results)

Salida esperada:

    The current President of France in Emmanuel Macron.

##
Creando una Herramienta Personalizada para Información Meteorológica para Programar los Fuegos Artificiales

La gala perfecta tendría fuegos artificiales bajo un cielo despejado, necesitamos asegurarnos de que los fuegos artificiales no sean cancelados debido al mal tiempo.

Vamos a crear una herramienta personalizada que pueda usarse para llamar a una API meteorológica externa y obtener la información del clima para una ubicación determinada.

Por simplicidad, estamos usando una API meteorológica ficticia para este ejemplo. Si quieres usar una API meteorológica real, podrías implementar una herramienta meteorológica que use la API de OpenWeatherMap, como en la Unidad 1.
smolagents
llama-index
langgraph

    from smolagents import Tool
    import random

    class WeatherInfoTool(Tool):
        name = "weather_info"
        description = "Obtiene información meteorológica ficticia para una ubicación dada."
        inputs = {
            "location": {
                "type": "string",
                "description": "La ubicación para la que obtener información meteorológica."
            }
        }
        output_type = "string"

        def forward(self, location: str):
            # Datos meteorológicos ficticios
            weather_conditions = [
                {"condition": "Lluvioso", "temp_c": 15},
                {"condition": "Despejado", "temp_c": 25},
                {"condition": "Ventoso", "temp_c": 20}
            ]
            # Seleccionar aleatoriamente una condición meteorológica
            data = random.choice(weather_conditions)
            return f"Clima en {location}: {data['condition']}, {data['temp_c']}°C"

    # Inicializar la herramienta
    weather_info_tool = WeatherInfoTool()

##
Creando una Herramienta de Estadísticas de Hub para Influyentes Creadores de IA

Entre los asistentes a la gala están los más destacados creadores de IA. Alfred quiere impresionarlos discutiendo sus modelos, conjuntos de datos y espacios más populares. Crearemos una herramienta para obtener estadísticas de modelos desde Hugging Face Hub basadas en un nombre de usuario.

smolagents
llama-index
langgraph

    from smolagents import Tool
    from huggingface_hub import list_models

    class HubStatsTool(Tool):
        name = "hub_stats"
        description = "Obtiene el modelo más descargado de un autor específico en Hugging Face Hub."
        inputs = {
            "author": {
                "type": "string",
                "description": "El nombre de usuario del autor/organización del modelo para encontrar modelos."
            }
        }
        output_type = "string"

        def forward(self, author: str):
            try:
                # Listar modelos del autor especificado, ordenados por descargas
                models = list(list_models(author=author, sort="downloads", direction=-1, limit=1))

                if models:
                    model = models[0]
                    return f"El modelo más descargado de {author} es {model.id} con {model.downloads:,} descargas."
                else:
                    return f"No se encontraron modelos para el autor {author}."
            except Exception as e:
                return f"Error al obtener modelos para {author}: {str(e)}"

    # Inicializar la herramienta
    hub_stats_tool = HubStatsTool()

    # Ejemplo de uso
    print(hub_stats_tool("facebook")) # Ejemplo: Obtener el modelo más descargado de Facebook

Salida esperada:

    The most downloaded model by facebook is facebook/esmfold_v1 with 12,544,550 downloads.

Con la Herramienta de Estadísticas de Hub, Alfred ahora puede impresionar a influyentes creadores de IA discutiendo sus modelos más populares.

##
Integrando Herramientas con Alfred

Ahora que tenemos todas las herramientas, vamos a integrarlas en el agente de Alfred:

smolagents
llama-index
langgraph

    from smolagents import CodeAgent, HfApiModel

    # Inicializar el modelo de Hugging Face
    model = HfApiModel()

    # Crear Alfred con todas las herramientas
    alfred = CodeAgent(
        tools=[search_tool, weather_info_tool, hub_stats_tool],
        model=model
    )

    # Ejemplo de consulta que Alfred podría recibir durante la gala
    response = alfred.run("¿Qué es Facebook y cuál es su modelo más popular?")

    print("🎩 Respuesta de Alfred:")
    print(response)

Salida esperada:

    🎩 Respuesta de Alfred:
    Facebook es un sitio web de redes sociales donde los usuarios pueden conectarse, compartir información e interactuar con otros. El modelo más descargado de Facebook en Hugging Face Hub es ESMFold_v1.

##
Conclusión

Al integrar estas herramientas, Alfred ahora está equipado para manejar una variedad de tareas, desde búsquedas web hasta actualizaciones meteorológicas y estadísticas de modelos. Esto asegura que se mantenga como el anfitrión más informado y atractivo en la gala.

Intenta implementar una herramienta que pueda usarse para obtener las últimas noticias sobre un tema específico.

Cuando hayas terminado, implementa tus herramientas personalizadas en el archivo `tools.py`.

< > Update on GitHub