Connexion
Abonnez-vous

[Tuto] Développer facilement des extensions avec une intelligence artificielle

14/20, parfois un peu tête en l’air

[Tuto] Développer facilement des extensions avec une intelligence artificielle

Un élément vous bloque lorsque vous naviguez ? Vous avez une idée qui pourrait grandement améliorer votre navigateur ? L’intelligence artificielle générative peut répondre à des besoins simples en vous proposant de A à Z une extension pour votre navigateur. On vous explique comment faire, avec deux exemples concrets.

Le 11 mars à 16h03

L’intelligence artificielle générative prend ses aises dans nos vies numériques et s’immisce de plus en plus dans de nombreux domaines. L’intelligence artificielle n’a rien de nouveau, elle existe depuis des dizaines d’années (y compris les réseaux de neurones), mais son côté génératif la rend bien plus accessible au grand public, qui peut interagir avec elle, dans une certaine mesure évidemment.

Un premier exemple simple : décocher automatiquement une case

Un domaine dans lequel elle peut rendre bien des services est la création de petits programmes. Alors qu’il fallait auparavant se documenter avant de se lancer (ou bien adapter des bouts de code récupérés de-ci de-là), l’IA générative est capable de vous proposer des programmes clés en main en quelques secondes. Le plus long est souvent de trouver une idée, pas de la réaliser.

On vous donne un exemple avec Trainline, un service concurrent à SNCF Connect pour la réservation de billets de train. Le design est épuré et pratique à l’usage (mais ça dépend des goûts de chacun). Quoi qu’il en soit, depuis un moment maintenant la case « Rechercher un hébergement » est cochée par défaut avec l’ouverture d’une page Booking lors de la recherche.

Claude 3.7 Sonnet : un prompt, une réponse, ça marche

Résoudre ce problème n’a demandé que quelques secondes à Claude (en version 3.7 Sonnet), l’IA d’Anthropic. Voici notre prompt, accompagné d’une capture d’écran du site (nous utilisons la version payante professionnelle à 21,60 euros par mois, car Claude nous sert aussi pour d’autres projets) :

Réponse de l’IA générative (qui se la joue empathique au passage) : « Je comprends votre frustration avec cette case à cocher automatiquement. Je peux vous aider à créer une extension simple pour Chrome qui décochera automatiquement la case "Rechercher un hébergement" sur le site Trainline ».

Cette réponse s’accompagne des lignes de code pour deux fichiers (vous pouvez les télécharger directement en cliquant ici) :

  • manifest.json avec le contenu de la première partie du code
  • content.js avec le contenu de la deuxième partie du code

Comme précisé dans l’explication de Claude, il faut ajouter trois images (des icônes) de 16x16, 48x48 et 128x128 pixels, simplement nommées icon16.png, icon48.png et icon128.png dans cet exemple. Vous pouvez changer leur nom dans le manifest.json. Claude donne ensuite la procédure pour installer l’extension sur son navigateur.

Ce n’est pas plus compliqué… et ça marche en moins de trois minutes montre en main. Cette extension va rester sur notre navigateur !

Comment tester et installer son extension

Une fois les deux fichiers sur votre ordinateur, installer l’extension sur votre navigateur est très simple. Sur Edge (et n’importe quelle base Chrome), effectuez un clic droit sur le petit puzzle dans la barre d’outils, puis « Gérer vos extensions ». Cochez la case « Mode développeur », cliquez sur « Charger l’extension décompressée » et sélectionnez le dossier où se trouve vos fichiers.

Sur Firefox, tapez about:debugging dans la barre d’adresse, puis cliquez sur « Ce Firefox » et « Charger un module complémentaire temporaire ». Même chose, sélectionnez le dossier où se trouve votre extension et sélectionnez Manifest.json.

Vous pouvez également trouver l’extension ici sur Chrome et là pour Firefox (en attente de validation par Mozilla…). La procédure pour publier sur les Web Store respectifs est plutôt simple et pourra faire l’objet d’un autre article si besoin.

ChatGPT o3-mini-high : c’est plus long, mais ça finit par marcher

Nous essayons de faire pareil avec ChatGPT, en version o3-mini-high, un modèle adapté au code selon OpenAI avec du « raisonnement ».

La même question que Claude lui demande neuf secondes de réflexion pour arriver à deux propositions : « Créer une petite extension Chrome qui décoche automatiquement la case. Utiliser un user script (via Tampermonkey/Violentmonkey) si tu préfères quelque chose de plus simple à installer ».

Nous prenons la première option (nous avons dès le début demandé une extension), mais cela ne marche pas. La raison est simple, en partie écrite en commentaire dans le code : « Il faut repérer son sélecteur exact. On suppose ici que c’est un input de type checkbox ayant un certain attribut name ou ID. À toi de l'adapter si nécessaire ».

L’approche de Claude est plus maligne : l’extension va « sélectionner tous les éléments input de type checkbox » et si besoin « cibler directement par le label proche » avec ceux comprenant le mot clé « hébergement ». La méthode est efficace.

Avec ChatGPT, il faudra quelques prompts et minutes de plus pour arriver à une extension fonctionnelle. À la question « Ça ne marche pas. Tu ne peux pas aller regarder le code source de la page pour trouver tout seul le bon attribut à changer ? », l’IA prendra 84 secondes de réflexion pour donner la réponse suivante :

« Malheureusement, ChatGPT n’a pas la possibilité d’« ouvrir les DevTools » pour inspecter la page comme tu le ferais dans ton navigateur. En revanche, on peut contourner le problème : plutôt que de cibler un attribut précis (qui peut changer), on peut s’appuyer sur le texte du label « Rechercher un hébergement » ».

Un recadrage plus tard, ça marche !

L’IA part ensuite toute seule sur sa solution à base de Tampermonkey ou Violentmonkey. On la remet dans le droit chemin d’un coup de « mais je t’ai demandé une extension ! ». Après 26 secondes de réflexion :

« Pas de souci ! Voici une extension Chrome (manifest v3) qui décoche automatiquement la case « Rechercher un hébergement » sur Trainline, en se basant sur le texte du label. Elle inclut également un MutationObserver pour gérer les éventuelles modifications dynamiques (changement de dates, etc.) ».

Cette fois, ça marche.

Nettoyer une URL : simple, basique, quelques lignes de code

Pour notre seconde expérience, nous restons sur Claude, avec une demande assez simple là encore : « Je voudrais une extension qui supprime automatiquement tout ce qu’il y a après un ? dans une URL ».

Le cœur de l’extension ne fait que quelques lignes :

chrome.webNavigation.onBeforeNavigate.addListener(function(details) {
if (details.frameId !== 0) return;
const url = new URL(details.url);
// Si l'URL contient un point d'interrogation
if (url.search) {
// Créer une nouvelle URL sans les paramètres de requête
const cleanUrl = url.origin + url.pathname;
// Rediriger vers l'URL nettoyée
chrome.tabs.update(details.tabId, { url: cleanUrl });
} });

On corse le jeu avec des liens qui cachent leurs paramètres

Cela marche bien, mais uniquement sur des URL contenant un « ? ». Logique, c’était notre demande (il faut faire attention à ce que l’on veut dans la vie). Or cet élément est parfois « caché » dans l’URL, notamment avec des liens sponsorisés et/ou trackés. Nous demandons à Claude ce que l’on peut faire dans ce genre de cas avec un exemple :

« ok, mais des fois j’ai des URL sous la forme https://www.dealabs.com/visit/threadmain/3012916
et quand j’arrive sur le site, c’est ça : Bosch Tournevis à cliquet à embout (mécanisme à 36 dents porte-embout magnétique poignée Softgrip) : Amazon.fr: Bricolage tu ne peux rien y faire ?
 »

Plein de bonne volonté, l’IA générative répond par l’affirmative :

« Vous avez raison, il s'agit d'un cas différent. Dans les URL de redirection comme celle de Dealabs que vous mentionnez, supprimer ce qui est après le point d'interrogation ne résoudrait pas le problème car l'URL ne contient pas de point d'interrogation.
Je vais modifier l'extension pour qu'elle puisse extraire et afficher le titre de la page de destination, ce qui vous permettra de voir la vraie destination avant d'y accéder
 ».

La suite va vous surprendre, et on tombe en plein dans les problèmes que peuvent rencontrer les IA.

Quand le protagoniste de Tenet roule en De Lorean

On vous passe les lignes de codes, pour aller directement à l’explication du fonctionnement de l’extension : « Après avoir visité une URL de redirection comme celle de Dealabs, vous pourrez cliquer sur l'icône de l'extension pour voir le titre et l'URL finale, ce qui vous permettra de savoir à l'avance vers quel produit vous êtes redirigé ».

Quand nous signalons le problème temporel à Claude – « Heu… Comment après avoir visité une URL je peux savoir à l’avance vers quel produit je suis redirigé ? » –, l’IA reconnait avoir « fait une erreur de logique. En effet, si vous avez déjà visité l'URL, vous ne pouvez pas savoir "à l'avance" où elle mène puisque vous y êtes déjà allé ». Jusque-là, cela ne lui paraissait pas étrange.

Ça marche pas, vérifie, ça marche pas, vérifie…

On vous épargne la fin de la conservation, mais elle ressemblait à cela. Claude propose des changements qui ne fonctionnent pas. Nous demandons de vérifier nos fichiers (en les fournissant de nouveau pour que l’IA vérifie que nous avons bien appliqué des changements). Ça ne marche pas correctement. Nous demandons de vérifier…

Au final, on se retrouve avec une extension qui marche à moitié pour simplement prévisualiser un lien et qui fait… plus de 200 lignes de code. Pour s’en sortir, l’IA sort complétement du cadre général de notre but premier pour se concentrer sur notre exemple (Dealabs). Dans le code, on peut en effet lire des parties pour « traiter le cas spécifique de Dealabs ».

Une aide efficace, mais attention aux limites

Entre l’extension pour signaler les sites utilisant de l’IA générative pour publier des contenus, la mise en place d’un site de GenAI automatisé, un outil pour comparer les fournisseurs d’électricité en fonction de votre consommation et d’autres surprises à venir, nous avons largement utilisé les IA génératives pour leur faire pisser du code. Voici ce que l’on en retient comme bébé développeur tout ce qu’il y a de plus amateur.

En général, si le prompt du début est assez simple, la réponse est rapide, structurée et efficace. Plus la taille des programmes augmente (en nombre de lignes de code par exemple), plus la durée de vie d’une conversation sera réduite. D’ailleurs, Claude vous affiche régulièrement une alerte : « Les longues conversations vous permettent d’atteindre plus rapidement vos limites d’utilisation ».

Dans notre cas, nous sommes très peu acteurs des modifications dans le code. On demande un programme, puis des améliorations, des changements. Si cela ne fonctionne pas, nous redonnons à l’IA l’ensemble des fichiers pour qu’elle vérifie. Bien évidemment, il nous arrive de mettre les mains dans le cambouis quand c’est nécessaire.

Plus nous avançons dans nos programmes, plus les limites sont rapidement atteintes. Pour de petits projets, Claude et consorts sont très performants, surtout pour ceux qui n’y connaissent pas grand-chose. Mais pour des projets de plus grande envergure (avec plusieurs centaines de lignes et plusieurs fichiers), la situation se complique rapidement.

Avec notre extension pour les sites GenAI, on arrive un peu à la limite des modèles. Nous devons souvent recommencer une nouvelle conversation, redonner tous les fichiers et ainsi de suite. Avec la case à cocher sur Trainline, nous avons tenté de donner à ChatGPT le code source de la page (il aurait identifié tout de suite la checkbox, mais c’était trop long de 9 % par rapport à ce que l’IA accepte en entrée).

Même chose avec une nouvelle extension pour surveiller les domaines tiers et requêtes externes des sites (et prendre peur quand on voit le nombre de demandes), dont nous allons parler dès demain.

Parfois, c’est têtu et fourbe une IA

Nous avons également remarqué que les IA génératives ont parfois tendance à garder longtemps une idée en tête, même si on lui demande de faire autrement. C’est arrivé plusieurs fois qu’elle rajoute son idée au détour d’une autre modification.

Elle supprime aussi parfois des pans entiers de code. Nous sommes, par exemple, passés d’un fichier de + 700 lignes à moins de 150 lignes sans que cela lui pose de problème, alors que nous voulions simplement afficher une colonne de trois éléments sous la forme d’une ligne (de trois éléments aussi). Autre problème : si la demande est vague, elle a tendance à partir dans tous les sens et si, au contraire, elle est trop précise avec des exemples, alors elle risque de se concentrer sur ces cas particuliers.

Lancez-vous !

Bref, l’IA générative pour écrire des extensions pour les navigateurs, c'est un formidable outil, à condition de bien savoir s’en servir et de garder un œil sur ses actions. Toujours est-il que si vous avez une idée d’une fonction simple, n’hésitez pas à demander aux IA génératives ce qu’elles peuvent faire.

Commentaires (11)

votre avatar
Déjà fait, sans l'IA jamais je n'aurais pu faire mon extension ^^

github.com GitHub (j'en profite)
votre avatar
J'avais tenté sur ChatGPT de faire une extension qui ouvre un nouvel onglet après X minutes d'inactivité, ça avait bien commencé mais l'évolution était plus compliquée, pr manque de temps j'ai laissé tomber.

Avec les évolutions apportées depuis aux modèles, ça devrait être plus simple aujourd'hui.
votre avatar
Merci pour l'article, c'est intéressant, et je confirme plusieurs points. Je me suis lancé dans l'analyse des noms de domaines .fr de l'année de 2024 (cf mon commentaire sur le bilan 2023 de l'Afnic)

J'ai utilisé l'assistant code de Kagi pour un script d'analyse (actuellement Claude 3.7 Sonnet aussi, quand j'ai commencé je pense que c'était 3.5)

Au début ça va, et plus je lui demandais de rajouter des fonctions, soit il cassait tout, soit ça ne fonctionnait pas.
Parfois, il était complètement perdu, du coup je repartais sur une base saine :
"Tiens, voilà la dernière version fonctionnelle du script , oublie tout ce que je t'ai demandé, et repars sur cette base, en ajoutant la fonction, l'analyse [...]"

L'Afnic va sortir prochainement son bilan, j'aurai quelques infos interessantes à signaler 🍿
votre avatar
Effectivement, cette manière de faire me rappelle étrangement quelque chose ^^
J’ai aussi remarqué que des fois repartir d’une feuille vierge, avec un meilleur prompt dès le début (une fois que l’on sait un peu mieux ou aller) est assez efficace pour un code optimisé:chinois:
votre avatar
Yep, la qualité du prompt joue beaucoup. D'ailleurs j'ai appris au fur et à mesure à écrire de meilleurs prompts
votre avatar
On vous donne un exemple avec Trainline
Facile, la solution est d’utiliser 12train.com :D
votre avatar
J'utilise régulièrement ChatGPT pour générer du code pour des applications simples (genre traitement rapide, analyse de données..). Mais globalement, il me faut au moins 5 prompts pour obtenir l'ensemble des informations (exemple) pour mon programme final.
C'est un outil puissant plus intéressant que la recherche d'un tuto via le moteur de recherche, permettant de défricher l'ensemble de solution possible au début d'un projet.
ce qui me fait penser suis-je un mauvais dev?
votre avatar
et là pour Firefox (en attente de validation par Mozilla…)
Si vous avez suivi un lien depuis un autre site pour une extension ou un thème, cet élément n’est plus disponible.
Elle n'a pas encore été publiée ? Ou elle a été refusée ? Je ne vois pas de màj dans l'article.
votre avatar
Le site trainline ne fonctionnant pas, je ne peux pas tester; mais logiquement le code est simplement :
const caseACocher = document.querySelector("input[type=checkbox]#bookingPromo");
caseACocher.checked = false;
que l'on peut même réduire à :
document.querySelector("#bookingPromo").checked = false;
de l'aperçu de code que je vois on a des 10aines de lignes absolument inutiles.
L'avantage de se passer d'IA, est que ça permet de comprendre ce qu'on fait afin d'être autonome la fois suivante.
Là, Claude propose exactement ce qu'il faut éviter de coder :
- Se baser sur des libellés plutôt que l'id unique : le libellé peut changer à tout moment
- faire des boucles inutiles : rend le code complexe, est source d'erreur, et est plus lent
- simuler des clics au lieu de passer par le DOM...

Peu de chance qu'un humain fasse spontanément ce genre de codes (en tout cas pas toutes les erreurs d'un coup !), on se retrouve avec une première version inutilement complexer, peu fiable et peu maintenable.

Donc ça fait le job, mais ça fait le job très mal...
votre avatar
Là, Claude propose exactement ce qu'il faut éviter de coder :
- Se baser sur des libellés plutôt que l'id unique : le libellé peut changer à tout moment
- faire des boucles inutiles : rend le code complexe, est source d'erreur, et est plus lent
- simuler des clics au lieu de passer par le DOM...
Le seul point où je suis d'accord avec toi, c'est le premier : se baser sur le libellé peut être une source d'erreur, et il est préférable d'utiliser autre chose lorsque cela est possible. Surtout que la solution proposée est sensible à la case et aux accents.

Pour le reste, il faut que la case à cocher soit unique et ait un ID (ce qui n'est pas toujours le cas). Qui plus ait, il faut que l'ID soit réellement unique (combien de fois j'ai vu des sites avec des éléments ayant le même ID...). Donc une boucle n'est pas forcément déconnant.

Ensuite, pour simuler un clic qui correspond à un événement utilisateur, il vaut mieux réellement faire un appel à click() que de modifier le DOM directement. Avec le click(), les mêmes event handler seront déclenchés, comme si un utilisateur avait cliqué de lui-même, contrairement à la modification direct du DOM. En fonction de comment a été développé le site, cela peut changer radicalement les choses.
Donc ça fait le job, mais ça fait le job très mal...
Du coup, j'en tire une conclusion différente. Il fait le job, et se débrouille pas trop mal. Il propose une solution assez robuste qui marchera dans bien des cas, tout en tolérant certaines erreurs potentielles de conception au niveau du site.

[edit]
Précision : ça fait plutôt bien le job dans le cadre d'une extension qui modifie le code d'un site tiers.

Ce serait un code du dev responsable du site qui doive interagir avec ledit site, que je préférerai largement ton approche ;)

[Tuto] Développer facilement des extensions avec une intelligence artificielle

  • Un premier exemple simple : décocher automatiquement une case

  • Claude 3.7 Sonnet : un prompt, une réponse, ça marche

  • Comment tester et installer son extension

  • ChatGPT o3-mini-high : c’est plus long, mais ça finit par marcher

  • Un recadrage plus tard, ça marche !

  • Nettoyer une URL : simple, basique, quelques lignes de code

  • On corse le jeu avec des liens qui cachent leurs paramètres

  • Quand le protagoniste de Tenet roule en De Lorean

  • Ça marche pas, vérifie, ça marche pas, vérifie…

  • Une aide efficace, mais attention aux limites

  • Parfois, c’est têtu et fourbe une IA

  • Lancez-vous !

Fermer