Skip to content
Learni
View all tutorials
Intelligence Artificielle

Comment utiliser OpenRouter avec Node.js en 2026

Introduction

OpenRouter est une plateforme révolutionnaire qui agit comme un routeur intelligent pour les modèles de langage large (LLM). Au lieu d'être verrouillé à un seul fournisseur comme OpenAI ou Anthropic, OpenRouter unifie l'accès à plus de 100 modèles via une API compatible OpenAI. Pourquoi l'utiliser en 2026 ? Les coûts sont optimisés (paiement à l'usage, crédits gratuits au départ), la latence minimisée par routage automatique, et la fiabilité assurée par fallback multi-fournisseurs.

Ce tutoriel beginner vous guide pas à pas pour intégrer OpenRouter dans une app Node.js. Nous partirons d'un projet vide pour créer un client chat complet, avec streaming et sélection de modèles. Chaque étape est actionable : copiez-collez le code et exécutez. À la fin, vous maîtriserez les bases pour scaler vers des apps IA production-ready. Imaginez un assistant virtuel qui switch seamlessly entre GPT-4o et Llama-3 – c'est OpenRouter ! (142 mots)

Prérequis

  • Node.js 20+ installé
  • Compte gratuit sur OpenRouter.ai avec clé API (créez-en une en 1 minute)
  • Éditeur de code (VS Code recommandé)
  • Connaissances basiques en JavaScript async/await

Initialiser le projet

terminal
mkdir openrouter-app
cd openrouter-app
npm init -y

Cette commande crée un dossier projet et initialise package.json. Elle prépare le terrain pour les dépendances sans configuration manuelle superflue. Évitez les pièges : exécutez toujours dans un dossier vide pour prévenir les conflits.

Obtenir votre clé API OpenRouter

Rendez-vous sur openrouter.ai/keys, connectez-vous et générez une clé API (format sk-or-v1-...). Copiez-la précieusement : elle sera utilisée via variables d'environnement pour la sécurité. OpenRouter offre 10$ de crédits gratuits pour tester sans frais.

Installer les dépendances

terminal
npm install openai dotenv

openai est le SDK officiel compatible OpenRouter (pas besoin de lib custom). dotenv charge les variables d'env. Installez en prod pour simplicité ; en 2026, ces paquets sont stables et optimisés pour ESM/CJS.

Configurer les variables d'environnement

.env
OPENROUTER_API_KEY=sk-or-v1-your-real-key-here

# Optionnel : headers pour leaderboard OpenRouter
HTTP_REFERER=https://your-app.com
RERANK_HEADER=your-app

Remplacez par votre vraie clé. Les headers optionnels boostent votre visibilité sur le leaderboard OpenRouter (crédits bonus). Ne commettez jamais .env en Git : ajoutez-le à .gitignore pour éviter les fuites de secrets.

Créer le client OpenAI

Nous configurons le SDK OpenAI en pointant baseURL vers OpenRouter. Cela rend l'API 100% compatible : même syntaxe que OpenAI, mais accès multi-modèles.

Premier chat completion simple

chat-simple.js
require('dotenv').config();
const OpenAI = require('openai');

const openai = new OpenAI({
  apiKey: process.env.OPENROUTER_API_KEY,
  baseURL: 'https://openrouter.ai/api/v1',
});

async function main() {
  try {
    const completion = await openai.chat.completions.create({
      model: 'openai/gpt-4o-mini',
      messages: [
        { role: 'user', content: 'Explique-moi OpenRouter en 2 phrases.' }
      ],
    });
    console.log(completion.choices[0].message.content);
  } catch (error) {
    console.error('Erreur:', error.message);
  }
}

main();

Ce script complet crée un chat avec GPT-4o-mini via OpenRouter. Exécutez avec node chat-simple.js. Le try/catch gère les erreurs (ex: clé invalide). Piège : vérifiez les quotas OpenRouter avant usage intensif.

Passer au streaming

Pour une UX fluide comme ChatGPT, activez le streaming : réponses token par token. OpenRouter le supporte nativement.

Chat completion en streaming

chat-stream.js
require('dotenv').config();
const OpenAI = require('openai');

const openai = new OpenAI({
  apiKey: process.env.OPENROUTER_API_KEY,
  baseURL: 'https://openrouter.ai/api/v1',
});

async function main() {
  try {
    const stream = await openai.chat.completions.create({
      model: 'anthropic/claude-3.5-sonnet',
      messages: [
        { role: 'user', content: 'Rédige un poème sur l\'IA en français.' }
      ],
      stream: true,
    });

    let fullResponse = '';
    for await (const chunk of stream) {
      const content = chunk.choices[0]?.delta?.content || '';
      process.stdout.write(content);
      fullResponse += content;
    }
    console.log('\n\nRéponse complète:', fullResponse);
  } catch (error) {
    console.error('Erreur:', error.message);
  }
}

main();

Switch vers Claude 3.5 Sonnet pour variété. Le for await accumule et affiche en temps réel. Attention : fermez toujours les streams pour éviter les fuites mémoire en prod.

Switcher de modèles et providers

multi-modeles.js
require('dotenv').config();
const OpenAI = require('openai');

const openai = new OpenAI({
  apiKey: process.env.OPENROUTER_API_KEY,
  baseURL: 'https://openrouter.ai/api/v1',
});

const modeles = [
  { nom: 'OpenAI GPT-4o mini (rapide)', model: 'openai/gpt-4o-mini' },
  { nom: 'Meta Llama 3.1 405B (puissant)', model: 'meta-llama/llama-3.1-405b-instruct:free' },
  { nom: 'Google Gemini 1.5 Pro', model: 'google/gemini-2.0-pro-exp-0801' }
];

async function testerModele(modeleInfo) {
  console.log(`\n--- Test ${modeleInfo.nom} ---`);
  const completion = await openai.chat.completions.create({
    model: modeleInfo.model,
    messages: [{ role: 'user', content: 'Quel est ton point fort ?' }],
  });
  console.log(completion.choices[0].message.content);
}

async function main() {
  for (const modele of modeles) {
    await testerModele(modele);
  }
}

main().catch(console.error);

Ce script boucle sur 3 modèles populaires (un gratuit !). Consultez openrouter.ai/models pour la liste exhaustive. Piège : certains modèles free ont limites ; surveillez les coûts via dashboard.

Exemple avec conversation multi-turns

conversation.js
require('dotenv').config();
const readline = require('readline');
const OpenAI = require('openai');

const openai = new OpenAI({
  apiKey: process.env.OPENROUTER_API_KEY,
  baseURL: 'https://openrouter.ai/api/v1',
});

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let messages = [{ role: 'system', content: 'Tu es un assistant utile en français.' }];

async function askQuestion() {
  rl.question('Vous: ', async (input) => {
    if (input.toLowerCase() === 'quit') {
      rl.close();
      return;
    }
    messages.push({ role: 'user', content: input });

    const stream = await openai.chat.completions.create({
      model: 'openai/gpt-4o-mini',
      messages,
      stream: true,
    });

    process.stdout.write('\nAssistant: ');
    for await (const chunk of stream) {
      process.stdout.write(chunk.choices[0]?.delta?.content || '');
    }
    console.log('');
    messages.push({ role: 'assistant', content: '' }); // Sera rempli par stream
    askQuestion();
  });
}

askQuestion();

Chat interactif avec historique (system prompt). Utilise readline natif Node. Attention : en prod, persitez messages en DB pour contextes longs ; limitez à 10-20 turns pour coûts.

Bonnes pratiques

  • Toujours utiliser variables d'env pour API keys : intégrez dotenv partout.
  • Choisissez modèles par usage : 'gpt-4o-mini' pour speed, 'llama-3.1-405b' pour précision gratuite.
  • Implémentez retry logic : OpenRouter fallback auto, mais ajoutez exponential backoff pour 99.9% uptime.
  • Monitorez coûts : Utilisez dashboard OpenRouter + logs usage.
  • Sécurisez endpoints : En API web, validez inputs et rate-limit.

Erreurs courantes à éviter

  • Clé API invalide : Vérifiez format sk-or-v1-... et crédits >0.
  • Oubli de baseURL : Sans 'https://openrouter.ai/api/v1', ça appelle OpenAI direct (erreur 401).
  • Streams non gérés : Fermez toujours iterators pour éviter memory leaks.
  • Modèles indisponibles : Vérifiez docs modèles ; free tiers saturés.

Pour aller plus loin