2 - Prompt Engineering pour Devs

Parler efficacement à l’IA


Ce que les gens croient

“Il suffit d’être clair et l’IA comprendra.”

Réalité : La qualité de la réponse dépend de la structure de votre demande.


Les 4 principes

1. Contexte explicite

#❌Prompt vague
"Fix the bug in my code"

#✅Prompt structuré
"Contexte: API FastAPI avec endpoints REST.
Problème: Le endpoint POST /users retourne 500.
Fichier: src/api/routes/users.py, ligne 42.
Erreur: IntegrityError sur email duplicata.
Objectif: Ajouter une validation avant l'insertion."

2. Découper les tâches

#❌Tout en un
"Refactor toute l'application pour ajouter l'authentification"

#✅Étapes distinctes
"Étape 1: Analyser le système d'auth actuel
Étape 2: Proposer une architecture JWT
Étape 3: Implémenter le middleware d'auth
Étape 4: Ajouter les tests"

3. Spécifier le format de sortie

#✅Format demandé
"Réponds en format tableau:

| Fichier | Changement | Complexité |
|---------|------------|------------|"

4. Contraintes explicites

#✅Contraintes claires
"- Ne pas utiliser de librairies externes
- Garder la compatibilité Python 3.11
- Préserver les tests existants
- Maximum 50 lignes ajoutées"

Pattern : AGENTS.md

Le fichier qui change tout.

À la racine de votre projet, un fichier AGENTS.md donne le contexte à l’IA :

# AGENTS.md - Contexte pour les agents IA

## Project
API REST pour gestion d'utilisateurs.

## Stack
- FastAPI 0.104+
- SQLAlchemy ORM
- PostgreSQL 15
- Pytest pour les tests

## Conventions
- Snake_case pour les variables
- docstrings Google style
- Tests dans tests/ avec pytest

## Architecture
- src/api/routes/ : endpoints REST
- src/models/ : modèles SQLAlchemy
- src/services/ : logique métier

## À NE PAS FAIRE
- Ne pas créer de nouvelles migrations DB
- Ne pas modifier .env
- Ne pas ajouter de dépendances sans validation

Pourquoi ça marche ?

  • L’IA a le contexte permanent
  • Pas besoin de répéter à chaque prompt
  • Réduit les tokens consommés
  • Plus de cohérence dans les réponses

Pattern : README.md par dossier

Chaque dossier important devrait avoir un README.md :

src/
├── api/
│   ├── README.md      # "Ce dossier contient les endpoints..."
│   └── routes/
├── models/
│   └── README.md      # "Modèles SQLAlchemy..."
└── services/
    └── README.md      # "Logique métier isolée..."

Contenu type :

# Services Layer

Contient la logique métier isolée des controllers.

## Conventions
- Un service par domaine métier
- Injection de dépendances via __init__
- Pas d'imports circulaires

## Exemple
```python
# services/user_service.py
class UserService:
    def __init__(self, db: Session):
        self.db = db

---

# Anti-patterns courants

| Anti-pattern | Conséquence | Solution |
|--------------|-------------|----------|
| Prompt trop long | Confusion, tokens gâchés | Découper en étapes |
| Pas de contraintes | Code non idiomatique | Spécifier les conventions |
| Oublier les tests | Code non testé | Demander tests explicites |
| Ignorer l'existant | Duplication | Référencer les fichiers existants |

---

# TP : Créer votre AGENTS.md

Le TP fil rouge continue : créer un `AGENTS.md` pour votre projet démo.

Voir `2_tp_agents.md` →