Published: 2025-01-04
L'envie d'essayer les LLM pour coder m'est venue de la lecture du blog de Simon Willison. Simon est l'auteur de nombreux outils, en particulier datasette, un formidable couteau suisse pour l'exploration de données. Il s'intéresse à l'usage des LLM pour l'écriture de code depuis quelques années déjà, et publie régulièrement des articles sur le sujet (un exemple ici).
Quand on commence à se frotter à l'écriture de code accompagné d'un LLM, on s'aperçoit vite que les interfaces utilisateur génériques des grands modèles (ChatGPT, Claude...) se prêtent bien à l'écriture de codes courts from scratch mais sont mal adaptées à un projet existant dans lequel il faut fournir et "garder en tête" un contexte --par exemple les dépendances du projet, son architecture générale etc.-- et s'y référer par la suite (mais les choses changent vite ! C'était en tout cas la situation dans laquelle j'ai commencé).
Alors, comment faire ?
Aider is AI pair programming in your terminal
-- https://aider.chat
Aider est un outil libre pour programmer à l'aide de LLM. Outre l'accès aux modèles (locaux ou distants), il propose un environnement qui permet de les utiliser efficacement pour programmer:
/ask
qui se contentera de répondre à une question sans déclencher d'éditionpaste
permettant par exemple de glisser une capture d'écran
d'une interface utilisateur que l'on souhaite modifier/add
est à utiliser avec parcimonie, uniquement pour ajouter
les fichiers dont on pense qu'ils doivent être modifiés (sinon, utiliser /readonly
, de façon parcimonieuse aussi)auto-commits: false
au fichier .aider.conf.yml
; parfois le modèle (et le programmeur...)
s'enferrent dans une voie sans issue, et au début, il ne faut surtout pas hésiter à jeter le code produit, surtout si après
quelques itérations infructueuses sur un même sous-problème, le modèle propose des solutions complexes; c'est souvent signe
qu'il est temps d'essayer une autre approche.dune-project
et pas dans un fichier .opam
d'un projet ocaml...); si on appelle ce fichier CONVENTIONS.md
,
il suffit de donner la directive read: CONVENTIONS.md
dans le fichier .aider.conf.yml
pour qu'il soit lu au démarrage.Pour utiliser différents LLM sans créer un compte par fournisseur (au rythme de sortie des nouveautés, c'est très appréciable), on peut utiliser Openrouter, qui donne accès à de nombreux modèles moyennant des frais de paiement et une commission à l'usage.
Pour l'utiliser avec Aider, il suffit d'exporter la clé d'API OPENROUTER_API_KEY
et d'utiliser un préfixe pour le nom des modèles.
Par exemple, pour utiliser claude 3.5-sonnet avec aider, dans .aider.conf.yml
on pourra déclarer model: openrouter/anthropic/claude-3.5-sonnet
;
et pour passer sur deepseek chat, on pourra utiliser la même clé d'API et changer simplement la configuration pour model: openrouter/deepseek/deepseek-chat
(note: Aider peut changer de modèle à la volée, c'est parfois pratique pour faire franchir une étape dans l'écriture d'une fonction si un modèle particulier
s'enferre...)
Les LLM ont une interface a priori très simple (compléter un texte), mais cette simplicité rend en fait leur utilisation difficile. Des outils spécialisés permettent de guider ce processus dans le cadre de l'écriture de code. L'important, cela dit, est d'expérimenter et de trouver un environnement qui nous convienne -- pourquoi pas aider ?