# Comment utiliser OpenRouter pour passer d’un modèle à l’autre?

Date: 2025-04-26 · Author: Robert Scales · https://guidetoartificialintelligence.com/fr/apprendre/openrouter-passer-d-un-modele-a-l-autre/

**Answer:** OpenRouter est une API unique qui achemine votre requête vers des modèles de nombreux fournisseurs : vous changez de modèle en modifiant une seule chaîne de texte, au lieu de vous inscrire, de payer et de programmer séparément pour chaque entreprise. Comme il suit le format de l’API d’OpenAI, vous pouvez utiliser la bibliothèque Python openai habituelle : dirigez-la vers l’adresse d’OpenRouter, utilisez une clé OpenRouter et nommez le modèle sous la forme fournisseur/modèle.

Si vous construisez quoi que ce soit avec des modèles de langage, vous voulez vite en essayer plus d’un. Peut-être qu’un petit modèle ouvert suffit pour votre tâche, pour une fraction du prix, ou que le modèle d’une autre entreprise écrit un meilleur français. Normalement, cela veut dire un compte distinct, une clé distincte, une facture distincte et souvent une bibliothèque de code distincte pour chaque fournisseur.

OpenRouter élimine la plus grande partie de ce travail. C’est un service qui se place entre votre code et de nombreux fournisseurs de modèles : vous envoyez chaque requête à OpenRouter, vous indiquez le modèle voulu, et il transmet la requête et vous renvoie la réponse. Ses propres exemples le décrivent comme compatible avec la plupart des bibliothèques logicielles d’IA, dans un format très proche de celui de l’API d’OpenAI, avec des modèles d’OpenAI, d’Anthropic, de Google et d’autres.

## Les trois choses qui changent

Si vous savez déjà appeler l’API d’OpenAI depuis Python, seules trois choses diffèrent :

1. **L’URL de base.** C’est l’adresse Web à laquelle votre bibliothèque envoie les requêtes. Pour OpenRouter, c’est `https://openrouter.ai/api/v1`.
2. **La clé.** Vous créez une clé d’API OpenRouter sur son site Web (elle commence par `sk-or-v1-`) et vous la gardez hors de votre code, exactement comme une clé OpenAI.
3. **Le nom du modèle.** Les modèles sont nommés avec le fournisseur d’abord, puis le modèle, comme `openai/gpt-4o-mini` ou `meta-llama/llama-3.3-70b-instruct`. Vous copiez le nom exact à partir de la page du modèle sur OpenRouter.

Tout le reste, y compris `client.chat.completions.create` avec une liste de messages, est le même appel que vous feriez à OpenAI.

## Exemple concret : un prompt, trois modèles

Ce script envoie la même requête à trois modèles et affiche chaque réponse avec son nombre de jetons et son temps de réponse. Il utilise la bibliothèque officielle `openai` (version 1.x) et `python-dotenv` pour lire votre clé dans un fichier `.env`.

D’abord, installez les deux bibliothèques et créez un fichier nommé `.env` à côté de votre script :

```bash
pip install openai python-dotenv
```

```bash
OPENROUTER_API_KEY=sk-or-v1-your-key-here
```

Enregistrez ensuite ceci sous le nom `compare.py` :

```python
import time
from os import getenv
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()
client = OpenAI(
    base_url="https://openrouter.ai/api/v1",
    api_key=getenv("OPENROUTER_API_KEY"),
)

MODELS = [
    "openai/gpt-4o-mini",
    "meta-llama/llama-3.3-70b-instruct",
    "mistralai/mistral-small-3.1-24b-instruct",
]

PROMPT = ("Réécris cet avis pour l'infolettre d'une bibliothèque en trois phrases courtes "
          "et chaleureuses : « L'édifice sera fermé lundi pour la réparation des planchers. "
          "Les livres peuvent être rapportés dans la chute à livres extérieure. »")

for model in MODELS:
    start = time.time()
    reply = client.chat.completions.create(
        model=model,
        messages=[{"role": "user", "content": PROMPT}],
        temperature=0.3,
    )
    seconds = time.time() - start
    usage = reply.usage
    print(f"=== {model} ({seconds:.1f} s)")
    print(f"jetons en entrée : {usage.prompt_tokens}, jetons en sortie : {usage.completion_tokens}")
    print(reply.choices[0].message.content.strip(), "\n")
```

Lancez-le avec `python compare.py`. Passer à un quatrième modèle revient à ajouter une ligne à la liste `MODELS`. Si un nom est mal orthographié ou qu’un modèle n’est pas disponible, la bibliothèque lève une erreur pour cette requête; enveloppez l’appel dans un `try`/`except` si vous voulez que la boucle continue malgré tout.

> **À essayer :** remplacez le prompt par une vraie tâche tirée de votre travail, comme une réponse à un client ou une description de produit, et lancez le script. Avant de lire attentivement les résultats, cachez les noms des modèles et classez les trois réponses. Vérifiez ensuite quel modèle vous avez préféré.

## Comment comparer leur coût et leur qualité?

Le **coût** dépend des jetons, les petits morceaux de texte que les modèles lisent et écrivent. Chaque modèle sur OpenRouter a deux prix, un par million de jetons en entrée et un par million de jetons en sortie, et ils peuvent beaucoup varier d’un modèle à l’autre. Votre script affiche déjà les deux nombres de jetons; le coût d’une requête est donc :

```text
coût = jetons_entrée × prix_entrée ÷ 1 000 000 + jetons_sortie × prix_sortie ÷ 1 000 000
```

Pour illustrer avec des chiffres inventés : si une requête utilise 60 jetons en entrée et 80 en sortie, et qu’un modèle demande 0,15 $ US par million de jetons en entrée et 0,60 $ US par million de jetons en sortie, la requête coûte environ 0,000057 $ US. Multipliez par le nombre de requêtes que vous prévoyez par mois pour voir ce qui compte. Utilisez les nombres que chaque modèle rapporte réellement plutôt qu’une estimation commune. Copiez les prix en vigueur à partir de la page de chaque modèle au moment de faire le test, puisqu’ils changent.

La **qualité** exige un petit test honnête plutôt qu’un seul prompt. Rassemblez de dix à vingt exemples réels de la tâche, passez-les dans chaque modèle et notez les réponses à l’aide d’une courte liste de critères rédigée à l’avance : est-ce exact, le format est-il respecté, le ton est-il juste, combien de temps cela a-t-il pris? Noter sans voir les noms des modèles vous évite de favoriser une marque. Un simple tableur avec une ligne par exemple et une colonne par modèle suffit.

Décidez ensuite en ayant les deux chiffres sous les yeux. Souvent, le modèle le plus performant l’emporte sur les exemples difficiles, mais un modèle moins cher fait tout aussi bien sur les cas courants, et vous pouvez envoyer chaque type de requête à un modèle différent. Avec OpenRouter, cette décision tient à une seule chaîne dans votre code : vous pouvez donc la revoir chaque fois qu’un nouveau modèle apparaît.

## Sources

- openrouter-examples-python: src/openai_test.py (commit da9992c, April 19, 2024): https://github.com/OpenRouterTeam/openrouter-examples-python/blob/da9992c69c9e24c2afca0b8074eebfa318a86ff7/src/openai_test.py
- OpenRouter Examples (README, commit 5fcd513, November 14, 2023): https://github.com/OpenRouterTeam/openrouter-examples/blob/5fcd51324612120d03825d33f576c2aa64ae5fbc/README.md
- OpenAI Python API library (README): https://github.com/openai/openai-python/blob/4b3023466df27de4d19a93b4efbd14977254ecc0/README.md
