Leçon 7 — Du prototype au code

Exporter le code

4 min de lecture

Exporter le code

Du bouton au fichier

Le bouton Get code d'AI Studio affiche le code qui rejoue exactement votre prototype (modèle, prompt système, exemples, réglages, schéma), en plusieurs langages : Python, JavaScript, REST (curl)…

flowchart LR
  A["Prototype AI Studio"] -->|"Get code"| B["Extrait Python brut"]
  B --> C["Nettoyage : clé lue dans .env, modèle en variable"]
  C --> D["Fonctions testables : build_config, build_contents"]
  D --> E["fiche_produit.py + tests"]

L'extrait généré est un bon point de départ, mais pas un programme fini : tout est dans une seule fonction, le texte de la description est en dur, et il n'y a ni test ni gestion d'erreurs. Le lab fiche_produit.py est cet extrait réorganisé :

Dans AI StudioDans le code exportéDans le lab
choix du modèlemodel="..." en durMODEL = os.environ.get("MODEL", "gemini-3.5-flash")
System instructionssystem_instruction=[...]constante SYSTEM_INSTRUCTION
tours d'exempleliste contentsEXEMPLES + build_contents()
Run settingsGenerateContentConfig(...)build_config()
Structured outputschéma genai.types.Schema(...)classe Pydantic FicheProduit

Installer et configurer

terminal
python3 -m venv .venv && source .venv/bin/activate   # un environnement isolé
pip install -r requirements.txt                       # google-genai, pydantic, python-dotenv, pytest
cp .env.example .env                                  # puis collez votre clé dans .env

Le fichier .env ne contient qu'une ligne utile (les fichiers dont le nom commence par un point peuvent manquer dans certains téléchargements : créez-le alors à la main) :

.env
GEMINI_API_KEY=votre-cle-ai-studio-ici

Un environnement virtuel (venv) est un dossier qui contient les bibliothèques d'un seul projet, pour ne pas mélanger les versions entre projets. Le paquet google-genai est le SDK officiel (Software Development Kit, la bibliothèque cliente) de l'API Gemini.

Le cœur du script

files/fiche_produit.py
def rediger_fiche(client, description: str, essais: int = 4) -> FicheProduit:
    """Appelle Gemini et renvoie une fiche validée. Réessaie sur 429 / 5xx."""
    description = description.strip()
    if not description:
        raise ValueError("Description vide")
    for essai in range(essais):
        try:
            response = client.models.generate_content(
                model=MODEL, contents=build_contents(description), config=build_config())
            return FicheProduit.model_validate_json(response.text)
        except errors.APIError as e:
            if e.code not in (429, 500, 503) or essai == essais - 1:
                raise
            time.sleep(2 ** essai * 5)  # 5 s, 10 s, 20 s

Et dans main() : load_dotenv() charge le fichier .env, puis genai.Client() trouve tout seul la variable GEMINI_API_KEY. Aucune clé n'apparaît dans le code.

Que fait genai.Client() sans argument ?

Pourquoi le nom du modèle vient-il d'une variable d'environnement MODEL ?

Résultat obtenu

Exécution réelle du lab le 2026-10-15 sur une description (extrait) :

terminal
python fiche_produit.py "Gourde isotherme 500 ml, inox, garde le froid 24 h et le chaud 12 h, bouchon anti-fuite"
sortie
[
  {
    "titre": "Gourde isotherme en inox 500 ml avec bouchon anti-fuite",
    "accroche": "Emportez vos boissons chaudes ou froides partout avec vous en toute sérénité.",
    "description": "Fabriquée en inox, cette gourde isotherme de 500 ml conserve vos boissons au chaud pendant 12 heures et au froid pendant 24 heures. Son bouchon anti-fuite vous assure un transport sans risque au quotidien.",
    ...
  }
]

Exercice

Ajoutez une option --modele à la ligne de commande, qui remplace MODEL pour cette exécution seulement. Quelles lignes modifier ?

Voir la solution
files/fiche_produit.py (modification de main)
parser.add_argument("--modele", help="nom du modèle, remplace MODEL")
args = parser.parse_args(argv)
if args.modele:
    global MODEL
    MODEL = args.modele

La déclaration global MODEL doit être la première instruction de main() qui mentionne MODEL (placez-la en tête de fonction). Plus propre encore : passer model en paramètre de rediger_fiche. Pour un script de cette taille, la variable d'environnement (MODEL=gemini-3.5-flash-lite python fiche_produit.py ...) suffit souvent.

Je sais faire

  • Récupérer le code d'un prototype avec Get code
  • Créer un environnement virtuel et installer google-genai
  • Faire lire la clé depuis .env sans l'écrire dans le code
  • Réorganiser l'extrait en fonctions testables
Suivant