IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

L'erreur coûteuse de ChatGPT : une startup raconte comment une ligne de code généré par l'IA a entraîné 10 000 dollars de perte.
Malgré les avancées de l'IA, la vigilance humaine reste indispensable

Le , par Stéphane le calme

11PARTAGES

4  0 
Dans le monde effervescent de la technologie et de l’intelligence artificielle, les startups s’appuient de plus en plus sur des outils automatisés pour accélérer leur développement. Cependant, cette dépendance peut parfois se retourner contre elles, comme l’a appris à ses dépens une startup qui a vu une simple erreur de ChatGPT lui coûter plus de 10 000 dollars. La startup en question avait activé la monétisation de son service, mais a rapidement été confrontée à un problème majeur : les utilisateurs ne pouvaient pas s’abonner, entraînant de nombreuses plaintes et la perte potentielle de clients. L’erreur a été retracée jusqu’à une seule ligne de code qui provoquait des collisions d’ID uniques pendant le processus d’abonnement.

Une startup raconte ses débuts et les défis qu'elle a dû relever lorsqu'elle s'est tournée pour la première fois vers la monétisation. Malgré ses faibles attentes, l'entreprise a été agréablement surprise d'avoir son premier client dans l'heure qui a suivi son lancement. Cependant, elle s'est rapidement trouvée confrontée à un problème majeur : elle a commencé à recevoir de nombreuses plaintes d'utilisateurs qui ne parvenaient pas à s'abonner. Malgré leurs efforts, ils n'ont pas réussi à reproduire le problème, qui semblait se produire principalement en dehors de leurs heures de travail.

Le problème, qualifié « d'hallucination à 10 000 dollars », a finalement été retracé jusqu'à une seule ligne de code qui provoquait des collisions d'identifiants uniques pendant le processus d'abonnement. Ce problème était caché en raison de la configuration de leur backend et a pris de l'ampleur lorsqu'ils ont cessé d'effectuer des modifications la nuit. Le problème a finalement été résolu et, malgré les difficultés et les ventes perdues, l'équipe considère cette expérience comme une leçon précieuse tirée de son parcours de startup.

Ce qui suit est un extrait de leur billet.


Nous avons commencé à utiliser la monétisation pour notre startup en mai dernier. Nous avions peu d'attentes, mais nous avons été agréablement surpris lorsque nous avons eu notre premier client dans l'heure qui a suivi le lancement. Ce fut un moment magique. Nous les avons remerciés, nous avons porté un toast et, comme nous venions de passer deux nuits blanches à tout préparer, nous nous sommes rapidement endormis.

Nous nous sommes réveillés ce matin-là avec plus de 40 notifications gmail de plaintes d'utilisateurs. Tout semblait s'être enflammé pendant la nuit. Aucun de ces utilisateurs ne pouvait s'abonner. Nous ne savions pas pourquoi.

Notre chemin vers la monétisation

Pour la petite histoire, le mois de mai a marqué le début du lot S23 YC et nous n'étions pas sûrs de la direction optimale à prendre après le lancement. Dalton, notre partenaire du groupe JCT, nous a conseillé d'utiliser les abonnés payants comme boussole et nous a dit de doubler le prix mensuel que nous avions déjà en tête. Finalement (et à contrecœur), nous sommes arrivés à 40 dollars par mois. Après la réunion, nous nous sommes immédiatement mis au travail pour mettre en place la monétisation. Notre projet était à l'origine une pile complète de NextJS mais nous voulions d'abord tout migrer vers Python/FastAPI. Nous l'avons fait (avec l'aide de ChatGPT), nous avons intégré Stripe... puis nous avons enchaîné avec cinq jours de sommeil, le moins que nous ayons eu de tout le mois. (Oui, cinq jours, c'est long pour trouver ce bug).

Pendant ces cinq jours, nous avons commencé à redouter de nous réveiller, sachant que nous allions être accueillis par 30/40/50 courriels de plaintes. Je me demande toujours combien de clients nous avons perdus à cause de cela. 50 courriels par jour x 5 jours x 40 par mois = 10 000 ventes perdues par mois - et ce, uniquement de la part de personnes qui se sentaient suffisamment concernées pour se plaindre. Nous répondions à ces courriels tous les jours comme des horloges. Nous ouvrions un nouveau compte, nous vérifiions que les abonnements ne posaient aucun problème, puis nous continuions à travailler dans la confusion. Rien de ce que nous faisions ne permettait de reproduire le problème et, plus étrange encore, nous ne recevions pratiquement aucune plainte pendant nos heures de travail.

L'hallucination à 10 000 dollars

Le voyage entre l'identification du problème et sa résolution effective a semblé prendre des mois. Cinq jours plus tard, d'innombrables courriels, des centaines de journaux sentry, de longs messages discord avec les ingénieurs de Stripe, et des heures et des heures à regarder cinq fichiers clés plus tard, nous l'avons trouvé 🎉. Essayez de voir si vous pouvez le repérer vous-même avant de lire la suite.


Si vous ne l'avez pas encore trouvé, le coupable était une simple ligne d'apparence innocente. Une ligne qui a été le fléau de notre existence pendant cette semaine. Une ligne qui nous a littéralement coûté 10 000 dollars. La redoutable ligne 56.


Dans le cadre de la migration de notre backend, nous traduisions les modèles de base de données de Prisma/Typescript en Python/SQLAlchemy. C'était vraiment fastidieux. Nous avons trouvé que ChatGPT faisait un travail assez exceptionnel pour cette traduction et nous l'avons donc utilisé pour la quasi-totalité de la migration. Nous avons copié-collé le code qu'il générait, nous avons vu que tout fonctionnait bien, nous l'avons essayé en production, nous avons vu que cela fonctionnait aussi, et nous avons poursuivi notre chemin.

Cependant, à ce stade, nous utilisions toujours notre API Next pour toutes les insertions dans la base de données. Python ne faisait que lire dans la base de données. La première fois que nous avons commencé à insérer des enregistrements dans la base de données en Python, c'est lorsque nous avons mis en place les abonnements. Bien que nous ayons créé à la main de nouveaux modèles SQLAlchemy pendant le processus, nous avons fini par copier le même format que ChatGPT a écrit pour nos modèles existants. Ce que nous n'avons pas remarqué, c'est que nous copiions le même problème avec la façon dont nous générions les identifiants dans tous nos modèles.

Correction de bogues

Le problème avec la ligne 56 était que nous ne faisions que passer une chaîne d'ID codée en dur au lieu d'une fonction ou d'une lambda pour générer des UUID pour nos enregistrements. Cela signifiait que pour toute instance donnée de notre backend, une fois qu'un nouvel utilisateur s'était abonné et avait utilisé cet identifiant, aucun autre utilisateur ne pouvait effectuer l'abonnement à nouveau car il en résultait une collision d'identifiant unique. Ce problème est devenu très bien caché en raison de la configuration de notre backend. Nous avions huit tâches ECS sur AWS, toutes exécutant cinq instances de notre backend (c'est exagéré, oui nous savons, mais pour être juste, nous avions des crédits AWS). Cela signifiait que chaque utilisateur disposait d'un pool de potentiellement 40 identifiants uniques sur lesquels il pouvait tomber.

Pendant la journée de travail, tout allait bien. Nous nous engagions probablement 10 à 20 fois par jour (directement sur le serveur principal bien sûr), ce qui entraînait de nouveaux déploiements de backend, nous donnant ainsi 40 nouveaux identifiants que les clients pouvaient potentiellement utiliser. Cependant, la nuit, lorsque nous avons finalement arrêté de faire des commits (quelle paresse de notre part, n'est-ce pas ?), l'ID unique de chaque serveur était capturé et provoquait des collisions d'ID dans tous les nouveaux abonnements. Les utilisateurs commençaient avec 40 serveurs possibles qui leur permettaient de s'abonner, et finissaient rapidement avec presque zéro au fur et à mesure que la nuit avançait. Résoudre enfin ce problème a été comme un poids enlevé de nos épaules. Adam a rapidement mis en place le correctif après avoir découvert ce problème et, pour la première fois de la semaine, nous avons pu nous reposer sur nos lauriers (enfin, pas vraiment, car nous avions encore dix autres incendies, mais ces histoires feront l'objet d'un autre article).

Malgré les avancées de l'IA, la vigilance humaine reste indispensable

L’erreur de ChatGPT qui a coûté 10 000 dollars à cette startup est un rappel que, malgré les avancées de l’IA, la vigilance humaine reste indispensable. Les outils d’IA sont puissants, mais ils ne remplacent pas le jugement critique et l’expertise des développeurs. En fin de compte, c’est la responsabilité des équipes humaines de s’assurer que la technologie qu’elles utilisent est sûre et fiable.

D'ailleurs, l'erreur ne saurait être imputable entièrement à ChatGPT : les développeurs auraient du prendre la peine d'analyser le code au lieu de se limiter à quelques tests avant la copie. Ils semblent le reconnaitre lorsqu'ils déclarent :

« Je voudrais commencer par dire que les pratiques en question sont très mauvaises et embarrassantes (et nous avons depuis ajouté des tests unitaires et d'intégration robustes ainsi que des alertes et des enregistrements), qu'elles auraient pu et dû être évitées, qu'il s'agissait d'erreurs humaines au-delà de tout, et qu'elles sont très évidentes avec le recul.

« Cela s'est passé à une autre époque, avec d'importantes contraintes de temps, aux tout premiers stades (premières semaines) de la création d'une entreprise. Je partage surtout cette histoire comme une anecdote amusante avec des circonstances uniques entourant la reproductibilité des bogues en prod (encore une fois à cause de notre propre stupidité) ».

Quoi qu'il en soit, tout est bien qui finit bien : « Rétrospectivement, aussi pénibles qu'aient été ces cinq jours, c'est l'un de ces moments de la vie d'une startup que nous n'oublierons jamais. Comme toutes les startups, nous avons fait une tonne d'erreurs tout au long de notre parcours, celle-ci étant peut-être la pire. J'évoquerai peut-être les autres plus tard. Nous sommes simplement heureux de pouvoir regarder ces jours-là en arrière et d'en rire. Oui, nous aurions dû faire plus de tests. Oui, nous n'aurions pas dû copier-coller du code. Oui, nous n'aurions pas dû passer directement à l'application principale. Quoi qu'il en soit, je ne regrette pas cette expérience ».

Source : rapport de la startup

Et vous ?

Quelle est votre opinion sur la fiabilité de l’intelligence artificielle dans les processus critiques d’entreprise ?
Avez-vous des expériences personnelles où l’IA a joué un rôle crucial, positivement ou négativement, dans votre travail ?
Comment pensez-vous que les entreprises peuvent équilibrer l’innovation technologique avec les risques potentiels associés à l’automatisation ?
Selon vous, quelles mesures de sécurité devraient être mises en place lors de l’intégration de solutions d’IA dans les systèmes d’entreprise ?
Pensez-vous que l’erreur mentionnée est un cas isolé ou révélateur d’un problème plus large dans l’industrie de l’IA ?
Quelles stratégies votre entreprise a-t-elle adoptées pour prévenir les erreurs coûteuses liées à l’IA ?
En tant que développeur ou utilisateur d’IA, comment assurez-vous la qualité et la précision du code généré par l’IA ?
Quel rôle les tests et la validation jouent-ils dans votre utilisation de l’IA, et comment ces processus pourraient-ils être améliorés ?

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Seb33300
Membre émérite https://www.developpez.com
Le 10/06/2024 à 11:35
L’erreur de ChatGPT qui a coûté 10 000 dollars
ChatGPT c'est un outils, le responsable ça reste le développeur...

Sinon, la prochaine fois que je déploie un bug je dirais que c'est la faute de mon clavier...
6  0 
Avatar de topic
Nouveau membre du Club https://www.developpez.com
Le 10/06/2024 à 14:34
Citation Envoyé par Fagus Voir le message
c'est dommage qu'ils n'expliquent pas mieux leur code ou c'est moi qui n'ai pas compris. Je ne connais pas SQL alchemy.

Code : Sélectionner tout
str(uuid.uuid4())
c'est sensé être relativement unique, sauf s'il ne créent qu'une seule instance de la classe subscription par serveur ce qu'ils ont l'air de dire. En ce cas c'est une erreur de logique de créer l'identifiant unique là plutôt que dans un objet par utilisateur, mais bon, même sans chatgpt ça arrive de faire des erreurs de logique surtout quand on ne dort pas.

Ce qui est plus étrange, c'est d'écrire quelque chose dans une base sans lever quelque part une erreur si la base ne crée pas les entrées...

De ce que je comprends de la doc de Django https://docs.djangoproject.com/en/5....ields/#default c'est que default prend une valeur ou un callable

En faisant
Code : Sélectionner tout
default=str(uuid.uuid4())
str(uuid.uuid4()) génère un uuid4 qui est casté en string, ça devient donc une valeur qui ne changera plus.
Pour ne pas avoir le problème ils auraient dû comme ils le disent faire une lamba ou une fonction

Code : Sélectionner tout
1
2
3
4
def generate_uuid4():
    return str(uuid.uuid4())

default=generate_uuid4
2  0 
Avatar de Jules34
Membre chevronné https://www.developpez.com
Le 10/06/2024 à 9:44
Combien de ligne de code comme ça sont déjà dans la nature ? Et la encore c'est une erreur, c'est pas un truc malicieux.

Hey Claude comment je peux supprimer une app de mon linux ?
Citation Envoyé par Chat-GPT
rm -rf /
1  0 
Avatar de Fagus
Membre expert https://www.developpez.com
Le 10/06/2024 à 11:57
c'est dommage qu'ils n'expliquent pas mieux leur code ou c'est moi qui n'ai pas compris. Je ne connais pas SQL alchemy.

Code : Sélectionner tout
str(uuid.uuid4())
c'est sensé être relativement unique, sauf s'il ne créent qu'une seule instance de la classe subscription par serveur ce qu'ils ont l'air de dire. En ce cas c'est une erreur de logique de créer l'identifiant unique là plutôt que dans un objet par utilisateur, mais bon, même sans chatgpt ça arrive de faire des erreurs de logique surtout quand on ne dort pas.

Ce qui est plus étrange, c'est d'écrire quelque chose dans une base sans lever quelque part une erreur si la base ne crée pas les entrées...
1  0 
Avatar de Aiekick
Membre extrêmement actif https://www.developpez.com
Le 10/06/2024 à 22:42
cette mesaventure va se generaliser.

le service rendu et la rapidité sont la,
-- ce qui va nous rendre feignant,
---- ce qui va nous faire perdre nos competence (comme celle que la calculette a eu sur notre capacité a faire des calculs de tete)
------ ce qui nous fera arreter se savoir apprendre differemment de que l'ia nous dira,
-------- ce qui nous fera arreter d'innover/creer par feigenantise ou parce que qu'on ne saura plus comment faire,
---------- ce qui va nous rendre dependant de l'ia,

ou alors, on se dit que l'ia n'est qu'un outil de blending avancé,
-- mais que sans nous,
---- sans notre recherche de la difference,
------ sans notre innovation,
-------- sans notre ideal,
---------- sans notre vision de ce que doit etre l'humanité,
------------ l'ia n'a rien a ce mettre sous la dent,
-------------- donc elle doit nous aider pas nous remplacer.
0  0 
Avatar de Gluups
Membre émérite https://www.developpez.com
Le 11/06/2024 à 0:34
Citation Envoyé par Aiekick Voir le message
---- ce qui va nous faire perdre nos competence (comme celle que la calculette a eu sur notre capacité a faire des calculs de tete)
Ça c'est une drôle d'idée, alors.
8*125, ça continue de faire 1000, qu'on ait une calculatrice ou pas.

Et ce n'est pas la calculatrice qui va dire si on fait fausse route, du style une erreur de virgule ...
0  1