#
Création et intégration d’outils pour votre agent

Dans cette section, nous allons donner à Alfred l’accès au web, lui permettant de trouver les dernières nouvelles et mises à jour mondiales. De plus, il aura accès aux données météorologiques et aux statistiques de téléchargement des modèles du Hub d’Hugging Face Hub, pour qu’il puisse faire des conversations pertinentes sur des sujets frais.

##
Donnez à votre agent l’accès au web

Rappelez-vous que nous voulons qu’Alfred établisse sa présence comme un véritable hôte de la renaissance, avec une connaissance approfondie du monde.

Pour ce faire, nous devons nous assurer qu’Alfred a accès aux dernières nouvelles et informations sur le monde.

Commençons par créer un outil de recherche web pour Alfred !

smolagents
llama-index
langgraph

    from smolagents import DuckDuckGoSearchTool

    # Initialiser l'outil de recherche DuckDuckGo
    search_tool = DuckDuckGoSearchTool()

    # Exemple d'usage
    results = search_tool("Qui est l'actuel Président de la France ?")
    print(results)

Sortie attendue :

    L'actuel Président de la France est Emmanuel Macron.

##
Création d’un outil personnalisé pour les informations météorologiques afin de programmer le feu d’artifice

Le gala parfait aurait un feu d’artifice dans un ciel clair, nous devons nous assurer qu’il ne soit pas annulé à cause du mauvais temps.

Créons un outil personnalisé qui peut être utilisé pour appeler une API météo externe et obtenir les informations pour un lieu donné.

> Par souci de simplicité, nous utilisons une API météorologique factice pour cet exemple. Si vous voulez utiliser une véritable API, vous pourriez implémenter un outil utilisant l’API OpenWeatherMap comme dans l’Unité 1.

smolagents
llama-index
langgraph

    from smolagents import Tool
    import random

    class WeatherInfoTool(Tool):
        name = "weather_info"
        description = "Récupère des informations météorologiques factices pour un lieu donné."
        inputs = {
            "location": {
                "type": "string",
                "description": "Le lieu pour lequel obtenir les informations météorologiques."
            }
        }
        output_type = "string"

        def forward(self, location: str):
            # Données météorologiques factices
            weather_conditions = [
                {"condition": "Pluvieux", "temp_c": 15},
                {"condition": "Clair", "temp_c": 25},
                {"condition": "Venteux", "temp_c": 20}
            ]
            # Sélectionner aléatoirement une condition météorologique
            data = random.choice(weather_conditions)
            return f"Météo à {location}: {data['condition']}, {data['temp_c']}°C"

    # Initialiser l'outil
    weather_info_tool = WeatherInfoTool()

##
Création d’un outil pour obtenir les statistiques du Hub concernant les constructeurs d’IA influents

Le gala réunit le gratin des constructeurs d’IA. Alfred veut les impressionner en discutant de leurs modèles, jeux de données et Spaces les plus populaires. Nous créerons un outil pour récupérer les statistiques des modèles du Hub à partir d’un nom d’utilisateur.

smolagents
llama-index
langgraph

    from smolagents import Tool
    from huggingface_hub import list_models

    class HubStatsTool(Tool):
        name = "hub_stats"
        description = "Récupère le modèle le plus téléchargé d'un auteur spécifique sur le Hugging Face Hub."
        inputs = {
            "author": {
                "type": "string",
                "description": "Le nom d'utilisateur de l'auteur/organisation du modèle pour trouver des modèles."
            }
        }
        output_type = "string"

        def forward(self, author: str):
            try:
                # Lister les modèles de l'auteur spécifié, triés par téléchargements
                models = list(list_models(author=author, sort="downloads", direction=-1, limit=1))

                if models:
                    model = models[0]
                    return f"Le modèle le plus téléchargé par {author} est {model.id} avec {model.downloads:,} téléchargements."
                else:
                    return f"Aucun modèle trouvé pour l'auteur {author}."
            except Exception as e:
                return f"Erreur lors de la récupération des modèles pour {author}: {str(e)}"

    # Initialiser l'outil
    hub_stats_tool = HubStatsTool()

    # Exemple d'usage
    print(hub_stats_tool("facebook")) # Exemple : Obtenir le modèle le plus téléchargé par Facebook

Sortie attendue :

    Le modèle le plus téléchargé par facebook est facebook/esmfold_v1 avec 12,544,550 téléchargements.

Avec l’outil de statistiques, Alfred peut maintenant impressionner les constructeurs d’IA influents en discutant de leurs modèles les plus populaires.

##
Intégration des outils

Maintenant que nous avons tous les outils, intégrons-les dans l’agent d’Alfred :

smolagents
llama-index
langgraph

    from smolagents import CodeAgent, InferenceClientModel

    # Initialiser le modèle Hugging Face
    model = InferenceClientModel()

    # Créer Alfred avec tous les outils
    alfred = CodeAgent(
        tools=[search_tool, weather_info_tool, hub_stats_tool],
        model=model
    )

    # Exemple de requête qu'Alfred pourrait recevoir pendant le gala
    response = alfred.run("Qu'est-ce que Facebook et quel est leur modèle le plus populaire ?")

    print("🎩 Réponse d'Alfred :")
    print(response)

Sortie attendue :

    🎩 Réponse d'Alfred :
    Facebook est un site web de réseau social où les utilisateurs peuvent se connecter, partager des informations et interagir avec d'autres. Le modèle le plus téléchargé par Facebook sur le Hugging Face Hub est ESMFold_v1.

##
Conclusion

En intégrant ces outils, Alfred est maintenant équipé pour gérer une variété de tâches, des recherches web aux mises à jour météorologiques et aux statistiques de modèles. Cela garantit qu’il reste l’hôte le plus informé et engageant du gala.

> Essayez d’implémenter un outil qui peut être utilisé pour obtenir les dernières nouvelles sur un sujet spécifique.

> Quand vous avez terminé, implémentez vos outils personnalisés dans le fichier `tools.py`.

Update on GitHub