Choisir le bon modèle Claude en production : Haiku, Sonnet, Opus et routing

Sixième article de la série « Production Engineering, Evals & Security avec Claude ».

Choisir un modèle Claude en production n’est pas seulement une décision technique. C’est un arbitrage entre qualité, coût et latence.

Le document Production Engineering, Evals & Security présente le choix du modèle comme un levier fondamental : le coût et la latence d’un système dépendent d’abord du modèle choisi, avant même les optimisations de prompt, de cache ou d’architecture.


Le principe : choisir le modèle le moins coûteux qui atteint la qualité attendue

Le bon raisonnement n’est pas :

prendre le modèle le plus puissant

mais plutôt :

prendre le modèle le moins coûteux
qui atteint le quality bar défini par les evals

C’est une différence importante.

Un modèle plus performant peut être justifié si :

  • la tâche est complexe ;
  • le coût d’une erreur est élevé ;
  • les evals montrent qu’un modèle plus petit échoue sur des cas critiques.

Mais si un modèle plus rapide et moins coûteux atteint déjà la qualité requise, utiliser un modèle supérieur n’apporte pas forcément de valeur.


Les trois tiers présentés dans le module

Le document raisonne principalement avec :

Haiku
Sonnet
Opus

et décrit leurs rôles relatifs ainsi.

ModèlePositionnement
HaikuVitesse et coût
SonnetÉquilibre qualité / coût / latence
OpusTâches exigeantes nécessitant davantage de capacité

Le document mentionne également un tier nommé Fable, décrit comme le plus capable pour les tâches les plus exigeantes, mais les exercices du module se concentrent ensuite surtout sur Haiku, Sonnet et Opus. Je conserve ici la structure du document source sans extrapoler au-delà.


Sonnet comme point de départ

Le module propose un principe pratique :

start with Sonnet

puis :

eval

Si Sonnet atteint la qualité attendue :

keep Sonnet

Si Sonnet échoue sur les cas les plus difficiles :

consider Opus

Si une tâche simple peut être correctement réalisée par Haiku :

consider Haiku

Le choix doit donc être piloté par les evals, pas par intuition.


Monter de tier : quand passer à Opus ?

Le document recommande de monter de tier lorsque :

current model
   ↓
fails eval
   ↓
on hardest cases

et que le coût d’une erreur est significatif.

Exemple :

multi-step agent
→ dépendances entre étapes
→ erreur initiale coûteuse

Si les evals montrent que Sonnet échoue sur les cas difficiles :

Opus

devient le meilleur choix.

La contrainte qui décide ici n’est pas simplement :

latency

ou :

cost

mais :

quality on hard reasoning
+
high downstream cost of mistakes

Descendre de tier : quand choisir Haiku ?

Haiku devient pertinent lorsque :

high volume
+
simple task
+
eval confirms quality

Le document donne comme scénario une classification de millions de messages courts.

Si les evals montrent que Haiku tient le niveau de qualité attendu :

Haiku

est le bon choix.

La contrainte dominante devient :

cost-at-volume

Exemple : classification à très grande échelle

Supposons :

10 millions de messages / jour

Tâche :

classify:
billing
technical
sales

Si :

Haiku eval score = acceptable

alors utiliser Opus serait probablement inutile.

Le surcoût serait multiplié par le volume.

Le document place donc clairement Haiku comme choix naturel lorsque :

quality bar holds
+
volume is high

Le coût d’une erreur fait partie du calcul

Le document rappelle qu’une économie sur le coût API peut être une fausse économie.

Exemple :

small model
→ économise 20 %

mais :

error rate
→ augmente

et les erreurs déclenchent :

support
manual correction
wrong actions
customer impact

Alors le coût réel peut devenir supérieur.

Le choix du modèle doit donc intégrer :

API cost
+
latency
+
quality
+
cost of mistakes

Un modèle plus puissant peut parfois être plus économique

Le document nuance aussi une idée fréquente :

Un modèle plus cher par token n’est pas toujours plus cher par tâche.

Pourquoi ?

Parce qu’un modèle plus performant peut :

reason faster
need fewer tokens
require fewer retries
make fewer tool calls

Une tâche peut donc parfois coûter moins cher globalement avec un modèle supérieur s’il atteint rapidement une bonne solution.

Il faut mesurer :

cost per successful task

et pas seulement :

price per token

Routing : ne pas utiliser le même modèle pour toutes les requêtes

Un système peut utiliser plusieurs modèles.

Architecture :

Incoming request
      ↓
   Router
      ↓
 ┌────┴───────┐
 ↓            ↓
simple      complex
 ↓            ↓
Haiku       Opus
or Sonnet

Le document décrit cela comme :

un modèle par défaut + un override basé sur un signal de tâche.


Quels signaux utiliser pour le routing ?

Le module cite notamment :

task type
input length
difficulty classification

Par exemple :

def route(request):
    difficulty = classify(request)

    if difficulty == "complex":
        return call_opus(request)

    return call_sonnet(request)

L’idée est de réserver le modèle le plus coûteux aux cas qui en ont besoin.


Exemple : trafic mixte

Supposons :

80 % = simple lookup
20 % = complex synthesis

Une architecture naïve :

Opus for everything

garantit un coût élevé.

Une autre :

Haiku for everything

risque de perdre trop de qualité sur les tâches difficiles.

La solution proposée par le module est :

default:
Sonnet or Haiku

override:
Opus for complex requests

avec les evals pour valider le seuil de routing.


Quand ne pas utiliser de routeur ?

Le routing ajoute lui-même :

  • une classification ;
  • une branche supplémentaire ;
  • un modèle supplémentaire à maintenir ;
  • des tests supplémentaires ;
  • une nouvelle source potentielle d’erreurs.

Si tout le trafic est homogène :

same task
same difficulty
same quality bar

le document recommande :

pin one model

et éviter le routeur.


La décision doit toujours passer par les evals

Le pattern général devient :

candidate model
     ↓
run eval
     ↓
quality >= threshold?
   ┌────┴────┐
   │         │
  No        Yes
   │         │
   ↓         ↓
step up    consider cost/latency

Et dans l’autre sens :

cheaper model
     ↓
run eval
     ↓
quality still acceptable?
   ┌────┴────┐
   │         │
  No        Yes
   │         │
keep       downgrade
current

Le choix du modèle est donc une décision expérimentale.


Comparer les modèles sur le même dataset

Il faut garder :

same eval dataset
same prompt
same tools
same expected behavior

puis modifier uniquement :

model

Exemple :

ModelEval scoreLatencyCost
Haiku8.1faiblefaible
Sonnet9.2moyenmoyen
Opus9.5élevéélevé

Supposons :

quality bar = 9.0

Le meilleur choix est :

Sonnet

Opus est meilleur, mais cette amélioration ne justifie peut-être pas son coût.

Haiku est moins cher mais échoue au seuil.


Le quality bar doit être défini avant

Encore une fois, le design document joue un rôle.

Avant de choisir le modèle, il faut définir :

minimum quality score
latency target
cost ceiling

Sinon l’équipe risque de rationaliser le choix après coup.

Exemple :

Eval score >= 9
Latency < 2 s
Cost/request < X

Le modèle choisi doit respecter les trois contraintes.


Exemple de décision

Supposons :

Haiku

quality = 8.4
latency = 400 ms
cost = low

Sonnet

quality = 9.2
latency = 800 ms
cost = medium

Opus

quality = 9.4
latency = 1.8 s
cost = high

Requirements :

quality >= 9
latency < 1 s

Résultat :

Sonnet

C’est le seul modèle qui respecte les deux contraintes.


Ne pas optimiser une seule métrique

Le mauvais raisonnement :

cheapest model wins

ou :

best quality wins

ou :

fastest wins

Le bon raisonnement :

quality
cost
latency
reliability

doivent être considérés ensemble.


Model routing et reliability

Un routeur est lui-même un composant.

Il doit donc être testé.

Exemples :

simple lookup
→ small/default model

complex synthesis
→ stronger model

Il faut créer des eval cases où le routing correct est connu.

Sinon le système peut parfaitement avoir deux bons modèles mais les utiliser au mauvais moment.


Exemple de tests de routing

def test_simple_lookup_routes_to_default():
    assert route("What is the refund deadline?") == "default"

def test_complex_synthesis_routes_to_opus():
    assert route(
        "Compare five policies and derive a recommendation."
    ) == "opus"

Puis un E2E peut vérifier que le résultat final satisfait toujours l’eval.


Le modèle n’est qu’un levier parmi plusieurs

Une baisse de qualité ne signifie pas toujours :

need bigger model

Le problème peut venir de :

bad prompt
missing context
poor retrieval
tool errors
wrong architecture

Avant de monter de tier, il faut lire les résultats de l’eval.

Exemple :

failure only on retrieved facts

peut indiquer :

retrieval problem

et non un problème de capacité du modèle.

C’est pourquoi :

eval
+
trace

sont importants avant toute modification de modèle.


Le piège du « plus gros modèle par défaut »

Le document décrit ce choix comme une erreur de production fréquente et coûteuse.

Pourquoi ?

Parce qu’on paye :

premium capability

sur toutes les requêtes, même celles qui n’en ont pas besoin.

Exemple :

simple classification
→ Opus

est rarement une bonne architecture si Haiku tient parfaitement l’eval.


Le piège inverse : réduire les coûts sans mesurer

Supposons :

Sonnet
→ Haiku

simplement pour économiser.

Si aucune eval n’est exécutée, on ignore :

quality regression

Le coût baisse immédiatement.

Les erreurs peuvent apparaître progressivement en production.

Le document insiste donc sur le fait qu’une descente de tier doit elle aussi être validée par l’eval.


Architecture simple

Pour une tâche homogène :

User
 ↓
Sonnet
 ↓
Answer

C’est souvent préférable.


Architecture avec routing

Pour un trafic mixte :

                     Request
                        │
                        ↓
                  cheap classifier
                        │
                ┌───────┴────────┐
                │                │
             simple           complex
                │                │
                ↓                ↓
           Haiku/Sonnet        Opus
                │                │
                └───────┬────────┘
                        ↓
                     Output

Le routeur doit « gagner son coût ».

S’il n’évite jamais d’appels coûteux, il ne sert à rien.


Ce qu’il faut retenir pour la certification

Haiku

À privilégier lorsque :

high volume
+
speed/cost critical
+
eval proves quality

Sonnet

Le document le présente comme le :

balanced default

pour de nombreux workloads de production.


Opus

À choisir lorsque :

hard reasoning
+
current model misses eval bar
+
mistake cost is high

Routing

Pertinent lorsque :

traffic is mixed

Par exemple :

simple requests
+
few complex requests

Alors :

default cheaper model
+
Opus override

peut être approprié.


Pas de routing si le trafic est uniforme

uniform workload
→ single pinned model

La solution la plus simple est souvent préférable.


Pièges d’examen

Scénario : une classification traite des millions de messages et Haiku atteint le seuil des evals.

Haiku, car le coût à grande échelle est la contrainte dominante.


Scénario : un agent effectue une refactorisation complexe, les étapes sont dépendantes, et Sonnet échoue sur les cas les plus difficiles.

Opus, car la qualité sur le raisonnement difficile et le coût d’une erreur sont les contraintes principales.


Scénario : 90 % des requêtes sont simples et 10 % nécessitent une synthèse complexe.

Routing, avec un modèle par défaut moins coûteux et un modèle supérieur pour les cas difficiles.


Scénario : toutes les requêtes ont exactement la même difficulté.

Ne pas ajouter de routeur inutilement.


Scénario : vous voulez passer de Sonnet à Haiku pour économiser.

Exécuter les evals avant de promouvoir le changement.


Scénario : Haiku échoue uniquement lorsque le retrieval ne renvoie pas les bons documents.

→ Ne pas conclure immédiatement qu’il faut un modèle plus puissant ; diagnostiquer d’abord le retrieval.


À retenir en une phrase

Le bon modèle n’est ni le plus puissant ni le moins cher : c’est le modèle le moins coûteux qui satisfait le niveau de qualité, de latence et de fiabilité défini par les evals.

Le phare info – Média indépendant & critique
Sélectionne, organise, contextualise et partage des contenus pertinents autour d’un thème ou d’une problématique, dans une logique de veille, de transmission et de mise en sens.
Pour cet article, l’intelligence artificielle a été utilisée comme un outil d’aide à l’exploration, à la structuration et à la rédaction. Elle permet de confronter plusieurs angles, de repérer certains biais humains possibles et de faire émerger des points de vigilance. Le curateur humain observe aussi les biais possibles de l’IA, vérifie les éléments essentiels, nuance l’analyse, corrige les formulations fragiles et assume la publication.

Articles liés

Fiche de révision certification — Accelerators & IP Contribution

Cette fiche résume les notions essentielles du module Accelerators & IP Contribution. Le fil conducteur est simple : Un build Claude n’est pas terminé lorsqu’il fonctionne....

Étude de cas : corriger un accelerator Claude mal packagé, mal versionné et mal sécurisé

Un système Claude peut fonctionner parfaitement en démonstration et pourtant être impropre à la production. Le cas cumulatif du module illustre précisément cette situation. L’application : s’exécute...

Applications Claude multi-composants : trust boundaries, least privilege et sécurité

Une application Claude moderne n’est souvent pas constituée d’un seul appel API. Elle peut combiner : une API applicative ; Claude ; un agent ; Claude Code ; un MCP...

Comparer les plateformes Claude : latency, compliance, data residency et total cost

Lorsque plusieurs plateformes permettent d’exécuter Claude, comment choisir ? Une comparaison superficielle pourrait se limiter à : la plateforme la moins chère ; celle que l’équipe connaît...

Model versioning avec Claude : pin what ships, eval gates et rollback

Changer de modèle dans une application Claude peut sembler être une modification minime : model = "new-model" Pourtant, en production, ce changement peut modifier : la qualité...

Le sentier du savoir

De la curiosité à la transmission, explorez les étapes qui permettent de transformer l’information en compréhension durable.

Étape 1 — Construire une culture générale solide

Construire une base solide de connaissances pour comprendre le monde. Relier les faits, les disciplines et les repères essentiels.

Étape 2 — Maîtriser la pensée critique et l’analyse : apprendre à penser contre ses propres certitudes

Apprendre à analyser l’information, repérer les biais et questionner les évidences. Penser par soi-même dans un monde saturé de récits.

Étape 3 – Apprendre à argumenter et à convaincre

Structurer sa pensée pour convaincre sans manipuler. Savoir débattre, nuancer et formuler des idées claires.

Étape 4 – Approfondir un ou plusieurs domaines d’expertise

Explorer un ou plusieurs domaines en profondeur. Passer de la curiosité à la compréhension experte.

Etapes 5 : Devenir polyglotte : élargir sa pensée par les langues

Élargir ses horizons par le langage et les cultures. Penser autrement en changeant de langue.

Étape 6 — Comprendre la méthode scientifique et expérimenter

Comprendre la méthode scientifique et l’expérimentation. Distinguer savoirs établis, hypothèses et croyances.

Étape 7 – Écrire, transTransmission : écrire, transmettre, enseigner

Écrire, expliquer, partager ce que l’on a compris. Transformer le savoir en outil collectif.

Étape 8 — Cultiver l’équilibre corps-esprit pour soutenir l’érudition

Cultiver le corps et l’esprit pour soutenir l’érudition dans le temps. Le savoir durable repose aussi sur l’attention et l’équilibre personnel.