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 documentationLe 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).

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.

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
Dockerfileet un fichierrequirements.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: strLes 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 = 0Opérations API. L'application fournit les endpoints suivants :
GET /tasksPOST /tasksDELETE /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-apiOuvre 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
-
Développe POST /tasks et sélectionne Try it out.
-
Remplace le corps de la requête par :
{ "task_name": "My first API item!" } -
Sélectionne Execute. Confirme que le code de réponse est
201et que le corps de la réponse contient la tâche avec unidattribué. 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 :
- Dans le même corps de requête, définis
task_namesur une chaîne vide (""), sélectionne Execute, et confirme que le code de réponse est422avec un corps de réponse qui décrit l'erreur de validation. - Définis
task_namesur une chaîne de plus de 200 caractères, sélectionne Execute, et confirme que le code de réponse est à nouveau422.
Récupérer les tâches
- Développe GET /tasks et sélectionne Try it out.
- Sélectionne Execute. Confirme que le code de réponse est
200et que le corps de la réponse liste la tâcheMy first API item!avec l'idattribué lors de son ajout.
Mettre à jour une tâche
-
Développe
PUT /tasks/{task_id}et sélectionne Try it out. -
Entre le
task_idde la tâche que tu as créée. -
Remplace le corps de la requête par :
{ "task_name": "Build and ship a To-Do API" } -
Sélectionne Execute. Confirme que le code de réponse est
200et que la tâche retournée affiche letask_namemis à jour. -
Modifie
task_idpour une valeur qui n'existe pas et sélectionne à nouveau Execute. Confirme que le code de réponse est404.
Supprimer une tâche
- Développe
DELETE /tasks/{task_id}et sélectionne Try it out. - Entre le
task_idde la tâche que tu as créée et sélectionne Execute. Confirme que le code de réponse est204. - Développe GET /tasks, sélectionne Execute, et confirme que la tâche n'apparaît plus dans la réponse.
- Développe à nouveau
DELETE /tasks/{task_id}, entre le mêmetask_id, et sélectionne Execute. Confirme que le code de réponse est404.
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-apiet ouvrehttp://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
pytestethttpxà 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-apiSupprime l'image lorsque tu as terminé :
docker rmi todo-apiTu 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.
- Passe à Planifier et implémenter des fonctionnalités complexes pour délimiter des modifications plus grandes et multi-couches.
- Explore Créer un commit et une pull request pour faire passer le code généré de ton éditeur à une pull request.
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.