Intégration OpenAI
Règles
- Utiliser le package officiel
openai — new OpenAI({ apiKey: process.env.OPENAI_API_KEY })
- Streaming pour le chat :
stream: true avec itérateur asynchrone — ne jamais bloquer sur la complétion complète pour les réponses utilisateur
- Appels de fonctions : définir les fonctions avec JSON Schema, traiter
tool_calls dans la réponse, renvoyer les résultats sous forme de messages d'outil
- Sorties structurées : utiliser
response_format: { type: "json_schema", json_schema: {...} } ou Zod avec l'AI SDK
- Gestion des tokens : estimer les tokens avant l'envoi (environ 4 caractères par token), réduire le contexte pour rester dans les limites
- Sélection du modèle :
gpt-4o pour le raisonnement complexe, gpt-4o-mini pour les tâches simples — le rendre configurable
- Prompt système comme premier message — définir le ton, les contraintes et le format de sortie
- Température : 0 pour les sorties déterministes (extraction de données), 0,7-1,0 pour les tâches créatives
- Limitation de débit : respecter les en-têtes
x-ratelimit-*, implémenter un backoff exponentiel sur les erreurs 429
Patterns
const stream = await openai.chat.completions.create({
model: "gpt-4o",
messages,
stream: true,
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content || "";
process.stdout.write(content);
}
const response = await openai.chat.completions.create({
model: "gpt-4o",
messages,
tools: [{ type: "function", function: { name: "get_weather", parameters: schema } }],
});
À éviter
- Coder en dur les clés API — toujours utiliser les variables d'environnement
- Ignorer les limites de tokens — compter les tokens et réduire les messages de manière proactive
- Utiliser
gpt-4o pour des tâches triviales — utiliser gpt-4o-mini pour économiser des coûts
- Omettre la gestion des erreurs sur les appels API — gérer les erreurs 429, 500 et les timeouts avec élégance