OpenCode ******** .. include:: ../BoutonGoogleTrad.rst Présentation ============ Programmation agentique ----------------------- Nous présentons seulement l'exemple d'OpenAI, les autres fournisseurs ayant des approches similaires. Il existe trois grandes façons de travailler avec l'IA : - **Le Chat** accessible depuis le portail :cpp:`https://chatgpt.com/`. On dialogue dans cette interface pour concevoir, modifier, améliorer son code, résoudre un problème ou préparer un projet. - **L'application Codex**. Même si son interface ressemble à celle d’un chat, l’application Codex va beaucoup plus loin. Installée sur votre machine, elle peut accéder directement au répertoire de votre projet. L’IA peut ainsi réaliser des tâches de programmation complexes, en faisant travailler ensemble plusieurs agents spécialisés. C’est ce qu’on appelle la **programmation agentique**. - **Codex CLI** (Command Line Interface). Cette approche permet de travailler avec l'IA dans le terminal ou avec des scripts. On peut ainsi automatiser un pipelines complet. Vous avez peut-être déjà utilisé un chat IA pour générer du code. Mais cette méthode impose de nombreux allers-retours : - Poser une question dans le Chat - Copier le code proposé dans votre environnement de développement - Copier les messages d’erreur dans la console - Coller les messages dans le chat de l'IA, - Attendre sa réponse - Copier sa correction et la transférer dans le code Même si cette approche fait gagner du temps, elle reste fastidieuse. La programmation agentique va beaucoup plus loin. Ainsi, une simple demande va déclencher une série d’actions réalisées automatiquement en coordonnant plusieurs agents spécialisés : - Analyse le code - Recherche d'une solution - Modifications du code - Création des tests - Lancement de la compilation, analyse des logs et tentative de retraits des erreurs - Lancement de l'application - Vérification du comportement attendu - Si besoin, apporter des modifications et effectuer une nouvelle itération Ainsi, l'IA agentique peut effectuer toutes ces itérations sans intervention du programmeur. Activer GIT =========== Pour que toutes les fonctionnalités d'OpenCode soient disponibles, il faut que le répertoire de travail soit configuré comme un dépôt GIT. Répertoire ---------- - Créez un répertoire :cpp:`AgenticProject` sur votre bureau - Créez un sous répertoire :cpp:`PICTOR` - Décompressez le projet transmis par mail à l'intérieur .. image:: dir2.png GIT install ----------- Il faut que GIT soit installé sur votre machine et qu'il soit disponible dans le path. - Lancez une fenêtre de commande :cpp:`cmd.exe` et tappez : .. code-block:: bash git --version .. image:: git.png - Si la commande ne s'exécute pas, installez git et faites en sorte qu'il soit accessible dans la fenêtre de commande GIT local --------- Nous allons créer un dépot git local dans le répertoire de projet. - Ouvrez une fenêtre de commande :cpp:`cmd.exe` - Placez-vous dans le dossier du projet .. code-block:: bash cd %USERPROFILE%\Desktop\AgenticProject c: dir .. image:: dir.png .. warning:: Le répertoire doit contenir le répertoire du projet :cpp:`PICTOR`. - Si tout fonctionne, dans la fenêtre de commande, lancez la série de commandes suivantes pour initialiser le dépôt GIT local : .. code-block:: bash :: clear screen cls :: Initialize a local Git repository git init :: Configure Git for this project git config user.name "Developpeur" git config user.email "dev@localhost" :: Create .gitignore to exclude the BUILD directory echo /PICTOR/BUILD/ > .gitignore :: Add project files (excluding BUILD) git add . :: Create the initial commit git commit -m "Initial version" :: Check Git status git status - Git status doit retourner ce message : .. image:: gitstatus.png OpenCode ======== Plutôt que de travailler avec un outil et une interface propriétaire, nous avons choisi une solution open source : OpenCode, ceci pour plusieurs raisons : - Multi-modèles : OpenCode peut travailler avec GPT, Claude, Gemini - Interface simplifiée et indépendante de l'entreprise choisie - Flexible : utilisable en terminal, en plugin ou en CLI - Peut fonctionner avec des IA 100% locale grâce à des modèles open-weight Installation ------------ - Allez sur la page : :cpp:`https://opencode.ai/download` - Recherchez la version :cpp:`Opencode Desktop` - Téléchargez et installez le - Lancez l'application .. image:: run.png :scale: 80% :class: with-border L'interface ----------- Dans l'interface, vous allez trouver deux vues : - :cpp:`HOME` : Accueil d'OpenCode listant les projets en cours et les sessions récentes. .. image:: home.png :class: with-border - :cpp:`SESSION` : Espace de travail où l'on discute avec l'IA et où l'on consulte les modifications de fichiers. .. image:: session.png :class: with-border Dans OpenCode Desktop : - Un projet peut posséder plusieurs sessions - Une session appartient à un seul projet - Chaque session correspond à une conversation de travail avec l'IA Nouveau project --------------- - Activez la vue :cpp:`HOME` dans OpenCode - Cliquez sur :cpp:`Add Project` .. image:: addproject.png :class: with-border - Sélectionnez le répertoire :cpp:`AgenticProject` - Le projet :cpp:`AgenticProject` est maintenant créé - Positionnez le curseur de la souris sur la droite de son nom et cliquez sur les ... - Choisissez alors l'option : :cpp:`New session` .. image:: newsession.png :class: with-border Si tout se passe correctement, OpenCode va détecter le dépôt git local : .. image:: local.png :class: with-border Configuration du modèle d'IA ============================ - Dans l'interface d'une session, cliquez sur le nom de l'IA active : .. image:: modele.png :scale: 80% :class: with-border - Dans la liste, sélectionnez votre fournisseur d'IA : .. image:: selectmodel.png :class: with-border .. warning:: Nous continuons la présentation avec :cpp:`OpenAI - ChatGPT`. Les démarches pour une autre IA sont similaires. - Sélectionnez ensuite :cpp:`Sign in with ChatGPT` .. image:: link.png :class: with-border - Authentifiez-vous - Autorisez l'association entre :cpp:`OpenCode` et votre compte :cpp:`ChatGPT` .. image:: connected.png :class: with-border - Retournez dans l'application OpenCode - OpenCode vous demande de sélectionner un modèle en particulier : .. panels:: :column: col-lg-10 p-2 Sélectionnez le modèle **GPT-6.1 SOL** .. warning:: Ce choix est très important. Si vous prenez le modèle le plus puissant (ASTRA en nov 2026), vos crédits vont fondre comme neige au soleil. Il faut donc faire attention au modèle choisi. Pour OpenAI, la version :cpp:`6 SOL` constitue un bon équilibre temps/performance/crédits. OpenCode propose plusieurs niveaux d'effort de raisonnement :cpp:`Low, Medium, High, Xhigh, Max` qui déterminent la profondeur de l'analyse effectuée par le modèle d'IA. Plus le niveau est élevé, plus le modèle peut consacrer de ressources à la résolution de problèmes complexes, au prix d'un temps de réponse et d'une consommation de tokens potentiellement plus importants. Par rapport aux besoins de notre projet, le niveau :cpp:`Medium` offre généralement un bon compromis entre rapidité et qualité. - Déplacez la souris sur l'icône :cpp:`Default` pour faire apparaître les différents niveaux de raisonnement : .. image:: medium.png :class: with-border .. panels:: :column: col-lg-10 p-2 Sélectionnez le niveau **MEDIUM** La consommation de tokens ========================= Evitez les modèles chers ------------------------ Pour éviter la sélection d'un modèle cher par mégarde, nous vous conseillons de désactiver d'office les modèles les plus coûteux. - Cliquez sur :cpp:`GPT-6.1 Sol` - Sélectionnez :cpp:`Manage models` .. image:: managemod.png :class: with-border - Désactivez les modèles :cpp:`GPT-5` - Désactivez les modèles :cpp:`Astra` - Désactivez les modèles :cpp:`fast` Il doit vous rester Luna, Sol 6 et Sol 6.1 : .. image:: managemodel.png :scale: 80% Pour mieux comprendre les différentes gammes de modèles de :cpp:`ChatGPT`, fin 2026, voici leurs tarifications pour un million de tokens en entrée ou en sortie : .. list-table:: Comparatif des modèles GPT-6 :header-rows: 1 :widths: 28 22 22 28 :align: center * - Critère - **Luna** - **Sol** - **Astra** * - Intelligence - Bonne - Très élevée - Maximale * - Vitesse - Très rapide - Rapide - Plus lent sur les tâches complexes * - Programmation C++ - Bonne - Excellente - Excellente * - Débogage complexe - Correct - Très bon - Le plus performant * - Programmation agentique - Tâches simples - Projets complexes - Projets très exigeants * - Prix API (entrée) - 0,10 $ - 2 $ - 10 $ * - Prix API (sortie) - 0,50 $ - 10 $ - 50 $ * - Contexte maximal - 1,05 M - 1,05 M - 1,05 M Monitorer votre consommation ---------------------------- Les fournisseurs d’IA pour la programmation agentique imposent généralement des limites de consommation de tokens, par heure ou par jour. Après vos premières requêtes, surveillez votre consommation pour vérifier que le modèle choisi est adapté. Dans notre projet, une requête agentique prend en moyenne 1 à 3 minutes. Le projet nécessite environ une cinquantaine requêtes. Ainsi, si vos 3 premières requêtes consomment 50 % de votre quota, le modèle s'avère trop gourmand. Choisissez-en un plus économe pour éviter d’atteindre la limite en 20 minutes. Pour accéder au monitoring de votre consommation : - Dans l'interface d'OpenCode, cliquez sur le nom du modèle : :cpp:`GPT6-Sol` - Cliquez ensuite sur :cpp:`Manage usage` .. image:: manageusage.png :class: with-border L'interface web de ChatGPT présente deux indicateurs : - La % restant sur une fenêtre de 5h - Le % restant sur une fenêtre d'une semaine .. image:: limits.png :class: with-border Versionning =========== Mise en place ------------- Effectuons plusieurs demandes à l'IA : .. panels:: :column: col-lg-10 p-2 **OpenCode** : Ajoute à la racine du projet un fichier :cpp:`toto.txt` contenant les nombres premiers de 1 à 100 .. panels:: :column: col-lg-10 p-2 **Réponse** (13 s) : Le fichier :cpp:`toto.txt` a été ajouté à la racine du projet avec les 25 nombres premiers de 1 à 100 - Requête suivante : .. panels:: :column: col-lg-10 p-2 **OpenCode** : Change le nom du fichier :cpp:`toto.txt` par le plus grand nombre contenu dans ce fichier .. panels:: :column: col-lg-10 p-2 **Réponse** (15 s) : Le fichier :cpp:`toto.txt` a été renommé en :cpp:`97.txt`, car 97 est le plus grand nombre qu’il contient. - Requête suivante : .. panels:: :column: col-lg-10 p-2 **OpenCode** : Ajoute "Bonjour" au début du fichier :cpp:`97.txt` et retire le dernier chiffre qu'il contient .. panels:: :column: col-lg-10 p-2 **Réponse** (10 s) : « Bonjour » a été ajouté au début de :cpp:`97.txt`, et le dernier nombre, 97, a été retiré. Diff ---- Dans la session courante, cherchez le groupe d'icônes en haut à droite de l'interface : .. image:: diff.png :class: with-border - Cliquez sur l'icône ouvrant le volet de droite - Dans le volet qui apparaît, cliquez sur :cpp:`Git changes` et sélectionnez :cpp:`Last turn changes` : .. image:: lastturn.png :class: with-border - Maintenant, sur la droite, est affiché la différence de contenu du fichier :cpp:`97.txt` - Les lignes ajoutées apparaissent en vert sur la fenêtre de droite - Les lignes retirées apparaissent en rouge sur la fenêtre de gauche .. image:: diff2.png :class: with-border .. warning:: Un :cpp:`diff` compare les fichiers ligne par ligne. La ligne « Bonjour », qui a été ajoutée, apparaît donc en vert. En revanche, même si seul le nombre 97 a été supprimé, :cpp:`diff` considère que toute la ligne des numéros a été remplacée : l'ancienne version apparaît en rouge à gauche et la nouvelle en vert à droite. Undo ---- - Pour annuler la dernière demande, tappez :cpp:`/undo` dans la fenêtre de session : .. image:: undo.png :class: with-border - Dans le répertoire de projet, vérifiez que le fichier :cpp:`97.txt` ne contient plus la ligne « Bonjour » - Tappez une deuxième fois :cpp:`/undo` - Dans le répertoire de projet, vérifiez que le fichier :cpp:`97.txt` a disparu et que le fichier :cpp:`toto.txt` est réapparu La commande :cpp:`undo` est fonctionnelle et vous permettra de revenir en arrière si le résultat produit par l'IA ne vous convient pas.