Réponse courte
Envoyez la plupart de vos demandes à GPT-4o mini, qui coûte 0,15 $ US par million de jetons en entrée et 0,60 $ US par million de jetons en sortie, et gardez le plus gros GPT-4o seulement pour les demandes qui en ont vraiment besoin. Un simple routeur qui choisit le modèle selon la tâche, plus un jeu de tests pour vérifier la qualité, peut réduire une facture typique de bien plus de la moitié.
Question de suivi Quelles tâches un petit modèle peut-il prendre en charge?
Une semaine après son lancement, GPT-4o mini est le modèle performant le moins cher de la liste de prix d’OpenAI. Ça change la façon de concevoir une application. Au lieu de choisir un seul modèle pour tout, vous pouvez traiter les modèles comme des employés à des taux horaires différents : le petit s’occupe du travail courant, et le coûteux n’est appelé que lorsqu’une demande est difficile. Les économies viennent de ce partage, pas d’un truc en particulier.
L’API facture au jeton, un petit morceau de texte; la page de tarification d’OpenAI indique que 1 000 jetons équivalent à environ 750 mots anglais. Vous payez séparément les jetons d’entrée (ce que vous envoyez, y compris les instructions et les documents) et les jetons de sortie (ce que le modèle vous renvoie), et la sortie coûte plus cher.
Les prix qui comptent
Voici les prix par million de jetons affichés cette semaine sur la page de tarification d’OpenAI.
| Modèle | Entrée | Sortie |
|---|---|---|
| gpt-4o | 5,00 $ US | 15,00 $ US |
| gpt-4o-mini | 0,15 $ US | 0,60 $ US |
| GPT-3.5 Turbo (version actuelle) | 0,50 $ US | 1,50 $ US |
Les deux modèles GPT-4o acceptent jusqu’à 128 000 jetons de contexte, et OpenAI affirme que GPT-4o mini peut écrire jusqu’à 16 000 jetons dans une seule réponse. OpenAI affirme qu’il coûte plus de 60 % de moins que GPT-3.5 Turbo tout en obtenant de meilleurs résultats à ses bancs d’essai, comme 82 % au MMLU, un vaste test de connaissances générales. Si vous utilisez encore GPT-3.5 Turbo, changer de modèle est habituellement l’économie la plus facile que vous ferez jamais.
Une comparaison de coûts concrète
Imaginez une application qui trie les courriels entrants des clients. Les chiffres ci-dessous sont donnés à titre d’exemple : 100 000 demandes par mois, chacune avec environ 1 000 jetons en entrée (les instructions plus le courriel) et 200 jetons en sortie (une catégorie et un résumé d’une ligne). Ça donne 100 millions de jetons en entrée et 20 millions de jetons en sortie par mois.
| Configuration | Coût en entrée | Coût en sortie | Total mensuel |
|---|---|---|---|
| Tout en gpt-4o | 100 × 5,00 $ US = 500 $ US | 20 × 15,00 $ US = 300 $ US | 800 $ US |
| Tout en gpt-3.5-turbo | 100 × 0,50 $ US = 50 $ US | 20 × 1,50 $ US = 30 $ US | 80 $ US |
| Tout en gpt-4o-mini | 100 × 0,15 $ US = 15 $ US | 20 × 0,60 $ US = 12 $ US | 27 $ US |
| Routeur : 80 % mini, 20 % gpt-4o | 12 $ US + 100 $ US | 9,60 $ US + 60 $ US | 181,60 $ US |
Si le routeur essaie d’abord le petit modèle, les 20 % escaladés paient aussi ce premier essai, soit environ 5,40 $ US de plus. Même ainsi, la configuration mixte coûte moins du quart de la version tout en GPT-4o. Deux autres leviers s’ajoutent. L’API Batch, pour le travail qui peut attendre jusqu’à 24 heures, comme les rapports de nuit, est facturée à moitié prix. Et des prompts plus courts coûtent moins cher à chaque appel : raccourcir un long message système est vite rentable à ce volume.
Un routeur simple en Python
Un routeur, ce sont quelques lignes de code qui décident quel modèle reçoit chaque demande. Celui-ci utilise la bibliothèque Python openai (version 1.x). Il commence par le petit modèle et n’escalade que lorsque le petit modèle se dit incertain.
from openai import OpenAI
client = OpenAI() # lit OPENAI_API_KEY dans l’environnement
SYSTEM = ("Classe le courriel comme facturation, technique, ventes ou autre, "
"puis donne un résumé d’une ligne. Si tu ne peux pas décider, réponds seulement : UNSURE")
def ask(model, text):
r = client.chat.completions.create(
model=model,
messages=[{"role": "system", "content": SYSTEM},
{"role": "user", "content": text}],
max_tokens=150,
temperature=0,
)
return r.choices[0].message.content.strip(), r.usage
def route(text, hard=False):
if hard or len(text) > 20000: # les demandes longues ou signalées montent directement
return ask("gpt-4o", text)
answer, usage = ask("gpt-4o-mini", text)
if answer.startswith("UNSURE"): # n’escalader que les cas douteux
return ask("gpt-4o", text)
return answer, usage
max_tokens plafonne la longueur de la réponse, pour qu’une demande confuse ne fasse pas grimper les coûts de sortie. L’objet usage renvoyé avec chaque appel indique les jetons facturés, que vous pouvez consigner pour voir où va vraiment votre argent. La règle d’escalade est volontairement grossière; vous pouvez la remplacer par n’importe quel test qui vous inspire confiance, comme « la réponse ne fait pas partie des quatre catégories permises ».
À essayer : rassemblez 30 vraies demandes tirées de votre propre application. Soumettez-les aux deux modèles, placez les réponses côte à côte dans un tableur et marquez chaque réponse de mini comme suffisante ou non. La proportion que vous jugez suffisante est une bonne première estimation de la part du trafic que vous pouvez diriger vers le petit modèle.
Vérifiez la qualité avant de changer
Un modèle moins cher n’est une économie que si les réponses restent acceptables. Gardez ce jeu de tests fait de vraies demandes, relancez-le chaque fois que vous changez de prompt ou de modèle, et examinez les échecs, pas seulement le score. Fixez un budget mensuel dans les paramètres de facturation d’OpenAI comme filet de sécurité; la page de tarification précise qu’il peut y avoir un court délai avant que la limite prenne effet.
Quelles tâches un petit modèle peut-il prendre en charge?
Les petits modèles réussissent le mieux dans les tâches à grand volume, bien définies, où la réponse est courte et les instructions claires. Trier des messages par catégorie, extraire d’un texte des champs comme les dates et les totaux, réécrire un paragraphe sur un ton donné, faire de courtes traductions et rédiger des premiers jets de réponses : tout cela convient. OpenAI rapporte que ses premiers partenaires ont trouvé GPT-4o mini bien meilleur que GPT-3.5 Turbo pour extraire des données structurées de fichiers de reçus et pour rédiger des réponses à partir de l’historique d’un fil de courriels.
Gardez le plus grand modèle pour le travail où une erreur coûte cher ou où le raisonnement est long : analyse en plusieurs étapes, révision attentive de contrats ou de code, et questions qui exigent de soupeser de nombreux éléments de preuve. Même dans ces cas, une façon de faire courante consiste à laisser le petit modèle faire la première passe, comme résumer ou filtrer, et à ne donner à GPT-4o que le résultat condensé.
La réponse honnête pour votre propre application vient des tests, pas des bancs d’essai. Un modèle qui obtient de bons résultats aux tests généraux peut quand même trébucher sur votre formulation particulière, et un modèle qui semble plus faible sur papier peut parfaitement accomplir votre tâche précise. C’est votre jeu de tests qui tranche.
Sources
- Pricing (OpenAI API, July 2024) — OpenAI
- GPT-4o mini: advancing cost-efficient intelligence — OpenAI, 18 juillet 2024
- OpenAI unveils GPT-4o mini, a smaller and cheaper AI model — TechCrunch (Maxwell Zeff), 18 juillet 2024