Par le passé, nous vous avions présenté le package openai-php/laravel facilitant la communication avec les API d'OpenAI directement depuis votre Laravel.
Aujourd'hui, essayons d'approfondir l'une des fonctionnalités récentes d'OpenAI, les assistants.
Lorsque vous utilisez ChatGPT, vous êtes probablement contraint de lui fournir un contexte à l'aide d'un pré-prompt afin d'améliorer la qualité et la pertinence de ses réponses. Les connaissances de ChatGPT sont également limité, il ne sait pas tout, et n'est pas spécialisé pour répondre à des questions spécifiques.
Un assistant répond à ces problématiques en vous permettant de configurer en amont un modèle, un pre-prompt, ainsi qu'un ensemble de ressources afin de vous constituer un robot personnalisé ayant ses propres connaissances.
Voyons dans ce tutoriel comment créer rapidement notre premier assistant ChatGPT !
Configurer le package
Dans ce tutoriel, nous ne reviendrons pas en détails sur la configuration du package openai-php/laravel
.
Vous retrouverez dans notre précédent article toutes les informations nécessaires afin de configurer le package, de comprendre la tarification et de lancer vos premières requêtes vers les APIs d'OpenAI !
Une fois le package opérationnel, vous pourrez commencer la création de votre assistant.
Créer un assistant
La toute première étape consistera à créer l'assistant depuis les API, plusieurs modèles sont disponibles mais nous vous conseillons d'utiliser le plus récent à ce jour : gpt-4-turbo-preview
.
Ce dernier prend en charge une fonctionnalité essentielle pour notre assistant : la possibilité de lire et de rechercher des informations dans des fichiers que nous lui transmettrons par la suite.
1$assistant = OpenAI::assistants()->create([ 2 'name' => '', 3 'instructions' => '', 4 'tools' => [ 5 [ 6 'type' => 'retrieval', 7 ], 8 ], 9 'model' => 'gpt-4-turbo-preview',10]);11 12echo $assistant->id; // asst_[...]
Conservez bien l'identifiant de votre assistant, son id
, il vous sera utile un peu plus tard pour communiquer avec lui.
Pas de panique, si vous perdez cette valeur, votre assistant sera visible sur le panel d'administration de OpenAI à cette URL.
Transmettre des fichiers à l'assistant
Le moyen le plus simple de transmettre des fichiers à votre assistant sera d'utiliser l'interface fournie par OpenAI.
En éditant votre assistant sur la page de gestion, vous pourrez y ajouter autant de fichiers que nécessaire, ces fichiers seront par la suite visibles dans la page storage.
ChatGPT supporte un vaste choix d'extensions de fichiers, allant des documents texte aux images et incluant même les fichiers PHP, vous retrouverez la liste complète des extensions de fichiers supportées à cette URL.
Concernant la tarification, le téléchargement des fichiers coûte environ $0.20/GB
par assistant et par jour.
Cela signifie que si vous téléchargez un fichier utilisé par 3 assistants, vous paierez 0.20*3$
par GB téléchargé, vous trouverez plus de détails sur la tarification des fichiers utilisés par les assistants à cette URL.
Un même fichier peut être utilisé par plusieurs assistants.
Communiquer avec l'assistant
Désormais, notre assistant est configuré et possède ses propres connaissances à travers les fichiers que nous lui avons transmis, nous sommes prêts à communiquer avec lui !
Interroger un assistant se déroule en plusieurs étapes : nous allons commencer par créer un thread dans lequel nous insérerons des messages, ensuite, ce thread sera exécuté par notre assistant qui aura la capacité de lire les fichiers que nous lui aurons précédemment transmis :
Tout d'abord, commençons par créer un nouveau thread :
1$thread = OpenAI::threads()->create([]);
Ce thread pourra recevoir un ou plusieurs messages, nous utiliserons à chaque fois le rôle par défaut, user
:
1OpenAI::threads()->messages()->create($thread->id, [2 'role' => 'user',3 'content' => "Est-ce que tester c'est douter ?",4]);
Une fois toutes vos questions insérées dans le thread, il ne nous reste plus qu'à l'exécuter en précisant l'identifiant que vous avez conservé un peu plus tot, à la création de l'assistant :
1$threadRunResponse = OpenAI::threads()->runs()->create(2 threadId: $thread->id,3 parameters: [4 'assistant_id' => 'asst_[...]',5 ],6);7 8$status = $threadRunResponse->status;
Après cette étape, le thread sera bloqué le temps que l'assistant traite les différents messages, une simple boucle while
nous permettra de surveiller l'état du thread et d'attendre que son status passe à completed
:
1while ($status === 'queued' || $status === 'in_progress') { 2 3 sleep(1); 4 5 $threadRunResponse = OpenAI::threads()->runs()->retrieve( 6 threadId: $thread->id, 7 runId: $threadRunResponse->id, 8 ); 9 10 $status = $threadRunResponse->status;11}
La génération des réponses prendra une dizaine de secondes selon la complexité de vos questions, du modèle utilisé et des fichiers à disposition de votre assistant.
Une fois le thread complété, nous pouvons récupérer les différentes réponses à nos messages à l'aide du code suivant :
1$threadMessageListResponse = OpenAI::threads()->messages()->list($thread->id);2 3foreach ($threadMessageListResponse->data as $threadMessageResponse) {4 5 foreach($threadMessageResponse->content as $content)6 {7 echo $content->text->value;8 }9}
Félicitations, vous venez d'interagir avec votre premier assistant !
A lire
Autres articles de la même catégorie
Eclaircir le Test-Driven Development (TDD) avec Laravel
Explorons le Test Driven Development (TDD) avec Laravel
Marc COLLET
Les bases du CQRS en Laravel
Découvrir les bases de l'architecture CQRS en Laravel.
Mathieu De Gracia
Les Seeders
Créez rapidement des jeux de données grâce aux seeders !
Antoine Benevaut