REX - L’utilisation de l’IA générative chez Fairplayer

“Tu rêves de devenir le prochain grand joueur du LOU Rugby ?”

Voici une des expériences exclusives qui pourrait être proposée par Fairplayer ! Et si je vous disais que cette accroche a été générée par ChatGPT ?

Dans cet article, nous explorons comment Fairplayer a tiré profit de l'application industrielle de l'IA générative. Explorons la mise en place de cette solution et ses limites.

Problème rencontré

Fairplayer est une solution proposant de faciliter le financement des clubs sportifs tout en fédérant leur communauté de supporters autour d’un catalogue d’expériences exclusives encore peu ou pas commercialisées.

Concrètement, Fairplayer fournit aux clubs une plateforme en marque grise qui permet la vente de leurs produits. La solution comprend la boutique et son back-office ainsi qu’un backend commun.

Figure 1 : Détail d’un produit

Une évolution majeure est en cours pour donner la liberté totale aux clubs de gérer leur propre marketplace et leurs produits.

Afin de capter de nouveaux clubs, Fairplayer contacte les clubs prospects avec des environnements préconçus, créant ainsi une forte impression lors des démonstrations. Avec la multiplication des clubs et des prospects, il devient impératif de générer de nombreux environnements fréquemment et rapidement. La création d'un environnement de démo avec Fairplayer implique non seulement de mettre en place le club, mais aussi de définir son catalogue de produits, ce qui est vite devenu chronophage.

Étant une startup avec une équipe polyvalente mais des ressources limitées, ce sont les développeurs de Fairplayer qui sont chargés de créer les environnements d’où l'idée de recourir à l'IA pour alléger cette charge de travail.

Notre solution

Voici l'interface de création d'un Exclusive, un produit proposé dans notre boutique. L’utilisateur remplit le formulaire et peut, s'il le souhaite, obtenir une suggestion de description en cliquant sur la baguette magique au-dessus de la description.

Figure 2 : Interface de création d’un produit

Pour répondre à ce besoin, nous avons intégré l'API de ChatGPT. Afin de créer une description de produit, nous nous appuyons sur les informations du club actuel et le nom du produit renseigné.

Cependant, nous devions prendre en compte le délai de réponse de l'API. Pour résoudre ce problème, le champ de description apparaît en dernier sur la page, le nom étant la première information à renseigner, une requête est automatiquement envoyée à ChatGPT dès qu’il est renseigné. La suggestion de description devient alors indisponible le temps que la réponse de la requête soit reçue.

Il est important de noter que cette fonctionnalité est entièrement facultative et elle sert principalement de fondement pour la rédaction d'une description ou pour générer du contenu de manière pratique, plutôt que de simplement utiliser un texte de remplissage tel que le Lorem Ipsum.

Génération

Prenons l’exemple du club du LOU Rugby.
En nommant mon produit “Expérience immersion : dans la peau d'un joueur” et en appliquant la description suggérée, j’obtiens la description suivante :

Viens vivre l'expérience immersive exclusive dans la peau d'un joueur de LOU Rugby ! Grâce à cet Exclusive tu peux entrer dans les coulisses du club et te retrouver plongé dans un entraînement, être sur le terrain avec les joueurs et même bénéficier des secrets des pros.


Cet Exclusive te permet de vivre une expérience unique et de t’immerger dans le monde du sport professionnel. Tu pourras en profiter à chaque début de saison et découvrir les coulisses du club et les secrets des joueurs. Avec l’expérience immersion tu pourras être sur le terrain avec les joueurs et même participer à un entraînement. Tu bénéficieras aussi des conseils des entraîneurs et d'un retour personnel de l'arbitre du match.


Tu pourras ensuite compléter ton expérience exclusive avec des souvenirs inoubliables. Tu recevras un sweat exclusif et une affichette signée par tes joueurs préférés pour t’immortaliser lors de cette expérience.


Viens vivre l'expérience exclusive et unique dans la peau d'un joueur de LOU Rugby. Tu recevras les souvenirs qui t’accompagneront à jamais et t’immergeras dans l’univers du rugby professionnel.

Alors, convaincu ? 🙂

Le prompt utilisé a évolué itérativement au fil de nos utilisations et de nos retours.  
Nous avons par exemple appliqué le tutoiement propre à l’ambiance de la plateforme et indiqué une taille indicative que devrait faire la description.

Implémentation de l’API ChatGPT

Cette fonctionnalité est implémentée via un endpoint REST sur notre backend Spring Boot.

/api/clubs/{clubSlug}/exclusive-description-suggestion
Figure 3 : Endpoint de suggestion de description

Cet endpoint prend en paramètre le slug de notre club en question ainsi que le nom de l’Exclusive en body.

Ensuite, nous utilisons la librairie OpenAI Java (github.com/TheoKanning/openai-java), appuyée par la documentation officielle d’OpenAI, afin d’interroger l’API. La construction de cet appel est décrite en Figure 4.

@Component

class OpenAiCaller {

 private final OpenAiService service;


 public OpenAiCaller(OpenAiService service) {
   this.service = service;
 }

 public String execute(OpenAiInput input, ChatGPTModel model) {

   CompletionRequest completionRequest = CompletionRequest
     .builder()
     .prompt(input.toPrompt())
     .model(model.toString())
     .maxTokens(2048)
     .build();
   return service.createCompletion(completionRequest).getChoices().get(0).getText();
 }
}
Figure 4 : OpenAiCaller

Le prompt de l’appel est construit grâce à notre classe OpenAiInput.

Le model est déterminé par l’énumération ChatGPTModel. Actuellement et depuis nos tests initiaux, nous utilisons le text-davinci-003. La liste des modèles est disponible à cette adresse https://platform.openai.com/docs/models/gpt-3-5.

Le maxTokens définit le nombre de token max à générer par la requête (voir ce que signifie un token help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them).

Cet appel est testé de façon unitaire et en test d’intégration.

Si vous êtes intéressés d’en savoir plus sur Fairplayer d’un point de vue technique, je vous recommande l’article Sous le capot de Fairplayer.

Pour ce qui est du coût de l’intégration de cet API, cela va dépendre de deux facteurs, à savoir le nombre de tokens générés ainsi que le modèle utilisé. Pour l’utilisation quotidienne mais pas abusive que nous en avons eu, les coûts sont restés entre 1 et 2€/mois.

Génération d’images

Nous avons également exploré d'autres utilisations de l’IA générative sur le projet Fairplayer, notamment la génération d’images grâce à Dall-E pour nos exclusives. L’idée était de générer des visuels uniques toujours dans l’idée de créer des environnements rapidement destinés aux clubs.

Figure 5 : Génération d’image à partir d’un texte

Figure 6 : Génération d’image à partir d’une autre

Les résultats des tests réalisés n’ont pas été satisfaisants en raison d'un manque de contexte et de compréhension du modèle vis-à-vis du club. Bien que la génération ait été pertinente pour des éléments connus et simples tels qu'un stade ou une coupe, elle s'est avérée plus approximative pour des éléments comme des maillots ou des joueurs. De plus, les textes générés étaient illisibles.

Cette fonctionnalité mérite d'être explorée davantage, il pourrait être nécessaire d’essayer de meilleurs modèles ou de revoir notre approche, peut-être en utilisant des calques et en générant seulement une portion de l'illustration, par exemple.

Conclusion

Cette feature répond très bien à notre besoin et nous a fait gagner beaucoup de temps au quotidien.

Cependant, pour l’industrialisation de notre back-office, l’utilisation de ChatGPT a ses limites. Au cours de son utilisation, nous avons constaté des générations étranges, comme des fautes et des phrases incohérentes appelées hallucinations. Cela peut s’expliquer par le fait que nos instructions sont relativement limitées, le prompt utilisé étant assez succinct, ce qui entraîne une compréhension du contexte souvent limitée. Il y a encore de nombreuses perspectives d’évolutions pour la feature, comme la prise en compte de plus de paramètres ou la montée de version du modèle.

Il est à noter que, bien que l'utilisation de ChatGPT soit appropriée pour notre cas d'usage et pour les utilisateurs novices en général, elle pourrait s'avérer moins adaptée pour les experts du domaine.