Pour créer un chatbot avec l'api chatgpt, vous reliez votre application à un modèle OpenAI par des requêtes API, puis vous gérez vous-même la clé, l’historique et l’affichage des réponses. Cette approche vous donne la maîtrise du comportement du bot et de son intégration, avec une facturation liée aux jetons traités.
Un premier prototype tient en quelques appels de code. Pour en faire un service fiable, vous devez aussi garder la clé côté serveur, limiter la taille des conversations et prévoir quoi répondre quand une requête échoue.
À retenir
- Vous payez l’usage de l’API en fonction des jetons traités.
- Votre application renvoie les messages utiles pour maintenir le fil de la conversation.
- Un serveur intermédiaire protège la clé et contrôle les requêtes.
API ChatGPT et navigateur : quelle différence ?
L’API vous permet d’intégrer un modèle à votre propre application, tandis que le navigateur vous donne accès à une interface de discussion prête à l’emploi. Avec l’API, vous construisez l’expérience et prenez en charge la mémoire, la sécurité et le suivi de l’usage.
Comment la facturation à l’usage fonctionne-t-elle ?
L’API facture les jetons traités par le modèle, en distinguant généralement les jetons envoyés et ceux générés. Un jeton correspond à une portion de texte, et le coût dépend du modèle choisi ainsi que du volume de la requête et de la réponse.
Votre abonnement ChatGPT et l’utilisation de l’API sont deux usages distincts. Pour estimer le coût d’une conversation, tenez compte du message système, des messages précédents que vous renvoyez et de la réponse attendue.
Pourquoi faut-il renvoyer l’historique à chaque appel ?
Une requête API ne conserve pas à elle seule le contexte des appels précédents : votre application doit transmettre les messages nécessaires à la suite de l’échange. Sans ces messages, le modèle traite la nouvelle question sans le fil conversationnel que vous souhaitez lui faire reprendre.
Votre application peut stocker les échanges dans une base de données ou dans une session temporaire. À chaque appel, elle sélectionne les éléments utiles, puis les inclut dans la requête.
Pour essayer les mêmes réglages sans écrire de code, voir OpenAI Playground : à quoi il sert vraiment.
Quelles sont les étapes du premier appel à l’API ?
Votre premier appel demande une clé, un identifiant de modèle disponible pour votre compte et une liste de messages structurée. En séparant ces éléments de votre interface, vous gardez le code plus facile à sécuriser et à faire évoluer.
Créer et protéger une clé d’API
Créez une clé dans l’espace développeur d’OpenAI, puis stockez-la dans une variable d’environnement sur votre serveur. Évitez de la copier dans un fichier partagé, dans un dépôt de code ou dans le JavaScript envoyé au navigateur.
Par exemple, vous pouvez définir une variable d’environnement dans votre environnement serveur :
export OPENAI_API_KEY="votre_cle"
Limitez l’accès à cette variable aux services qui en ont besoin. Si une clé apparaît dans un dépôt ou dans des journaux accessibles, révoquez-la et remplacez-la.
Choisir un modèle adapté au projet
Choisissez un modèle en fonction du type de réponses attendu, du budget et de la latence visée. Vérifiez les capacités et les limites indiquées pour les modèles auxquels votre compte a accès, puis testez la qualité sur des questions représentatives de votre usage.
Utilisez l’identifiant du modèle choisi dans vos appels. Évitez de le disperser dans plusieurs fichiers : une configuration unique facilite les changements et les tests.
Définir le rôle du chatbot avec un message système
Le message système fixe les consignes générales que le chatbot doit suivre, comme son rôle, son ton et les limites de ses réponses. Soyez précis et opérationnel : indiquez le public visé, les sujets autorisés et la marche à suivre lorsqu’une information manque.
Par exemple : « Vous êtes un assistant de support. Répondez en français avec des étapes courtes. Si la demande sort du périmètre du produit, indiquez-le clairement. » Gardez ces règles séparées des messages envoyés par les utilisateurs.
Exemples de premier appel en Python et en JavaScript
Les exemples ci-dessous utilisent l’interface standard de complétion de chat. Remplacez MODELE_CHOISI par l’identifiant d’un modèle accessible à votre compte.
En Python, installez le paquet openai, puis exécutez l’appel depuis un serveur où la variable OPENAI_API_KEY est définie :
from openai import OpenAI
client = OpenAI()
reponse = client.chat.completions.create(
model="MODELE_CHOISI",
messages=[
{"role": "system", "content": "Vous êtes un assistant de support en français."},
{"role": "user", "content": "Comment réinitialiser mon mot de passe ?"},
],
)
print(reponse.choices[0].message.content)
En JavaScript, installez le paquet openai et exécutez ce code côté serveur :
import OpenAI from "openai";
const client = new OpenAI();
const reponse = await client.chat.completions.create({
model: "MODELE_CHOISI",
messages: [
{ role: "system", content: "Vous êtes un assistant de support en français." },
{ role: "user", content: "Comment réinitialiser mon mot de passe ?" },
],
});
console.log(reponse.choices[0].message.content);
Comment gérer les réponses et la mémoire du chatbot ?
Votre application garde la main sur les messages envoyés et sur la réponse affichée à l’utilisateur. Une structure cohérente des rôles, un historique maîtrisé et un affichage progressif rendent l’échange plus lisible et plus prévisible.
Utiliser les rôles système, utilisateur et assistant
Les messages portent un rôle qui précise leur origine. Le rôle system contient les consignes générales, user représente les demandes et assistant les réponses produites par le modèle.
Pour poursuivre une conversation, envoyez les messages précédents dans leur ordre, avec leurs rôles. N’insérez pas une réponse de l’utilisateur dans le rôle assistant : la distinction aide le modèle à interpréter correctement le fil.
Conserver puis limiter l’historique de conversation
Stockez l’historique associé à une session ou à un compte, selon les besoins de votre application et vos règles de conservation des données. Pour chaque appel, gardez les consignes utiles et les échanges nécessaires à la compréhension de la demande en cours.
Quand l’historique s’allonge, vous pouvez retirer les échanges anciens ou en conserver un résumé contrôlé par votre application. Testez cette réduction sur des conversations réelles afin de vérifier que les détails nécessaires restent disponibles.
Afficher la réponse progressivement avec le streaming
Le streaming transmet la réponse par fragments au fil de sa génération, ce qui permet à votre interface de commencer l’affichage avant la fin de l’appel. Votre code doit lire chaque fragment, l’ajouter au texte affiché et gérer aussi la fermeture ou l’échec du flux.
En Python, la forme générale de l’appel ressemble à ceci :
flux = client.chat.completions.create(
model="MODELE_CHOISI",
messages=messages,
stream=True,
)
for fragment in flux:
texte = fragment.choices[0].delta.content
if texte:
print(texte, end="", flush=True)
Dans une interface web, faites transiter le flux par votre serveur, puis transmettez les fragments au navigateur avec un mécanisme adapté à votre application.
Ce que « mémoire » recouvre côté produit est expliqué dans la mémoire de ChatGPT, et l’ajout de vos propres documents dans entraîner ChatGPT sur vos données.
Comment fiabiliser le chatbot en production ?
Un chatbot de production doit traiter les erreurs API, les limites de débit et les contraintes de contexte sans bloquer l’expérience utilisateur. Vous devez aussi tester le comportement du système lorsque le modèle ne peut pas répondre.
Gérer les erreurs et les limites de débit
Traitez séparément les erreurs d’authentification, les requêtes invalides, les limites de débit et les indisponibilités temporaires. Une erreur de clé ne se corrige pas par une nouvelle tentative automatique, tandis qu’une limite de débit peut justifier une attente avant de réessayer.
Prévoyez des tentatives espacées progressivement et une limite au nombre de reprises. Enregistrez le code d’erreur et un identifiant de requête utile au diagnostic, sans journaliser les clés ni les contenus sensibles.
Respecter la fenêtre de contexte
Chaque modèle a une capacité maximale de contexte, qui inclut les consignes, l’historique et la réponse générée. Votre application doit réserver une partie de cette capacité à la réponse et réduire les messages transmis lorsque la conversation approche de la limite.
Comptez les jetons avec les outils appropriés au modèle choisi ou appliquez une limite conservatrice à la taille des messages. Une erreur de dépassement doit conduire à une réduction contrôlée de l’historique, pas à la suppression aveugle de tout le contexte.
Prévoir des réponses en cas d’échec de l’API
Si l’appel échoue, affichez un message bref qui indique que la réponse n’a pas pu être générée et propose une action utile, par exemple réessayer plus tard. Ne présentez pas une réponse partielle comme si elle était complète.
Votre interface peut conserver le message de l’utilisateur pendant une panne afin d’éviter une nouvelle saisie. Si le produit traite une demande urgente ou sensible, indiquez clairement la voie de secours appropriée.
Pour l’embarquer dans une application, voir créer une application mobile avec l’aide de ChatGPT.
Sécuriser la clé et garder le contrôle des coûts
Vous devez protéger la clé côté serveur et encadrer chaque requête par des règles de coût et d’accès. Une clé exposée ou un historique transmis sans limite peut entraîner des usages inattendus et des dépenses difficiles à maîtriser.
Faire passer les requêtes par un serveur intermédiaire
Faites appeler votre serveur par le navigateur, puis laissez ce serveur envoyer la requête à l’API. Cette architecture permet de garder la clé privée et de vérifier l’identité de l’utilisateur, sa fréquence d’appels et la taille des messages avant d’engager des coûts.
Appliquez aussi des limites par utilisateur ou par session, selon votre produit. Le serveur peut alors refuser une requête anormale avant qu’elle n’atteigne l’API.
Ne jamais exposer la clé dans le navigateur
Une clé placée dans le code JavaScript, une page HTML ou une requête réseau visible peut être récupérée par les visiteurs. Ne la transmettez jamais au client, même si votre application limite déjà le nombre de messages.
Si vous avez besoin d’une interface web, le navigateur doit appeler votre propre serveur. Celui-ci conserve la clé dans sa configuration et communique avec l’API.
Fixer un plafond de dépenses et surveiller les jetons
Définissez un budget interne maximal pour le projet et configurez les alertes ou plafonds disponibles dans votre espace de gestion. Vérifiez régulièrement les dépenses et le volume de jetons, car une hausse du nombre d’utilisateurs ou de la taille moyenne des conversations modifie la facture.
Suivez au minimum le modèle appelé, le volume de requêtes et les jetons consommés. Comparez ces indicateurs à votre budget, puis réduisez la taille des réponses ou l’historique transmis si l’usage dépasse vos prévisions.
Éviter un historique trop volumineux et la dépendance à un fournisseur
Une conversation qui renvoie tous les messages accumulés augmente le volume traité à chaque appel. Limitez l’historique, résumez les échanges anciens avec prudence et conservez vos données dans un format que votre application maîtrise.
Pour réduire la dépendance à un fournisseur, gardez les appels API derrière une couche de code interne et évitez de lier votre logique métier à un format propriétaire inutile. Documentez les comportements attendus et prévoyez des tests si vous devez changer de modèle ou de fournisseur.
Un chatbot fiable commence par un serveur bien conçu
Un chatbot fiable repose sur un serveur qui protège la clé, contrôle les requêtes et gère les erreurs avant qu’elles n’atteignent l’utilisateur. En conservant séparément les consignes, l’historique et les paramètres de modèle, vous pouvez faire évoluer chaque partie sans exposer vos secrets.
Commencez avec un périmètre fonctionnel limité, puis vérifiez la qualité des réponses, la consommation de jetons et les cas d’échec. Si votre chatbot doit répondre à partir de documents, OpenAI décrit une approche de questions-réponses fondée sur les embeddings et l’API de complétion de chat dans son aide consacrée à la création d’un chatbot.
Pour brancher ce serveur sur une interface existante, voir ChatGPT sur Telegram, une skill Alexa ou un terminal Linux.