gpt

De l’usage de l’intelligence artificielle

Attention : ce texte s’adresse d’abord à un public averti.

Jeudi dernier (le 14 septembre 2023 pour les lectrices et lecteurs du futur) se tenait l’assemblée générale de l’Association nationale des éditeurs de livre. En matinée, le comité  de perfectionnement avait invité deux personnes (Francis Gosselin et Valentine Goddard) pour nous entretenir du sujet de l’heure : les intelligences artificielles, et particulièrement celles dites génératives. ChatGPT, DALL-E, Midjourney et cie, leurs capacités de création ne cessent d’étonner, tandis que nos questionnements se multiplient.

Comme tout le monde, je me suis empressé d’ouvrir un compte chez OpenAi pour tester les outils. Si j’ai peu joué avec DALLE-E et les images, je me suis plus intéressé à ChatGPT. Et plus je lisais sur ses usages, meilleur je devenais pour obtenir ce que je voulais… sans toute fois lui trouver une utilité concrète. Ok je pouvais faire du jeu de rôle avec lui (essayez, c’est étonnant de voir son imagination) et lui demander de formater tel ou tel document, mais après on en fait quoi ?

Récemment, j’ai eu accès à l’Espace Éditeur de la BTLF pour vérifier comment les ouvrages du Septentrion sont présentés sur le catalogue Memento. Pour simplifier le jargon, j’ai pu constater l’information dont disposent les libraires et les bibliothécaires quand ils font des recherches en ligne. J’ai réalisé que le résumé était présenté par défaut, tandis que la 4e couverture (ou description longue) venait par après.

Les livres du Septentrion ont généralement des descriptions assez longues et descriptives, c’est une stratégie de découvrabilité que nous utilisons depuis longtemps. Pour le résumé (700 caractères maximum), ça fait moins d’un an que nous le produisons et l’avons intégré dans notre flux ONIX. Nous avons produits les textes pour les 3  dernières années, mais par manque de temps nous nous sommes arrêtés là. Il faut dire que Septentrion a maintenant plus de 1 000 titres au catalogue après 35 ans d’existence.

Et donc je me suis demandé : ChatGPT serait-il assez bon pour résumer nos descriptions longues en moins de 700 caractères ? Et que ça fasse du sens ? Parce que ce sont tout même des sujets qui demandent de la rigueur. J’ai donc exploré ce champs d’expérimentation.

1. L’essai-erreur

Je me suis donc connecté à ChatGPT,  j’ai copié-collé une description longue en lui demandant de raccourcir le texte à moins de 700 caractères. Semi-échec. Il m’a fourni un résumé convaincant, mais qui dépassait le nombre de caractères demandé. Après quelques essais (600 caractères ? 500 caractères ?), je réalise qu’il ne sait pas compter les caractères ou qu’Il comprend mal la requête. Pas grave, demandons-lui avec des mots ! On estime qu’en français, nos mots font en moyenne 5 à 6 lettres. Il faut aussi compter les espaces. Je demande donc à  ChatGPT un résumé en moins de 100 mots. Bingo ! La réponse fait moins de 700 caractères et est très intelligible. J’essaie donc avec un autre texte, plus compliqué. Ça marche. Un autre : échec, trop long. Bref, par tatônnement, j’arrive à la conclusion que 80 mots semble la bonne cible.

Maintenant que le concept est prouvé et que la requête est établie (le « prompt » lirez-vous souvent), comment intégrer cela dans notre base de données bibliographique Filemaker autrement que par une série de copier-coller fastidieux ?

2. La recherche

Google étant encore notre meilleur ami, je tente donc un « How to use ChatGPT inside Filemaker ». S’en suit la fastidieuse revue des résultats qui confirment que c’est faisable, mais qui demandent des compétences que je n’ai pas. Je n’ai jamais utilisé d’API, je n’ai jamais fait de requêtes à distance, encore moins analysé des résultats pour trouver ce dont j’ai besoin, alors que le format JSON est un vague concept. Les billets de blogues et autres videos montrent des exemples, mais ne donnent jamais un tutoriel complet de la démarche. À moins que…

3. ChatGPTception (référence douteuse à Inception)

Retour sur ChatGPT. « Explique-moi en détail comment envoyer une requête et un texte de Filemaker à CHatGPT et recevoir le résultat dans une rubrique de Filemaker. » Et la réponse s’écrit en direct devant mes yeux :

[Début de citation]

L’intégration de ChatGPT dans FileMaker pour envoyer une requête et recevoir le résultat nécessite plusieurs étapes, notamment la création de scripts personnalisés pour gérer l’interaction avec l’API de ChatGPT. Voici un guide détaillé pour réaliser cette intégration :

Étape 1 : Configuration de l’API ChatGPT

  1. Obtenez une clé API de ChatGPT en vous inscrivant sur le site Web d’OpenAI (https://beta.openai.com/signup/).
  2. Une fois que vous avez obtenu la clé API, vous pourrez l’utiliser pour communiquer avec le service ChatGPT.

Étape 2 : Création de la base de données FileMaker

  1. Si vous n’avez pas déjà une base de données FileMaker, créez-en une en suivant les étapes de création de base de données standard dans FileMaker.
  2. Créez une nouvelle table dans votre base de données FileMaker pour gérer les requêtes et les réponses de ChatGPT. Par exemple, nommez-la « ChatGPT ».

Étape 3 : Définition des champs de table

  1. Dans la table « ChatGPT », créez les champs suivants :
    • Champ « ID » : Un champ ID unique pour chaque enregistrement.
    • Champ « Texte d’Entrée » : Pour stocker le texte que vous souhaitez envoyer à ChatGPT.
    • Champ « Réponse de ChatGPT » : Pour stocker la réponse de ChatGPT.

Étape 4 : Création de scripts FileMaker

  1. Créez deux scripts personnalisés dans FileMaker : un pour envoyer la requête à ChatGPT et un pour gérer la réponse.

Script d’envoi de requête à ChatGPT

Ce script envoie la requête à ChatGPT en utilisant votre clé API.

Set Variable [$apiKey; Value:"VOTRE_CLE_API"]
Set Variable [$texteRequete; Value:ChatGPT::Texte d'Entrée]
Set Variable [$url; Value:"https://api.openai.com/v1/engines/davinci/completions"]
Insert from URL [Select; With dialog: Off; ChatGPT::Réponse de ChatGPT; $url; cURL options: "-H \"Authorization: Bearer " & $apiKey & "\" -H \"Content-Type: application/json\""; JSON data: JSONSetElement ( "{}" ; "prompt" ; $texteRequete ; JSONString )]

Ce script effectue les étapes suivantes :

  • Définit une variable pour votre clé API.
  • Récupère le texte de la requête depuis le champ « Texte d’Entrée ».
  • Utilise la fonction « Insert from URL » pour envoyer la requête à ChatGPT en utilisant l’API REST d’OpenAI. Assurez-vous de remplacer « https://api.openai.com/v1/engines/davinci/completions » par l’URL de l’API appropriée si elle a changé depuis ma dernière mise à jour en septembre 2021.
  • Utilise l’en-tête d’autorisation avec votre clé API.
  • Stocke la réponse JSON dans le champ « Réponse de ChatGPT ».

Script de gestion de la réponse de ChatGPT

Ce script extrait la réponse de ChatGPT du champ « Réponse de ChatGPT » et la formate selon vos besoins.

Set Variable [$reponseJSON; Value:ChatGPT::Réponse de ChatGPT]
Set Variable [$reponseTexte; Value:JSONGetElement ($reponseJSON ; "choices[0].text »)]
Set Field [ChatGPT::Réponse de ChatGPT; $reponseTexte]

Ce script effectue les étapes suivantes :

  • Récupère la réponse JSON depuis le champ « Réponse de ChatGPT ».
  • Utilise la fonction « JSONGetElement » pour extraire le texte de la réponse JSON (vous devrez adapter cette étape en fonction du format de la réponse JSON de ChatGPT).
  • Stocke la réponse textuelle dans le champ « Réponse de ChatGPT ».

Étape 5 : Création d’une mise en page FileMaker

  1. Créez une mise en page pour saisir le texte de la requête dans le champ « Texte d’Entrée » et afficher la réponse de ChatGPT depuis le champ « Réponse de ChatGPT ».

Étape 6 : Test de l’intégration

  1. Remplissez le champ « Texte d’Entrée » avec le texte que vous souhaitez envoyer à ChatGPT.
  2. Exécutez le script « Envoyer Requête à ChatGPT » pour envoyer la requête et obtenir la réponse.
  3. Exécutez le script « Gestion de la Réponse de ChatGPT » pour formater et afficher la réponse de ChatGPT.

Cela devrait vous permettre d’envoyer une requête à ChatGPT depuis FileMaker et de recevoir la réponse dans la rubrique « Réponse de ChatGPT ». Assurez-vous de personnaliser davantage l’intégration en fonction de vos besoins spécifiques et des changements éventuels dans l’API de ChatGPT depuis ma dernière mise à jour en septembre 2021.

[fin de citation]

Ouf ! Là il me parle de Filemaker, ça tombe bien, c’est un logiciel que je maîtrise plutôt bien.

3. L’intégration

La mise en garde finale de ChatGPT n’est pas dénuée d’intérêt : ses connaissances s’arrêtent en 2021. Si l’essentiel de sa réponse concernant Filemaker est bonne (une petite erreur dans la fonction « Insert from url » qui ne gère pas directement un ensemble de données structuré, il faut plutôt passer par les paramètres cURL), la partie le concernant lui-même est désuète. Pas étonnant pour un service qui évolue si rapidement, mais tout de même ironique. Une petite visite sur la plateforme d’aide en ligne de OpenAi permet de se mettre à la page et de corriger les erreurs. Bon ça s’écrit en un paragraphe, mais ça m’a quand même pris deux heures ! Encore une fois, je ne suis pas programmeur.

4. Le résultat

Au final, ça fonctionne. Plutôt bien. Ça ne résout pas la guerre dans le monde, mais ça résume adéquatement une description longue en un résumé de moins de 700 caractères. Surtout, ça le fera sur les 900 titres du catalogue qui n’avaient pas encore cette description.

Le coût ? J’ai acheté 10$ de crédit pour faire des requêtes en utilisant leur API. Après tous mes tests, j’ai dépensé 0,20$. Passer l’ensemble de mon catalogue devrait coûter quelques dollars. C’est raisonnable !

Prochaine étape : demander à ChatGPT de me donner trois codes BISAC pour chaque titre. Et cette fois-ci, je ne passerai pas plus de 30 minutes pour intégrer le tout dans notre base de données.

Ce sont ces petits outils et ces petits gains de temps qui rendront les ChatGPT de ce monde indispensables à notre vie dans les années à venir.

Complément

Pour les celles et ceux qui voudraient ne pas refaire mon chemin de Damas, voici le code final. La rubrique prompt_gpt est la concaténation de la requête désirée avec le texte cible. La rubrique Texte_de_4e_700 reçoit le résultat.

gpt

 

 

 

 

Pour la définition de JSONDATA :
JSONSetElement ( « {} » ; [ "messages[0].content » ; Livres::prompt_gpt ; JSONString ] ; [ "messages[0].role » ; « user » ; JSONString ] ; [ "model" ; "gpt-3.5-turbo" ; JSONString ] ; [ "temperature" ; ,7 ; JSONNumber ] )

Pour le calcul de la variable $curl
« -X POST  » & ¶ & « -H \ »Authorization: Bearer  » & $api_key & « \ »" & ¶ & « -H \ »Content-Type: application/json\ »" & ¶ & « -d @$JSONDATA »