API LLM pour développeurs : démarrer avec les chat completions
Vous avez une super idée de fonctionnalité boostée à l'IA, mais dès que vous ouvrez la doc de l'API, vous tombez sur un mur de jargon : tokens, temperature, streaming, prompts système. On dirait qu'il faut un deuxième diplôme juste pour envoyer un message. Bonne nouvelle : le concept de base est simple. Vous envoyez une liste de messages, et le modèle renvoie une réponse. Tout le reste, c'est du réglage. Cet article vous guide pas à pas dans l'intégration d'une API de chat completion LLM dans votre application, avec du code que vous pouvez adapter dès aujourd'hui.
Qu'est-ce qu'une API de chat completion ?
Au fond, une API de chat completion prend un historique de conversation en entrée et renvoie le message suivant. Cet historique est un tableau d'objets message, chacun avec un role et un content. Les rôles sont généralement system, user et assistant. Le message système définit le comportement de l'assistant, le message utilisateur correspond à ce que la personne a tapé, et le message assistant correspond à la réponse précédente du modèle. En envoyant tout l'historique, vous donnez au modèle le contexte nécessaire pour générer une réponse cohérente.
La plupart des fournisseurs (OpenAI, Anthropic, Google et les alternatives open source) suivent un schéma similaire, même si l'endpoint et le payload exacts peuvent différer. Une fois que vous en maîtrisez un, vous vous adaptez rapidement aux autres.
Étape par étape : votre premier appel API
Parcourons un exemple minimal en Python avec le SDK OpenAI. Installez-le avec pip install openai. Placez votre clé API dans une variable d'environnement pour ne pas la mettre dans votre code.
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Explain what an API is in one sentence."}
]
)
print(response.choices[0].message.content)
Et voilà. L'objet de réponse contient une liste de choices ; en général, on prend la première. Le contenu du message correspond à la réponse du modèle. Vous pouvez aussi accéder aux statistiques d'usage pour suivre la consommation de tokens.
Les paramètres clés à régler
Au-delà des messages, quelques paramètres contrôlent la sortie du modèle :
- model : le modèle à utiliser. Les petits modèles sont moins chers et plus rapides ; les gros modèles sont plus performants.
- temperature : contrôle l'aléatoire. 0 est déterministe, 1 est créatif. Pour des tâches factuelles, utilisez une valeur basse ; pour du brainstorming, une valeur plus élevée.
- max_tokens : limite la longueur de la réponse. Définissez-le pour éviter des réponses anormalement longues (et coûteuses).
- top_p : une alternative à temperature pour contrôler la diversité. En général, on ajuste l'un ou l'autre, pas les deux.
- stream : quand c'est vrai, l'API envoie des réponses partielles au fur et à mesure de leur génération, ce qui améliore la latence perçue.
Le streaming pour une meilleure UX
Attendre une réponse complète peut sembler lent, surtout pour les réponses longues. Le streaming vous permet d'afficher le texte au fur et à mesure. Voici comment gérer un stream en Python :
stream = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Tell me a story."}],
stream=True
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
Chaque chunk contient un delta avec un morceau de la réponse. Vous accumulez ces morceaux pour reconstruire le message complet. Dans une application web, vous pouvez transmettre ces chunks au navigateur via Server-Sent Events (SSE) ou WebSockets.
Gérer les erreurs et les rate limits
Les API échouent. Le réseau a des hoquets. Les rate limits se déclenchent. Votre intégration doit gérer tout ça avec élégance. Les erreurs courantes incluent :
- 401 Unauthorized : clé API invalide. Vérifiez votre variable d'environnement.
- 429 Too Many Requests : vous avez atteint une limite de débit. Implémentez un backoff exponentiel et réessayez.
- 500 Internal Server Error : problème côté fournisseur. Réessayez après un délai.
Enveloppez toujours vos appels API dans des blocs try/except et loguez les échecs. En production, envisagez une bibliothèque comme tenacity pour les retries.
Gérer les coûts et les tokens
Les tokens sont la monnaie des API LLM. Les tokens d'entrée comme de sortie comptent dans votre facture. Pour garder des coûts prévisibles :
- Utilisez des modèles plus petits pour les tâches simples.
- Tronquez l'historique de conversation aux derniers messages quand le contexte complet n'est pas nécessaire.
- Définissez
max_tokenspour plafonner la longueur de la sortie. - Mettez en cache les réponses fréquentes si votre cas d'usage le permet.
Surveillez l'usage via le dashboard du fournisseur ou en loguant le nombre de tokens de chaque réponse.
Considérations de sécurité et de confidentialité
Quand vous envoyez des données utilisateur à une API LLM, vous confiez ces données à un tiers. Consultez les politiques de rétention des données du fournisseur. Évitez d'envoyer des informations sensibles comme des mots de passe ou des identifiants personnels. Si vous devez le faire, envisagez des modèles auto-hébergés ou des fournisseurs offrant de solides garanties de confidentialité. Et n'exposez jamais votre clé API dans du code côté client ; passez toujours par un proxy sur votre backend.
FAQ
Quelle est la différence entre une chat completion et une completion classique ?
Les chat completions sont conçues pour les interfaces conversationnelles. Elles acceptent une liste de messages avec des rôles, ce qui permet au modèle de maintenir le contexte. Les completions classiques prennent une simple chaîne de prompt et sont moins adaptées aux dialogues multi-tours.
Comment choisir le bon modèle ?
Commencez par un modèle plus petit et moins cher pour le prototypage. Si vous avez besoin d'un meilleur raisonnement ou d'un contexte plus long, passez à un modèle plus gros. Testez les deux sur votre tâche spécifique pour trouver le meilleur compromis coût-performance.
Puis-je utiliser plusieurs fournisseurs de LLM dans une même application ?
Oui. Beaucoup de développeurs abstraient les appels API derrière une interface et changent de fournisseur selon le coût, la latence ou les fonctionnalités. Des bibliothèques comme LiteLLM ou LangChain peuvent aider à unifier différentes API.
Prochaines étapes
Maintenant que vous savez faire un appel de base, expérimentez avec les prompts système pour orienter le comportement du modèle. Essayez le streaming pour améliorer l'expérience utilisateur. Et gardez toujours un œil sur la consommation de tokens. Au fur et à mesure de votre développement, vous pourriez avoir besoin de formater les réponses JSON du modèle pour un traitement ultérieur. Pour cela, un formateur JSON peut vous aider à valider et à embellir la sortie rapidement.