Programmation en binôme avec l'IA et IBM Bob

Utilise Bob comme assistant de programmation en binôme avec l'IA pour construire une API To-Do avec FastAPI — des exigences au plan, au code généré, aux tests et à la documentation.

Avec la programmation en binôme par IA, tu construis des logiciels aux côtés d'un assistant qui t'aide à chaque étape — planification, codage, tests et documentation — plutôt que d'un outil qui se contente d'autocompléter des lignes. Dans ce tutoriel, tu travailles en binôme avec IBM Bob pour construire une API To-Do avec FastAPI à partir d'un ensemble d'exigences.

Tu pars des exigences et tu avances à travers un plan revu, du code généré, une explication de l'implémentation, des améliorations de la qualité du code, des tests unitaires et de la documentation technique. Le magasin de données est une liste Python en mémoire, donc aucune base de données n'est à configurer.

Ce tutoriel s'adresse aux développeurs qui connaissent les bases de Python et des API REST et qui souhaitent un workflow de révision réutilisable pour construire des logiciels avec un assistant IA. Aucune expérience avec FastAPI n'est requise.

Ce tutoriel couvre l'intégralité du workflow de build sur un nouveau projet. Pour aller plus loin dans la planification et l'implémentation d'une grande fonctionnalité dans une base de code existante, consulte Planifier et implémenter des fonctionnalités complexes.

À la fin de ce tutoriel, tu sauras comment Bob t'aide à :

  • Traduire des exigences en code
  • Créer et affiner un plan d'implémentation
  • Expliquer une implémentation générée
  • Améliorer la qualité du code
  • Générer des tests unitaires
  • Créer de la documentation technique

Prérequis

Pour suivre ce tutoriel, tu as besoin des éléments suivants :

  • Bob IDE installé et configuré.
  • Avoir complété Utiliser le codage littéraire pour générer du code à partir de commentaires, sur lequel ce tutoriel s'appuie.
  • Avoir complété Créer une nouvelle fenêtre de contexte, pour pouvoir gérer le contexte de Bob tout au long de ce workflow en plusieurs étapes.
  • Docker installé et en cours d'exécution sur ta machine. Bob génère un Dockerfile pour que tu puisses construire et exécuter l'API dans un conteneur sans installer Python ni ses dépendances localement.
  • Connaissances de base en Python.
  • Compréhension de base des API REST. Tu n'as pas besoin d'expérience préalable avec FastAPI ; Bob génère le code FastAPI et ce tutoriel l'explique.

Comprendre la programmation en binôme avec l'IA et Bob

Bob fonctionne comme un partenaire collaboratif tout au long du cycle de développement logiciel. Il travaille avec toi pendant que tu planifies, génères, expliques, améliores, testes et documentes le code.

Workflow de programmation en binôme

Ce tutoriel utilise le workflow suivant :

Exigences

Bob crée un plan

Tu révises, affines et approuves le plan

Bob génère le code

Tu révises la sortie

Exécution et validation

Bob explique l'implémentation

Bob suggère des améliorations de la qualité du code

Génération des tests

Génération de la documentation

Le workflow combine l'assistance de l'IA avec la révision et la validation humaine à chaque étape.

Configurer ton espace de travail

Lance Bob, ouvre un dossier de projet vide et configure Bob pour qu'il demande une approbation avant de modifier des fichiers.

Lancer IBM Bob

Lance l'application IBM Bob sur ton ordinateur. Bob est un IDE autonome, pas une extension.

Ouvrir l'interface de chat Bob

Si l'interface de chat Bob n'est pas visible, ouvre-la en sélectionnant l'icône Bob à côté de la barre de navigation, ou utilise le raccourci Option + Command + B (Mac) ou Ctrl + Alt + B (Windows).

Panneau de chat Bob ouvert dans l'IDE IBM Bob

Ouvrir un dossier de projet vide

Crée un dossier vide nommé todo-api, puis ouvre-le dans Bob avec Fichier > Ouvrir le dossier. Si Bob te demande si tu fais confiance aux auteurs des fichiers du dossier, sélectionne Oui, je fais confiance aux auteurs.

Bob écrit l'application générée dans ce dossier. Tu n'as pas besoin d'un dépôt existant pour ce tutoriel.

Désactiver l'approbation automatique

Ouvre Permissions et confirme que l'approbation automatique est désactivée. Avec l'approbation automatique désactivée, Bob demande ta permission avant de lire des fichiers, de modifier des fichiers ou d'exécuter des commandes, ce qui te permet de contrôler chaque modification dans ce tutoriel.

Définir les exigences et le plan

Donne à Bob les exigences pour l'API To-Do, puis révise le plan qu'il propose avant qu'un code soit écrit.

Passer en mode Plan

Ouvre le menu déroulant des modes en bas de la barre latérale de Bob et sélectionne Plan.

Menu déroulant des modes IBM Bob avec le mode Plan sélectionné

Les modes appliquent le principe du moindre privilège. Le mode Plan permet à Bob de lire des fichiers et de proposer un plan sans écrire ni exécuter de code, afin que tu puisses réviser l'approche avant qu'aucune modification ne soit apportée.

Définir les exigences de l'application

Dans l'interface de chat Bob, entre le prompt suivant :

Create a simple FastAPI To-Do API.

Requirements:

- Store tasks in a Python list.
- Each task should contain:
    - id
    - task_name

Implement:

- Get all tasks
- Add a task
- Delete a task

Use FastAPI and Pydantic.

Include a requirements.txt and a Dockerfile that run the API on port 8000.

Keep the implementation simple.

Bob analyse les exigences et crée un plan de tâches.

Affiner le plan

Tu peux modifier le plan avant qu'un code soit écrit. Dans l'interface de chat Bob, entre un prompt de suivi :

Update the plan to reject a task whose task_name is empty or longer than 200 characters.

Bob révise le plan pour inclure la validation d'entrée supplémentaire. Révise le plan mis à jour.

Réviser et approuver le plan

Bob affiche les actions qu'il prévoit d'effectuer avant de les exécuter. Par exemple, Bob peut proposer de :

  • Créer l'application FastAPI.
  • Ajouter un Dockerfile et un fichier requirements.txt.
  • Vérifier l'implémentation.

Cette approche avec supervision humaine te laisse responsable des décisions de conception tout en bénéficiant de l'assistance de l'IA.

Générer et réviser l'application

Passe en mode Agent pour que Bob puisse exécuter le plan approuvé, puis révise le code qu'il génère.

Passer en mode Agent et exécuter le plan

Ouvre le menu déroulant des modes en bas de la barre latérale de Bob et sélectionne Agent. Puis dis à Bob d'implémenter le plan approuvé :

Implement the plan.

Le mode Agent permet à Bob d'écrire des fichiers et d'exécuter des commandes. Bob demande une approbation avant chaque modification car tu as désactivé l'approbation automatique. Approuve les étapes au fur et à mesure que Bob avance dans le plan.

Réviser l'application générée

Lorsque l'implémentation est terminée, révise le code généré. L'application se compose des parties suivantes.

Modèles de données. Bob génère deux modèles Pydantic : un pour le corps de la requête lors de la création d'une tâche, et un pour une tâche stockée. Le modèle de création applique la règle de longueur que tu as ajoutée lors de la planification :

class TaskCreate(BaseModel):
    task_name: Annotated[str, Field(min_length=1, max_length=200)]


class Task(BaseModel):
    id: int
    task_name: str

Les noms et chemins exacts dépendent de la génération de Bob. Ce tutoriel suppose les modèles Task et TaskCreate et le chemin d'endpoint /tasks. Adapte les prompts suivants si Bob choisit des noms différents.

Magasin de données en mémoire. Bob stocke les tâches dans une liste Python vide et attribue à chaque nouvelle tâche un id incrémental :

tasks: list[dict] = []
id_counter = 0

Opérations API. L'application fournit les endpoints suivants :

  • GET /tasks
  • POST /tasks
  • DELETE /tasks/{task_id}

POST /tasks prend uniquement task_name dans le corps de la requête et retourne 201 avec la tâche créée. DELETE /tasks/{task_id} retourne 204 en cas de succès et 404 lorsqu'aucune tâche n'a ce task_id.

Dépendances. Un fichier requirements.txt qui liste FastAPI, Uvicorn et Pydantic.

Conteneur. Un Dockerfile qui installe les dépendances et exécute l'API sur le port 8000 avec Uvicorn.

Étant donné que les grands modèles de langage sont probabilistes, le code généré peut légèrement différer des exemples présentés dans ce tutoriel.

Ajouter un endpoint avec le codage littéraire

Utilise le mode de codage littéraire pour ajouter un endpoint de mise à jour directement depuis une instruction en langage naturel dans l'éditeur, sans passer à la fenêtre de chat.

Le mode de codage littéraire génère du code à partir d'instructions en langage naturel écrites directement dans l'éditeur.

Démarrer une nouvelle fenêtre de contexte

Clique sur Nouvelle tâche dans la zone de chat ou sur + en haut du panneau de chat pour démarrer une nouvelle fenêtre de contexte. La planification, la génération et la révision que tu viens de terminer n'ont plus besoin de rester dans le contexte, et démarrer proprement garde les réponses de Bob ciblées et réduit le coût pour le reste du tutoriel.

Ouvrir le fichier de l'application

Ouvre le fichier main.py que Bob a généré et place ton curseur sur une ligne vide à la fin du fichier, sous le dernier gestionnaire de route.

Activer le mode de codage littéraire

Appuie sur Cmd + I (Mac) ou Ctrl + I (Windows et Linux), ou sélectionne l'icône de baguette magique dans la barre d'outils de l'éditeur.

Écrire l'instruction

Entre l'instruction suivante sur la ligne vide. Elle apparaît surlignée dans une couleur différente du reste du code.

Add an endpoint that updates the task_name of an existing task by its ID, matching the style and conventions of the existing routes.

Bob déduit le chemin de route, le nom du paramètre, la méthode HTTP et la gestion des erreurs du code environnant, donc tu n'as pas besoin de les spécifier.

Générer et accepter le code

Sélectionne Générer sous le code que Bob propose. Bob remplace l'instruction par une implémentation et affiche un diff en ligne.

Révise le diff, puis sélectionne Tout accepter pour appliquer la modification. Sélectionne Quitter pour quitter le mode de codage littéraire.

Expliquer, exécuter et valider

Demande à Bob d'expliquer l'implémentation, puis exécute l'application et valide son comportement.

Démarrer une nouvelle fenêtre de contexte

Clique sur Nouvelle tâche dans la zone de chat ou sur + en haut du panneau de chat pour démarrer une nouvelle fenêtre de contexte.

Demander à Bob d'expliquer le code

Comprendre le code généré est une partie importante de la programmation en binôme avec l'IA. Demande à Bob :

Explain the generated To-Do API.

Bob peut expliquer l'architecture de l'application, le flux de données, les composants FastAPI, les modèles Pydantic, le comportement des endpoints et les décisions de conception. Ces explications t'aident à comprendre comment l'application fonctionne plutôt que de traiter le code généré par l'IA comme une boîte noire.

Exécuter l'application

Demande à Bob de construire et d'exécuter l'API dans un conteneur :

Build the Docker image and run the container with port 8000 mapped to the host. Confirm the API is reachable.

Bob exécute les commandes de construction et de démarrage et signale quand le conteneur est en cours d'exécution. Pour exécuter les commandes toi-même, ouvre un terminal dans le dossier todo-api :

docker build -t todo-api .
docker run -d --name todo-api -p 8000:8000 todo-api

Ouvre http://127.0.0.1:8000/docs dans ton navigateur.

FastAPI sert une interface Swagger UI interactive à /docs. Utilise-la pour explorer chaque endpoint, inspecter les schémas de requête et de réponse, et exécuter des appels API depuis le navigateur.

Valider l'API

Utilise l'interface Swagger UI à /docs pour exercer chaque opération. Pour chaque endpoint, développe sa ligne, sélectionne Try it out, entre les paramètres de chemin ou le corps de requête, sélectionne Execute, puis vérifie le code et le corps de la Server response.

Ajouter une tâche

  1. Développe POST /tasks et sélectionne Try it out.

  2. Remplace le corps de la requête par :

    {
      "task_name": "My first API item!"
    }
  3. Sélectionne Execute. Confirme que le code de réponse est 201 et que le corps de la réponse contient la tâche avec un id attribué. Note l'id ; tu en as besoin dans les étapes de mise à jour et de suppression.

Ensuite, confirme les règles de validation que tu as ajoutées lors de la planification en envoyant des entrées invalides et en vérifiant que l'API les rejette :

  1. Dans le même corps de requête, définis task_name sur une chaîne vide (""), sélectionne Execute, et confirme que le code de réponse est 422 avec un corps de réponse qui décrit l'erreur de validation.
  2. Définis task_name sur une chaîne de plus de 200 caractères, sélectionne Execute, et confirme que le code de réponse est à nouveau 422.

Récupérer les tâches

  1. Développe GET /tasks et sélectionne Try it out.
  2. Sélectionne Execute. Confirme que le code de réponse est 200 et que le corps de la réponse liste la tâche My first API item! avec l'id attribué lors de son ajout.

Mettre à jour une tâche

  1. Développe PUT /tasks/{task_id} et sélectionne Try it out.

  2. Entre le task_id de la tâche que tu as créée.

  3. Remplace le corps de la requête par :

    {
      "task_name": "Build and ship a To-Do API"
    }
  4. Sélectionne Execute. Confirme que le code de réponse est 200 et que la tâche retournée affiche le task_name mis à jour.

  5. Modifie task_id pour une valeur qui n'existe pas et sélectionne à nouveau Execute. Confirme que le code de réponse est 404.

Supprimer une tâche

  1. Développe DELETE /tasks/{task_id} et sélectionne Try it out.
  2. Entre le task_id de la tâche que tu as créée et sélectionne Execute. Confirme que le code de réponse est 204.
  3. Développe GET /tasks, sélectionne Execute, et confirme que la tâche n'apparaît plus dans la réponse.
  4. Développe à nouveau DELETE /tasks/{task_id}, entre le même task_id, et sélectionne Execute. Confirme que le code de réponse est 404.

Cela confirme que l'implémentation, y compris l'endpoint de mise à jour que tu as ajouté avec le codage littéraire, satisfait les exigences initiales.

Améliorer la qualité du code

Demande à Bob de revoir le code généré pour des problèmes de qualité, puis applique les modifications avec lesquelles tu es d'accord. Cette étape utilise Bob comme réviseur plutôt que seulement comme générateur de code.

Démarrer une nouvelle fenêtre de contexte

Clique sur Nouvelle tâche dans la zone de chat ou sur + en haut du panneau de chat pour démarrer une nouvelle fenêtre de contexte.

Demander à Bob des suggestions d'amélioration

Dans l'interface de chat Bob, entre :

Review the To-Do API and suggest improvements to code quality, error handling, and HTTP status codes.

Bob identifie des lacunes telles qu'un endpoint manquant pour récupérer une seule tâche, un magasin en mémoire qui contient des dictionnaires simples plutôt que des modèles Task validés, et un id_counter au niveau du module qui est difficile à réinitialiser ou à tester.

Appliquer les améliorations

Demande à Bob d'implémenter les suggestions que tu souhaites conserver :

Add a GET /tasks/{task_id} endpoint that returns 404 when the task ID does not exist, and store tasks as Task models instead of dictionaries.

Révise les modifications proposées et approuve pour les appliquer. Demande à Bob de reconstruire l'image et de redémarrer le conteneur, puis répète les étapes de validation. Confirme que GET /tasks/{task_id} retourne 200 avec la tâche pour un ID valide et 404 pour un ID inconnu, et que les endpoints existants se comportent toujours comme avant.

Générer des tests et de la documentation

Demande à Bob de générer une suite de tests et de la documentation technique pour l'API.

Démarrer une nouvelle fenêtre de contexte

Clique sur Nouvelle tâche dans la zone de chat ou sur + en haut du panneau de chat pour démarrer une nouvelle fenêtre de contexte.

Générer des tests unitaires

Demande à Bob :

Generate pytest unit tests for this application. Add pytest and httpx to a dev requirements file, build a test image, and run the suite in a container.

Bob ajoute les dépendances de test pytest et httpx, construit une image qui les inclut, exécute la suite dans un conteneur et rapporte les résultats. Exécuter les tests dans un conteneur signifie que tu n'as pas besoin d'un environnement Python local. Révise et affine les tests générés.

La révision et la maintenance des tests générés restent de ta responsabilité.

Générer de la documentation technique

Demande à Bob :

Generate technical documentation for this To-Do API.

Bob peut générer une vue d'ensemble de l'application, une description de l'architecture, des résumés des endpoints, des exemples de requêtes et de réponses, et des instructions d'utilisation. Cette documentation complète la documentation API que FastAPI génère automatiquement.

Dépannage

  • Impossible de se connecter au daemon Docker : Démarre Docker Desktop ou le service Docker avant de construire l'image.
  • Bind for 0.0.0.0:8000 failed: port is already allocated : Arrête le processus utilisant le port 8000, ou mappe un autre port hôte avec docker run -d --name todo-api -p 8080:8000 todo-api et ouvre http://127.0.0.1:8080/docs.
  • The container name "/todo-api" is already in use : Exécute docker rm -f todo-api, puis redémarre le conteneur.
  • pytest is missing when the tests run : L'image de l'application n'inclut pas les dépendances de test. Demande à Bob d'ajouter pytest et httpx à un fichier de prérequis de développement et de construire une image de test séparée.

Nettoyage

Arrête et supprime le conteneur pour libérer le port 8000 :

docker rm -f todo-api

Supprime l'image lorsque tu as terminé :

docker rmi todo-api

Tu peux aussi demander à Bob de nettoyer :

Stop and remove the To-Do API container and image.

Bob ne persiste pas le magasin de données en mémoire, donc aucun nettoyage supplémentaire n'est nécessaire.

Prochaines étapes

Dans ce tutoriel, tu as utilisé Bob pour construire une API To-Do avec FastAPI et un magasin de données en mémoire. Tu as vu comment Bob fonctionne comme assistant de programmation en binôme avec l'IA tout au long du cycle de développement logiciel : analyse des exigences, planification de l'implémentation, génération de code, tests et documentation. Tout au long du processus, tu es resté responsable de la révision et de la validation de la sortie de Bob.

FAQ

Dois-je connaître FastAPI ? Non. Bob génère le code FastAPI et Pydantic et l'explique sur demande. Des connaissances de base en Python et en REST suffisent.

Pourquoi changer de mode entre les étapes ? Les modes appliquent le moindre privilège. Le mode Plan lit le code et écrit un plan, mais n'exécute rien ; le mode Agent peut modifier des fichiers et exécuter des commandes ; le mode Ask répond aux questions sans modifier de fichiers. Changer de mode permet de faire correspondre les capacités de Bob à la tâche en cours.

Et si Bob nomme les fichiers ou les modèles différemment ? Le contrat HTTP est fixé par le prompt des exigences, donc les chemins et les codes de statut correspondent. Les noms de classes et la structure des fichiers peuvent varier. Ce tutoriel suppose les modèles Task et TaskCreate ; adapte les prompts suivants si Bob a choisi d'autres noms.

Pourquoi démarrer une nouvelle fenêtre de contexte à chaque étape ? Bob sauvegarde le plan dans le dossier plans, donc la conversation précédente n'a plus besoin de rester dans le contexte. Un contexte propre garde chaque étape ciblée et maîtrise le coût en tokens.

Puis-je faire ce tutoriel sans Docker ? Tu peux techniquement faire ce tutoriel sans Docker, mais tu devras modifier le plan et les prompts envoyés à Bob.

Le mode Plan modifie-t-il des fichiers ? Non. En mode Plan, Bob lit ton code et écrit uniquement un plan Markdown. Aucun code d'application n'est modifié tant que tu ne passes pas en mode Agent.

Comment trouvez-vous ce sujet ?