#
Créons notre premier Agent avec smolagents

Dans la section précédente, nous avons appris comment créer des Agents à partir de zéro en utilisant du code Python, et nous avons vu à quel point ce processus peut être fastidieux. Heureusement, de nombreuses bibliothèques d’agents simplifient ce travail en se chargeant de la majeure partie du travail lourd pour vous.

Dans ce tutoriel, vous créerez votre tout premier Agent capable d’exécuter des actions telles que la génération d’images, la recherche sur le web, la vérification de fuseaux horaires et bien plus encore !

Vous publierez également votre agent sur un Hugging Face Space afin de le partager avec vos amis et collègues.

C’est parti !

##
Qu’est-ce que smolagents ?

Pour créer cet Agent, nous allons utiliser `smolagents`, une bibliothèque qui fournit un cadre facilitant le développement de vos agents.

Cette bibliothèque légère est conçue pour la simplicité, tout en masquant une grande partie de la complexité liée à la construction d’un Agent, vous permettant ainsi de vous concentrer sur la conception du comportement de votre agent.

Nous approfondirons smolagents dans la prochaine unité. En attendant, vous pouvez également consulter ce billet de blog ou le dépôt GitHub de la bibliothèque.

En bref, `smolagents` est une bibliothèque qui se concentre sur le codeAgent, un type d’agent qui exécute des “Actions” via des blocs de code, puis “Observe” les résultats en exécutant le code.

Voici un exemple de ce que nous allons construire !

Nous avons équipé notre agent d’un outil de génération d’images et lui avons demandé de générer une image d’un chat.

L’agent dans `smolagents` aura les mêmes comportements que celui personnalisé que nous avons construit précédemment : il va penser, agir et observer en cycle jusqu’à atteindre une réponse finale :

Excitant, n’est-ce pas ?

##
Construisons notre Agent !

Pour commencer, dupliquez ce Space : https://huggingface.co/spaces/agents-course/First_agent_template

> Merci à Aymeric pour ce template ! 🙌

Dupliquer cet Space signifie créer une copie locale sur votre propre profil :

Tout au long de cette leçon, le seul fichier que vous aurez à modifier est le (actuellement incomplet) “app.py”. Vous pouvez consulter l’original dans le template. Pour trouver le vôtre, allez dans votre copie du Space, cliquez sur l’onglet `Files` puis sur `app.py` dans la liste des répertoires.

Analysons le code ensemble :

- Le fichier commence par quelques importations de bibliothèques simples mais nécessaires

    from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool
    import datetime
    import requests
    import pytz
    import yaml
    from tools.final_answer import FinalAnswerTool

Comme indiqué précédemment, nous utiliserons directement la classe CodeAgent de smolagents.

###
Les Outils

Entrons maintenant dans le vif du sujet avec les outils ! Si vous souhaitez un rappel sur les outils, n’hésitez pas à consulter la section Outils du cours.

    @tool
    def my_custom_tool(arg1: str, arg2: int) -> str:  # il est important de spécifier le type de retour
        # Conservez ce format pour la description de l'outil et des arguments, mais n'hésitez pas à modifier l'outil
        """Un outil qui ne fait encore rien
        Arguments:
            arg1: le premier argument
            arg2: le deuxième argument
        """
        return "Quelle magie allez-vous créer ?"

    @tool
    def get_current_time_in_timezone(timezone: str) -> str:
        """Un outil qui récupère l'heure locale actuelle dans un fuseau horaire spécifié.
        Arguments:
            timezone: Une chaîne représentant un fuseau horaire valide (par exemple, 'America/New_York').
        """
        try:
            # Créer l'objet fuseau horaire
            tz = pytz.timezone(timezone)
            # Obtenir l'heure actuelle dans ce fuseau horaire
            local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
            return f"L'heure locale actuelle dans {timezone} est : {local_time}"
        except Exception as e:
            return f"Erreur lors de la récupération de l'heure pour le fuseau horaire '{timezone}' : {str(e)}"

Les outils sont ce que nous vous encourageons à construire dans cette section ! Nous vous donnons deux exemples :

1. Un outil factice non fonctionnel que vous pouvez modifier pour créer quelque chose d’utile.
2. Un outil réellement fonctionnel qui récupère l’heure actuelle quelque part dans le monde.

Pour définir votre outil, il est important de :

1. Fournir des types d’entrée et de sortie pour votre fonction, comme dans `get_current_time_in_timezone(timezone: str) -> str:`
2. Fournir une docstring bien formatée. `smolagents` s’attend à ce que tous les arguments aient une description textuelle dans la docstring.

###
L’Agent

Il utilise `Qwen/Qwen2.5-Coder-32B-Instruct` comme moteur LLM. C’est un modèle très performant auquel nous accéderons via l’API serverless.

    final_answer = FinalAnswerTool()
    model = HfApiModel(
        max_tokens=2096,
        temperature=0.5,
        model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
        custom_role_conversions=None,
    )

    with open("prompts.yaml", 'r') as stream:
        prompt_templates = yaml.safe_load(stream)

    # Nous créons notre CodeAgent
    agent = CodeAgent(
        model=model,
        tools=[final_answer],  # ajoutez vos outils ici (ne supprimez pas final_answer)
        max_steps=6,
        verbosity_level=1,
        grammar=None,
        planning_interval=None,
        name=None,
        description=None,
        prompt_templates=prompt_templates
    )

    GradioUI(agent).launch()

Cet Agent utilise toujours l’`InferenceClient` que nous avons vu dans une section précédente derrière la classe HfApiModel !

Nous fournirons des exemples plus détaillés lors de la présentation du cadre dans l’Unité 2. Pour l’instant, vous devez vous concentrer sur l’ajout de nouveaux outils à la liste des outils en utilisant le paramètre `tools` de votre Agent.

Par exemple, vous pourriez utiliser le `DuckDuckGoSearchTool` qui a été importé dans la première ligne du code, ou vous pouvez examiner le `image_generation_tool` qui est chargé depuis le Hub plus tard dans le code.

Ajouter des outils donnera de nouvelles capacités à votre agent, alors soyez créatif !

Le fichier complet “app.py” :

    from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool
    import datetime
    import requests
    import pytz
    import yaml
    from tools.final_answer import FinalAnswerTool

    from Gradio_UI import GradioUI

    # Voici un exemple d'un outil qui ne fait encore rien. Épatez-nous avec votre créativité !
    @tool
    def my_custom_tool(arg1: str, arg2: int) -> str:  # il est important de spécifier le type de retour
        # Conservez ce format pour la description de l'outil et des arguments, mais n'hésitez pas à modifier l'outil
        """Un outil qui ne fait encore rien
        Arguments:
            arg1: le premier argument
            arg2: le deuxième argument
        """
        return "Quelle magie allez-vous créer ?"

    @tool
    def get_current_time_in_timezone(timezone: str) -> str:
        """Un outil qui récupère l'heure locale actuelle dans un fuseau horaire spécifié.
        Arguments:
            timezone: Une chaîne représentant un fuseau horaire valide (par exemple, 'America/New_York').
        """
        try:
            # Créer l'objet fuseau horaire
            tz = pytz.timezone(timezone)
            # Obtenir l'heure actuelle dans ce fuseau horaire
            local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
            return f"L'heure locale actuelle dans {timezone} est : {local_time}"
        except Exception as e:
            return f"Erreur lors de la récupération de l'heure pour le fuseau horaire '{timezone}' : {str(e)}"

    final_answer = FinalAnswerTool()
    model = HfApiModel(
        max_tokens=2096,
        temperature=0.5,
        model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
        custom_role_conversions=None,
    )

    # Importer l'outil depuis le Hub
    image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)

    with open("prompts.yaml", 'r') as stream:
        prompt_templates = yaml.safe_load(stream)

    agent = CodeAgent(
        model=model,
        tools=[final_answer],  # ajoutez vos outils ici (ne supprimez pas final_answer)
        max_steps=6,
        verbosity_level=1,
        grammar=None,
        planning_interval=None,
        name=None,
        description=None,
        prompt_templates=prompt_templates
    )

    GradioUI(agent).launch()

Votre objectif est de vous familiariser avec le Space et l’Agent.

Actuellement, l’agent dans le template n’utilise aucun outil, alors essayez de lui fournir certains des outils préfabriqués ou même de créer de nouveaux outils vous-même !

Nous attendons avec impatience vos incroyables agents dans le canal Discord #agents-course-showcase!

Félicitations, vous avez construit votre premier Agent ! N’hésitez pas à le partager avec vos amis et collègues.

Comme c’est votre première tentative, il est tout à fait normal qu’il soit un peu bogué ou lent. Dans les unités futures, nous apprendrons à construire des Agents encore meilleurs.

La meilleure façon d’apprendre est d’essayer, alors n’hésitez pas à le mettre à jour, à ajouter plus d’outils, à essayer avec un autre modèle, etc.

Dans la prochaine section, vous allez remplir le quiz final et obtenir votre certificat !

< > Update on GitHub