Création de script avec ChatGPT

Hier matin, je cherchais a créer facilement des enregistrements audio en utilisant le Dictaphone intégré de MacOS.
A côté, j’utilise le logiciel HammerSpoon pour créer mes propres raccourcis. Je sais qu’il existe aussi “Raccourcis” ou “Automator” mais j’utilise ce logiciel depuis quelques temps et ça me va très bien. J’imagine que ce que je décris ci-dessous peut aussi s’appliquer pour ces deux logiciels.

Le besoin

Je souhaitais donc créer deux raccourcis clavier : un pour ouvrir le logiciel et démarrer un enregistrement, et un deuxième pour stopper l’enregistrement. C’est totalement dans les cordes de ce qu’il est possible de faire avec HammerSpoon, car on peut lui dire de mapper des raccourcis claviers à des actions systèmes. Par exemple, quand je presse la combinaisons CTRL + ALT + CMD + R, ca peut lancer un script qui ouvrira une application.

HammerSpoon utilise le language de script « Lua » pour créer des scripts. Je ne suis pas du tout familier avec ce language. Bien que je l’imagine facile à apprendre, je n’avais pas le temps pour décortiquer la documentation d’HammerSpoon ainsi que la documentation de Lua pour savoir comment ouvrir l’application Dictaphone.

C’est le cas d’usage parfait que je cherchais pour explorer un peut plus l’aide que peut m’apporter ChatGPT. Je suis donc aller sur l’interface, et je lui ai demandé de me générer le code pour faire ce que j’ai expliqué ci-dessus.

Exploration avec ChatGPT

Ce que je lui ai demandé :

Using HammerSpoon for Mac, create me a script that allow to launch a new recording of the dictaphone using a keyboard shortcut, and another script that allows me to stop the current recording using another keyboard shortcut

local mash = {"cmd", "alt", "ctrl"} -- Modifier keys for the shortcut

-- Function to start a new recording
hs.hotkey.bind(mash, "R", function() -- Replace 'R' with your desired key for recording
    hs.osascript.applescript([[
        tell application "Dictaphone"
            activate
            start recording
        end tell
    ]])
end)

-- Function to stop the recording
hs.hotkey.bind(mash, "S", function() -- Replace 'S' with your desired key for stopping
    hs.osascript.applescript([[
        tell application "Dictaphone"
            stop recording
            -- Optionally, you can add commands here to save the file or do other actions
        end tell
    ]])
end)

Pour un premier jet, c’est vraiment bien, c’est exactement ce que je souhaite. Je copie / colle le tout dans la config pour tester, mais rien ne marche.
Je demande donc à ChatGPT s’il a une idée de pourquoi ca ne marche pas, et il me propose tout de suite une solution qui me paraît juste :

Ensure that the name of the application is correctly specified in the script. The name should match exactly how it appears in your Applications folder. For example, if the application is actually named « Voice Memos » instead of « Dictaphone, » you should change the script accordingly.

En effet, il a repris le mot “Dictaphone”, mais l’application d’Apple est nommée VoiceMemos en interne. C’est ce qu’il faut utiliser dans le script.

Je réessaie mais toujours rien. En supprimant start recording l’application se lance. Je demande à ChatGPT pourquoi, il me répond qu’en effet ce mot clé marche en général avec applescript mais peut-être pas dans le cas de VoiceMemos :

The standard AppleScript commands like start recording and stop recording may not work directly with the « Voice Memos » app as it might not support these scripting commands. You may need to emulate user interactions (like clicking buttons) if direct commands are not available.

Suite à cela je lui dit directement de m’écrire le code pour déclencher le raccourci clavier CMD + N.
Une fois de plus, il s’exécute et le code généré me semble correct à première vue :

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "R", function()
    hs.osascript.applescript([[
        tell application "VoiceMemos"
            activate
        end tell
        tell application "System Events"
            keystroke "n" using {command down}
        end tell
    ]])
end)

Seul soucis, le CMD + N ne semble pas être pris en compte. Mais je vois qu’il y a un délai entre le moment ou le script est exécuté et le moment ou l’application est ouverte. J’imagine que le script exécute la commande avant que le Dictaphone ne soit prêt à recevoir le raccourci.
Je valide cette hypothèse en demandant à GPT de me donner le code pour ajouter un délai avant de lancer le raccourci :

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "R", function()
    hs.osascript.applescript([[
        tell application "VoiceMemos"
            activate
        end tell
        delay 1 -- Delays for 1 second; adjust the number as needed
        tell application "System Events"
            keystroke "n" using {command down}
        end tell
    ]])
end)

delay 1. Tout simplement.
Mais surement plus rapide que si j’avais du le chercher.

Au final, j’ai encore du modifier un peu le code pour arrêter l’enregistrement, mais avec le code que j’avais entre les mains c’était facile d’adapter le reste du code à mon besoin.

L’Intelligence Artificielle comme accélérateur

Pour moi dans ce cas précis, l’intelligence artificielle à été un accélérateur de développement. Ça m’a permis en 5 minutes, avec un language que je ne connaissais pas, d’arriver à ce que je souhaitais avoir. Certes, le besoin était très simple, mais je pense que si j’avais du le faire moi même j’aurais du chercher plus d’informations pour arriver au même résultat.

Ce n’est pas comme si je souhaitais connaître Lua ou devenir plus prolifique avec ce language, je cherchais simplement à aller au plus vite sans passer une heure dessus. Si ca avait pris autant de temps je n’aurais même pas commencé.

J’ai vraiment l’impression d’avoir été aidé par ChatGPT. D’avoir eu un assistant qui m’a fait mon travail plus rapidement que je n’aurais jamais pu le faire.

J’ai du l’aiguiller sur peu de points. Par exemple concernant le délai, j’ai tout de suite pensé à ce cas de figure, et j’ai demandé à ChatGPT de m’adapter le code en conséquence.
Ou pour lui dire de déclencher le raccourci sur l’application Dictaphone, par exemple.

Retour d’expérience

Cette première expérience me donne plus de visibilité sur ce qu’il est possible de faire dans une petite mesure avec ChatGPT. Pour ce genre de petites tâche ou je n’ai pas la connaissance nécessaire mais ou faire des recherches ne serait pas rentable, c’est parfait.

Je ne suis pas encore arrivé à l’utiliser sur des plus grosses tâches de développement, j’ai trouvé que dans ces cas-là, c’était plus une gêne car j’avais une idée précise de ce que je voulais, mais je pense que c’était mes formulations qui étaient trop généralistes.
J’ai l’impression que la bonne recette réside dans le fait de bien découper les tâches en des petites unités et d’arriver à bien les expliquer de la manière la plus claire possible. De cette manière, je pense que ChatGPT résonne le mieux. C’est d’ailleurs ce que certains papiers remontaient : When do you need Chain-of-Thought Prompting for ChatGPT? En lui disant de réfléchir “pas à pas” les résulats étaient largement meilleur.

Une autre piste de réflexion, est aussi dans la mise en place des tests unitaires. Ils prennent souvent du temps a mettre en place, car il y a beaucoup de code qu’il faut préparer pour avoir les bonnes assertions. Utiliser l’IA permet d’accélérer la mise en place de ces parties de code sans grande valeur ajouté mais important pour le bon fonctionnement des tests.

Et vous, avez-vous déjà utilisé ChatGPT comme accélérateur ?


Commentaires

Une réponse à “Création de script avec ChatGPT”

  1. Je partage ta conclusion, c’est très bien pour réaliser des petits scripts dans un langage qu’on ne maitrise pas vraiment.
    Pour ma part, j’ai réaliser quelques petits scripts shell (pour écrire dans un petit journal par exemple) et ça m’a permis de vraiment d’économiser du temps.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *