Réponse courte
L’appel de fonctions, ajouté à l’API d’OpenAI le 13 juin 2023, permet aux développeurs de décrire les outils que leur application peut utiliser, et permet à GPT-4 ou à GPT-3.5 Turbo de répondre par une demande bien structurée d’utiliser l’un d’eux plutôt que par du texte ordinaire. L’application exécute elle-même l’outil, renvoie le résultat, et le modèle le transforme en une réponse claire.
Question de suivi Comment une personne débutante peut-elle commencer à créer avec l’appel de fonctions?
Hier, le 13 juin 2023, OpenAI a annoncé une série de mises à jour pour les développeurs qui bâtissent sur ses modèles. La fonction vedette est l’appel de fonctions (function calling) : une façon pour GPT-4 et GPT-3.5 Turbo de dire, dans un format précis et prévisible, « s’il te plaît, exécute cet outil avec ces détails ». La même annonce apporte de nouvelles versions des modèles, une version de GPT-3.5 Turbo qui lit quatre fois plus de texte, et des prix plus bas.
Si vous avez utilisé les plugiciels de ChatGPT, vous avez vu l’idée du côté de l’utilisateur : le robot conversationnel décide qu’il a besoin d’aide extérieure, utilise un outil et fait rapport. L’appel de fonctions donne cette capacité à n’importe quel développeur, dans sa propre application.
Ce qu’OpenAI a annoncé
Le billet de blogue, signé par Atty Eleti, Jeff Harris et Logan Kilpatrick d’OpenAI, énumère plusieurs changements à l’API, le service qui permet à des programmes d’envoyer du texte aux modèles d’OpenAI et de recevoir des réponses :
| Changement | Détail |
|---|---|
| Appel de fonctions | Intégré aux nouvelles versions de juin des deux modèles : gpt-4-0613 et le gpt-3.5-turbo-0613 correspondant |
| Contexte plus long | gpt-3.5-turbo-16k lit environ 16 000 jetons, soit à peu près 20 pages, au double du prix standard |
| Modèle de clavardage moins cher | Les jetons d’entrée de gpt-3.5-turbo coûtent 25 % de moins, soit maintenant 0,0015 $ US par tranche de 1 000 (les jetons de sortie coûtent 0,002 $ US par tranche de 1 000) |
| Plongements moins chers | text-embedding-ada-002 coûte 75 % de moins, soit 0,0001 $ US par tranche de 1 000 jetons |
| Mises à niveau | Les applications qui utilisent les noms de modèles standards passeront aux nouvelles versions le 27 juin; les versions de mars restent offertes jusqu’au 13 septembre |
Un jeton est un fragment de texte, souvent une partie de mot. Les plongements sont des listes de nombres qui captent le sujet d’un passage, utilisées pour la recherche et les recommandations. OpenAI dit aussi qu’elle invitera beaucoup plus de personnes inscrites sur la liste d’attente de GPT-4 au cours des prochaines semaines, dans le but de supprimer complètement cette liste.
Comment fonctionne l’appel de fonctions
En programmation, une fonction est une action qui porte un nom et reçoit des entrées. Par exemple, check_library_hours(branch, date) pourrait vérifier l’heure d’ouverture d’une succursale de bibliothèque. Avant l’appel de fonctions, un développeur qui voulait qu’un modèle déclenche une telle action devait le demander poliment dans le prompt, puis essayer de décortiquer le texte qui revenait. Parfois ça marchait; parfois le modèle ajoutait du bavardage ou changeait le format.
Désormais, le développeur envoie au modèle une liste de fonctions offertes, chacune avec un nom, une courte description et les entrées qu’elle accepte, écrites en JSON Schema, une façon standard de décrire des données. OpenAI dit que les nouveaux modèles ont subi un ajustement fin, c’est-à-dire un entraînement supplémentaire, pour reconnaître quand une fonction serait utile et pour répondre en JSON, un format texte simple pour les données structurées, conforme à la description.
Un point passe facilement inaperçu : le modèle n’exécute jamais rien lui-même. Il ne fait que proposer l’appel. C’est votre code qui décide de l’exécuter ou non, l’exécute et renvoie le résultat. Le résumé de TechCrunch affirme que les modèles « créent du code » pour les fonctions; selon la description d’OpenAI elle-même, le modèle rédige les arguments d’un appel et le programme du développeur fait le reste.
Un exemple concret, étape par étape
Imaginez une petite application qui répond aux questions sur la bibliothèque d’une ville. Le développeur décrit une seule fonction, check_library_hours, qui a besoin d’un nom de succursale et d’une date.
- L’utilisateur demande : « La succursale Eastside est-elle ouverte dimanche? »
- L’application envoie la question à gpt-3.5-turbo-0613, avec la description de
check_library_hours. - Le modèle répond non pas par du texte, mais par une demande structurée :
{"name": "check_library_hours", "arguments": "{\"branch\": \"Eastside\", \"date\": \"Sunday\"}"}
- L’application exécute sa propre fonction, qui consulte l’horaire de la bibliothèque et renvoie, par exemple,
{"open": "12:00", "close": "17:00"}. - L’application renvoie ce résultat au modèle dans un nouveau message.
- Le modèle répond à l’utilisateur en mots simples : « Oui, la succursale Eastside est ouverte le dimanche, de midi à 17 h. »
L’annonce d’OpenAI décrit la même boucle en trois temps avec une question sur la météo à Boston. Le schéma est toujours le même : le modèle choisit, votre code agit, et le modèle explique.
Pourquoi c’est important
Ce changement rend les applications d’IA plus fiables. Une sortie structurée veut dire moins de réponses mal formées et moins d’approximations dans le code. OpenAI énumère des usages comme des robots conversationnels qui consultent des outils externes, la transformation d’une demande comme « qui sont mes meilleurs clients ce mois-ci? » en requête de base de données, et l’extraction de noms, de dates et de lieux d’un long texte pour en faire une liste bien ordonnée.
Il met aussi des risques en lumière. OpenAI prévient que le texte renvoyé par un outil peut contenir des instructions cachées qui poussent le modèle à faire quelque chose d’imprévu. Son conseil : n’utiliser que des outils de confiance, et demander à l’utilisateur de confirmer avant toute action qui a des effets dans le monde réel, comme envoyer un courriel à quelqu’un, publier un message ou faire un achat.
À essayer : choisissez une tâche que vous faites souvent, comme réserver une salle de réunion. Écrivez la fonction que vous donneriez à un modèle : son nom, une description d’une phrase et chacune des entrées dont elle a besoin. Écrivez ensuite trois façons différentes dont une personne pourrait la demander, et vérifiez si vos entrées couvrent les trois.
Comment une personne débutante peut-elle commencer à créer avec l’appel de fonctions?
Commencez petit, avec une seule fonction qui ne fait que lire de l’information, comme les heures de la bibliothèque ci-dessus. Les fonctions en lecture seule sont sûres pour expérimenter, parce que rien ne change dans le monde si le modèle se trompe. La documentation d’OpenAI pour les développeurs décrit les deux nouveaux champs de requête, functions et function_call; le second vous permet d’obliger le modèle à utiliser une fonction précise quand vous en avez besoin.
Rédigez des descriptions claires. Le modèle choisit une fonction d’après son nom et sa description; « Trouve les heures d’ouverture d’une succursale de bibliothèque à une date donnée » fonctionne donc mieux que « heures ». Indiquez quelles entrées sont obligatoires, et donnez des exemples de valeurs acceptables.
Vérifiez ensuite tout ce que le modèle vous envoie avant d’agir. Validez les entrées, gérez les valeurs manquantes ou bizarres, et ajoutez une étape de confirmation pour tout ce qui envoie, publie, paie ou supprime. Traitez le modèle comme un assistant serviable qui remplit un formulaire, et laissez votre programme décider si le formulaire est soumis.
Sources
- Function calling and other API updates — OpenAI, 13 juin 2023
- OpenAI intros new generative text features while reducing pricing — TechCrunch, 13 juin 2023