Réponse courte
Dans Google Sheets, vous pouvez écrire une petite fonction personnalisée en Apps Script qui envoie le texte d’une cellule à l’API d’OpenAI et inscrit la réponse de GPT-3 dans la cellule. Avec une clé d’API, une vingtaine de lignes de code et une limite de dépenses fixée dans votre compte OpenAI, une colonne de notes sur des produits peut devenir une colonne d’ébauches de descriptions.
Question de suivi Comment éviter les mauvaises surprises sur la facture?
Un tableur est un terrain naturel pour faire des essais avec GPT-3. Bien des petites entreprises gardent déjà leurs listes de produits, leurs objets de courriels ou leurs réponses à des sondages en lignes, et les tâches pour lesquelles elles veulent de l’aide se présentent aussi ligne par ligne : rédiger une description pour chaque produit, étiqueter chaque commentaire, raccourcir chaque titre. Au lieu de copier du texte d’un côté à l’autre vers le Playground, vous pouvez appeler le modèle directement depuis une formule.
Google Sheets le permet grâce à Apps Script, un langage fondé sur JavaScript intégré aux applications de Google. Vous écrivez une fonction une seule fois, puis vous l’utilisez dans n’importe quelle cellule, comme vous utiliseriez SOMME ou RECHERCHEV.
Ce qu’il vous faut avant de commencer
- Une clé d’API d’OpenAI. C’est la chaîne secrète, qui commence par
sk-, affichée sur la page des clés d’API de votre compte, à beta.openai.com. Traitez-la comme un mot de passe. - Une feuille Google Sheets contenant du texte de départ, par exemple des notes sur des produits dans la colonne A.
- Un choix de modèle.
text-davinci-002donne les meilleurs résultats; Curie coûte beaucoup moins cher et suffit pour bien des tâches plus simples.
La fonction personnalisée, étape par étape
Ouvrez votre feuille et choisissez Extensions > Apps Script. D’abord, enregistrez votre clé pour qu’elle ne soit pas tapée dans la formule elle-même. Collez cette fonction, mettez votre clé entre les guillemets, exécutez-la une fois avec le bouton Exécuter, puis supprimez la clé du code :
function saveKey() {
PropertiesService.getScriptProperties().setProperty('OPENAI_API_KEY', 'sk-...');
}
Ajoutez maintenant la fonction qui fait le travail :
/**
* Rédige une courte description de produit avec GPT-3.
* @param {string} notes Notes sur le produit.
* @customfunction
*/
function DESCRIBE(notes) {
if (!notes) return '';
var key = PropertiesService.getScriptProperties().getProperty('OPENAI_API_KEY');
var prompt = 'Rédige une description de produit de deux phrases pour une boutique en ligne. ' +
'Sois concret et chaleureux. N’invente aucune caractéristique.\n\nNotes sur le produit : ' + notes + '\n\nDescription :';
var response = UrlFetchApp.fetch(
'https://api.openai.com/v1/engines/text-davinci-002/completions', {
method: 'post',
contentType: 'application/json',
headers: { Authorization: 'Bearer ' + key },
payload: JSON.stringify({ prompt: prompt, max_tokens: 80, temperature: 0.7 })
});
var data = JSON.parse(response.getContentText());
return data.choices[0].text.trim();
}
Enregistrez, revenez à la feuille et tapez =DESCRIBE(A2) dans la cellule B2. Un instant plus tard, une ébauche de description apparaît.
Voici le rôle de chaque élément :
| Élément | Rôle |
|---|---|
@customfunction | Fait apparaître DESCRIBE dans les suggestions de formules de la feuille |
UrlFetchApp.fetch | Envoie la requête sur le Web; les fonctions personnalisées ont le droit de l’utiliser |
| L’URL | Le point de terminaison des complétions d’OpenAI pour le moteur choisi, la même adresse qu’utilise la bibliothèque Python officielle |
Authorization: Bearer | Prouve que la requête vient de votre compte |
max_tokens: 80 | Plafonne la longueur de chaque réponse, et donc son coût |
choices[0].text | Le texte écrit par GPT-3 |
Deux limites sont bonnes à connaître. Google interrompt toute fonction personnalisée qui prend plus de 30 secondes, ce qui arrive rarement avec une courte complétion. Et une fonction personnalisée ne peut pas demander d’autorisations supplémentaires; elle est donc limitée à des services comme URL Fetch, qui ne touchent pas à vos données personnelles.
Si la cellule affiche une erreur au lieu du texte, vérifiez trois choses dans l’ordre : que saveKey s’est bien exécutée, que le nom du moteur dans l’URL est écrit exactement, et que votre compte dispose encore de crédit ou de quota. Survoler la cellule en erreur affiche habituellement le début de la réponse renvoyée par OpenAI, qui nomme souvent le problème en termes simples.
À essayer : inscrivez dans la colonne A des notes sur cinq produits réels ou inventés, appliquez =DESCRIBE(A2) dans toute la colonne B, et lisez les ébauches. Ajoutez ensuite au prompt une phrase sur le ton de votre boutique et comparez le deuxième lot avec le premier.
Comment éviter les mauvaises surprises sur la facture?
Commencez par connaître le prix. OpenAI facture par tranche de 1 000 jetons, en comptant à la fois le prompt envoyé et le texte renvoyé; 1 000 jetons correspondent à environ 750 mots. Davinci coûte 0,06 $ US par 1 000 jetons, et Curie 0,006 $ US. Le prompt ci-dessus plus une note sur un produit totalise environ 60 jetons, et la réponse est plafonnée à 80; chaque cellule utilise donc au plus environ 140 jetons, soit moins d’un cent avec Davinci. Une feuille de 500 produits coûterait quelques dollars. Les nouveaux comptes reçoivent aussi 18 $ US de crédit gratuit pour leurs trois premiers mois.
Fixez ensuite un plafond. Dans les paramètres de facturation d’OpenAI, vous pouvez fixer une limite stricte (hard limit), au-delà de laquelle l’API cesse de répondre, et une limite souple (soft limit), qui vous envoie un courriel quand les dépenses dépassent un seuil. Fixez les deux avant de partager la feuille avec qui que ce soit. L’utilisation du Playground compte dans le même total.
Quelques habitudes de tableur gardent la facture prévisible :
- Faites l’essai sur cinq lignes avant de remplir une colonne de plusieurs milliers.
- Figez les résultats qui vous plaisent. Une fonction personnalisée s’exécute de nouveau quand sa cellule d’entrée ou la formule change. Copiez les descriptions terminées et utilisez Collage spécial > Valeurs uniquement, pour que les modifications ultérieures ne déclenchent pas de nouveaux appels payants.
- Gardez
max_tokensbas et le prompt court; les deux sont facturés. - Essayez d’abord Curie pour les tâches simples. OpenAI affirme qu’il peut accomplir bien des tâches de Davinci pour le dixième du coût.
- Faites attention à qui peut modifier la feuille. Toute personne qui a le droit de modifier la feuille peut ouvrir son script; partagez donc le fichier avec prudence et ne collez jamais la clé dans une cellule.
Sources
- Custom Functions in Google Sheets — Google for Developers
- OpenAI Python library (README and source, commit of 14 April 2022) — OpenAI (GitHub), 14 avril 2022
- Pricing (OpenAI API) — OpenAI, 5 avril 2022