Communiquez avec ChatGPT depuis Laravel

Publié le 18 avril 2023 par Mathieu De Gracia
Mis à jour le 25 mars 2024
Couverture de l'article Communiquez avec ChatGPT depuis Laravel

Le nouveau modèle de langage de l'entreprise OpenAI, GPT-4, est désormais disponible en bêta depuis quelques semaines sur leur site internet.

Cette dernière version améliore grandement les capacités de traitement et d'analyse de texte de son ainé GPT-3, étant entrainée sur une quantité de données bien supérieur à ce dernier.

Saviez-vous que pouviez facilement interagir avec ChatGPT et bien d’autre IA directement depuis votre application Laravel grace à un package simplifiant l'interaction avec les APIs de OpenAI ?

Découvrons ensemble le package openai-php/laravel !

Installation

openai-php/laravel est un wrapper du package openai-php developpé et maintenu par Nuno Maduro et Sandro Gehri, il nécessite au minimum une version 9.46 de Laravel :

1composer require openai-php/laravel

L’utilisation du package exige une clé d’API que vous récupérerez sur le site de OpenAI à cette URL en cliquant sur “Create new secret key”.

Une fois cette clé en votre possession, ajoutez là dans votre .env :

1OPENAI_API_KEY=

Vous pouvez désormais contacter les API de OpenAI !

Des tokens et des crédits

L'utilisation des API de OpenAI n'est pas gratuite, chaque requête a un certain coût en token selon sa complexité et le modèle utilisé.

À la création de votre compte, l’équivalent de 18 dollars de crédit vous sera octroyé pour tester les différents services, ces 18 dollars sont amplement suffisants pour s’amuser avec les IA et se faire une idée de leur potentiel.

Vous pouvez suivre la consommation de vos crédits à cette URL.

Pas d’inquiétude si vous épuisez vos crédits, les API deviendront tout simplement inaccessible pour votre compte ne provoquant pas de surconsommation.

Pour autant, il est nécessaire de comprendre quelques subtilités concernant l'utilisation de vos crédits.

Depuis le 25 mars 2024, il est désormais nécessaire de provisionner en amont votre compte d'un montant en token !

Les modèles

Le modèle représente en quelque sorte le moteur que vous souhaitez utiliser derrière un endpoint d'API, concernant l'API de conversation ChatGPT les modèles suivants sont actuellement disponibles : gpt-3.5-turbo-0301 et gpt-3.5-turbo.

Chaque modèle possède ses propres caractéristiques en matière de rapidité, de performances et de coûts en tokens.

Par exemple, le modèle gpt-3.5-turbo est plus rapide et moins coûteux en tokens que le modèle gpt-3.5 (désormais indisponible) mais retournera des réponses généralement moins précises et pertinentes que ce dernier.

Les tokens

Chaque requête que vous effectuez avec les API de OpenAI a un coût en tokens, les tokens n'ont pas de valeur fixe et leur équivalent en crédit varie selon le modèle sélectionné.

Par exemple, si vous utilisez l'équivalent de 1'000 tokens pour générer des réponses à l'aide du modèle gpt-3.5-turbo, ces 1'000 tokens vous coûteront 0,002 dollars en crédits, tandis que le même nombre de tokens utilisés avec le modèle DALL·E coûteront 0,02 dollars en crédits.

Vous retrouverez le pricing des modèles à cette URL.

En résumé, le coût d'une requête est déterminé par le nombre de tokens nécessaires pour générer la réponse et la valeur en crédit de ces tokens sera indexé par le modèle utilisé.

Usage

Maintenant que nous sommes plus à l'aise avec la notion de credit, de tokens et de modèle, retournons à notre package OpenAI en contactant l'api de conversation pour générer notre première réponse à l'aide du modele gpt-3.5-turbo.

1use OpenAI\Laravel\Facades\OpenAI;
2 
3/* OpenAI\Responses\Chat\CreateResponse */
4$response = OpenAI::chat()->create([
5 'model' => 'gpt-3.5-turbo',
6 'messages' => [
7 [
8 'role' => 'user',
9 'content' => "Est-ce que tester c'est douter ?",
10 ],
11 ],
12]);
13 
14echo $response->choices[0]->message->content;

Dans le cas présent la réponse obtenue a été la suivante :

Non, tester son code signifie vérifier son fonctionnement pour s'assurer de sa qualité et de sa fiabilité. Tester permet de détecter d'éventuelles erreurs, failures ou anomalies dans le code afin de les corriger et d'améliorer sa performance. Tester son code contribue à garantir la satisfaction du client et améliorer la confiance envers le produit ou le service.

Cette variable $response est une instance de la class CreateResponse qui englobe un certain nombre d’informations concernant la réponse que l'on vient d'obtenir.

Le coût en token que vous venez de consommer est également rapidement accessible :

1$response->usage->totalTokens; // 141

Plusieurs options s'offrent à nous afin de paramétrer au mieux la réponse que nous souhaitons obtenir de la part du modèle.

Vous pouvez notamment préciser le nombre maximum de token que pourra consommer le modèle pour générer une réponse à l'aide de l’option max_tokens.

En précisant un max_token de 1, soit la valeur minimum, la réponse à la question précédente sera cette fois-ci très expéditive.

1$response = OpenAI::chat()->create([
2 'model' => 'gpt-3.5-turbo',
3 'max_tokens' => 1,
4 'messages' => [
5 [
6 'role' => 'user',
7 'content' => "Est-ce que tester c'est douter ?",
8 ],
9 ],
10]);
11 
12echo $response->choices[0]->message->content; // "Non."

La précédente réponse, plus approfondie, avait nécessité 141 tokens !

Attention, si vous limitez les ressources de votre modèle, vous risquez d'obtenir des phrases incomplètes, voire totalement inexploitables. Un équilibre doit être trouvé entre la qualité de la réponse souhaitée et le coût en token, voire même de laisser le modèle consommer autant de tokens que nécessaires pour générer une réponse satisfaisante.

Les messages contiennent également une propriété finishReason permettant de savoir si la réponse a été générée avec succès.

1echo $response->choices[0]->message->finishReason; // "length."

Si la valeur de finishReason est length, cela signifie que la réponse n'a pas pu être entièrement générée car le modèle a atteint la limite de tokens allouée pour cette requête, vous obtiendrez donc une phrase probablement incomplète.

En revanche, si cette valeur est completion, cela indique que la réponse a été générée dans le temps imparti et dans la limite des tokens alloués.

Une seconde option, n, est également utile si vous souhaitez obtenir plusieurs générations de réponses pour une même question.

1$response = OpenAI::chat()->create([
2 'model' => 'gpt-3.5-turbo',
3 'n' => 3,
4 'messages' => [
5 [
6 'role' => 'user',
7 'content' => "Est-ce que tester c'est douter de son code ?"
8 ],
9 ],
10]);
11 
12foreach ($response->choices as $choice) {
13 echo $choice->message->content;
14}

Les réponses d'un modèle ne sont pas déterministes, vous obtiendrez toujours des nuances, des variations de formulations voir même plusieurs approches différentes de votre question en demandant la génération de plusieurs réponses successives.

Vous pouvez cependant contrôler cette imprévisibilité grace à une dernière option : la temperature.

La valeur de température doit être comprise entre 0 et 2, lorsque cette dernière est faible, la réponse générée est plus prévisible et habituelle, vous obtiendrez ainsi des phrases généralement plus fiables et cohérentes.

En revanche, avec une température élevée, la réponse générée aura tendance à être plus inattendues ou créatives.

1$response = OpenAI::chat()->create([
2 'model' => 'gpt-3.5-turbo',
3 'temperature' => 0,
4 'messages' => [
5 [
6 'role' => 'user',
7 'content' => "Qu'elle était la couleur du cheval blanc d'Henri IV"
8 ],
9 ],
10]);

Par exemple, à la question "Quelle était la couleur du cheval blanc d'Henri IV ?" la réponse obtenue avec une faible température a été prévisible et pertinente :

Le cheval blanc d'Henri IV était blanc.

Alors que la réponse générée à cette même question avec une température de 2 a été la suivante :

Il y a de nombreux mythes associés au roi Henri IV de France qui chevauchait un cheval blanc. Certains sont issus de légendes incertaines et nous ne connaissons pas réellement la couleur de son cheval. Par conséquent, il n'y a pas de réponse certaine à cette question.

Cette phrase, plus créative que la précédente est également bien plus couteuse en tokens, générer des réponses inhabituelles ou diversifiées sera en effet bien plus long et demandeur en ressources !

Les API disponibles

Nous avons vu dans cet article quelques exemples d'utilisation de l'api de conversation mais bien d'autres APIs sont accessibles depuis le package.

Vous pourrez par exemple générer des images avec DallE ou bien encore retranscrire un fichier audio en texte avec Whisper, voici l'intégralité des clients accessibles à travers notre package :

1use OpenAI\Laravel\Facades\OpenAI;
2 
3OpenAI::chat();
4OpenAI::completions();
5OpenAI::embeddings();
6OpenAI::audio();
7OpenAI::edits();
8OpenAI::files();
9OpenAI::models();
10OpenAI::fineTunes();
11OpenAI::moderations();
12OpenAI::images();

Vous retrouvez une documentation complète pour chacune de ces API directement sur le site de OpenAI à cette URL.

Mathieu De Gracia avatar
Mathieu De Gracia
Des fois, mon chat code à ma place 🐱

A lire

Autres articles de la même catégorie