Come utilizzare le API di OpenAI con Laravel


Pubblicato il (11 mesi fa)

Tempo di Lettura Stimata: 3 minuti

Capitoli Totali: 10

Immagine di anteprima dell'articolo Come utilizzare le API di OpenAI con Laravel

Rilasciato alla fine del 2022 dall’azienda OpenAI (azienda fondata da Elon Musk e Sam Altman, ndr) ChatGPT è lo strumento digitale dei record. Ha raggiunto 1 Milione di utenti in poco più di 5 giorni. Chi ha fatto meglio? Nessuno. Instagram ci ha impiegato 75 giorni.

time-to-one-million-users.jpeg

ChatGPT al momento non è altro che una piccola dimostrazione di forza di quello che OpenAI ha creato.

Il motore alla base di ChatGPT è basato su linguaggio naturale ed è stato progettato per comprendere e generare testo in modo simile a come lo fa un essere umano. Conversare con “Lui/Lei” è un po come parlare con un essere umano.

Questo stesso motore ha dato i natali a DALL-E (generatore di immagini da testo) e ad altri progetti Indie.

Si, perché il vero valore aggiunto di OpenAI sono le API.

API di OpenAI disponibili

A questo link puoi trovare tutta la documentazione delle API disponibili:

  • Chat
  • Completamento del Testo
  • Trascrizione
  • Generazione di Immagini’
  • Moderazione

E molto altro come la possibilità di creare un proprio dataset per allenare la AI per casi d’uso particolari.

Puoi trovare la collezione completa delle API su questo link Postman

Laravel e OpenAI: in che modo?

Bella domanda! I più informati sapranno che le intelligenze artificiali e il machine learning sono zona di competenza del linguaggio di sviluppo chiamato Python.

ChatGPT non è da meno. Il core è stato scritto principalmente in Python utilizzando la libreria di deep learning TensorFlow (sempre in Python) di Google.

In particolare, il modello utilizza una variante della architettura di trasformatori (Transformer architecture) chiamata appunto GPT (Generative Pre-trained Transformer) che viene addestrata su enormi quantità di dati testuali per generare testo in modo simile a come lo farebbe un essere umano.

Ripeto, tutto sviluppato in Python.

Ma come possiamo utilizzare tutto ciò se l’articolo parla di Laravel?

Fortunatamente, quei bravi ragazzi di OpenAI, hanno rilasciato diverse API e librerie che consentono agli sviluppatori di altri linguaggi di integrare i loro strumenti.

Anche con PHP/Laravel.

Credenziali OpenAI

Per accedere alle API messe a disposizione da OpenAI dovrai autenticarti sul loro portale e generare una API KEY.

Registrati sul sito ufficiale e vai a questo link:

https://platform.openai.com/account/api-keys

1.png

Ti verranno regalati 5.00$ di prova cosi da toccare con mano tutte le potenzialità di OpenAI.

Bene, una volta dentro genera la tua Secret Key cliccando su Create New Secret key e copiala negli appunti.

Ci servirà tra poco.

Ricorda che la Secret Key è confidenziale! Non condividerla con nessuno.

Crea il progetto Laravel e OpenAI

Il momento di Laravel è giunto. Utilizzeremo Il wrapper per Laravel di OpenAI che ti permetterà di interagire con tutti gli endpoint.

Installa Laravel sulla tua macchina (trovi una guida dettagliata qui) e successivamente il package openai-php/laravel tramite Composer:

laravel new chatgpt-laravel
composer require openai-php/laravel

Secondo step, da terminale lancia il comando per pubblicare il file di configurazione:

php artisan vendor:publish --provider="OpenAI\Laravel\ServiceProvider"

Hai appena creato il file di configurazione (config/openai.php) in cui andrai a definire il parametro OPENAI_API_KEY attraverso il file .env.

Aggiungi quindi la chiave API (Secret Key di OpenAI) recuperata nel precedente paragrafo e incollala nel file .env:

OPENAI_API_KEY=la-tua-chiave-api

Configurare il progetto Laravel e OpenAI

La libreria OpenAI è stata scritta e configurata da Sandro Gehri e Nuno Maduro, gente che conosce Laravel a menadito!

Avrai a disposizione delle Facades rapide ed indolore: non dovrai configurare nulla ne tantomeno spulciarti la documentazione ufficiale, il wrapper ha semplificato tutto.

Analizzeremo adesso le varie attività disponibili con OpenAI.

API Images - Genera immagini da testo su Laravel con OpenAI

Argomento molto ricercato: le immagini.

Come creare le immagini su Laravel utilizzando OpenAi? Bhe, semplicemente utilizzando la Facades corretta!

<?php
use Illuminate\Support\Facades\Route;
use OpenAI\Laravel\Facades\OpenAI;
 
Route::get('/images', function () {
$response = OpenAI::images()->create([
'prompt' => 'A giant purple elephant sitting in front of a pc',
'n' => 1,
'size' => '1024x1024',
'response_format' => 'url',
]);
echo $response->data[0]->url;
});

Dovrai passare i parametri:

  • prompt: Il comando da digitare per interrogare l’AI, puoi utilizzare una stringa statica come ho fatto io o preparati un bel form per l’inserimento da Browser;
  • n: Il numero di immagini che ti aspetti;
  • size: Il formato altezza x larghezza;
  • response_format: il modo in cui l’api ti risponderà

Ok, chiama da browser l’url: /images

E tramite la echo ti verrà stampato l’url dell’immagine appena richiesta.

Chiaro no?

Questo sarà il mio output:

https://oaidalleapiprodscus.blob.core.windows.net/....

Che mi riporterà ad un elefante gigante viola seduto davanti ad un computer:

esempio-php-prompt.jpg

Qui la documentazione ufficiale

API Completions - Completa un testo utilizzando Laravel con OpenAI

Questa API funziona in modo che l’utente, inviando una richiesta di completamento tramite il prompt, possa generare un test più dettagliato impostando fattori come la lunghezza massima del completamento e una serie di suggerimenti per indicare il contesto o il tono dell’output desiderato.

 
<?php
use Illuminate\Support\Facades\Route;
use OpenAI\Laravel\Facades\OpenAI;
 
Route::get('/completions', function () {
$response = OpenAI::completions()->create([
'model' => 'text-davinci-003',
'prompt' => 'Crea una headline per un articolo tutorial su Laravel e OpenAI di 155 caratteri da inserire come descrizione di un post su Linkedin.',
'temperature' => 0.6,
'max_tokens' => 1024,
]);
echo $response['choices'][0]['text'];
});

Dovrai passare i parametri:

  • model: Il modello di GPT da utilizzare per la chiamata;
  • prompt: Il comando da digitare in cui inserire un testo da migliorare o completare secondo parametri;
  • temperature: La temperatura in Completions controlla la “creatività” del modello durante la generazione del testo. In pratica, maggiore è la temperatura, maggiore sarà la probabilità che il modello generi parole o frasi meno prevedibili o inaspettate, ma anche meno coerenti con il prompt iniziale. Al contrario, un valore basso di temperatura produce testi più coerenti e meno sorprendenti. La temperatura è un valore float compreso tra 0 e 1.
  • max_tokens: Il numero massimo di token utilizzati per la generazione della risposta;

Chiamando da Browser l’url: /completions

Il risultato sarà:

"Come costruire un'applicazione di intelligenza artificiale con Laravel e OpenAI: un tutorial passo-passo per una nuova era di sviluppo web!"

Qui la documentazione ufficiale

API Chat - Crea ChatGPT con Laravel e OpenAI

Ti basterà configurare una interfaccia grafica in modo da prendere dei prompt in stile ChatGPT e mandarli a questo endpoint.

Io nei parametri ho simulato un botta e risposta tra Il sistema ed un utente:

 
<?php
use Illuminate\Support\Facades\Route;
use OpenAI\Laravel\Facades\OpenAI;
 
Route::get('/chat', function () {
$response = OpenAI::chat()->create([
'model' => 'gpt-3.5-turbo',
'messages' => [
[
'role' => 'system',
'content' => 'Ciao! Sono il tuo assistente, come posso aiutarti?'
],
[
'role' => 'user',
'content' => 'Tra 1 kg di piume e 1kg di ferro, cosa è più pesante?'
],
],
 
]);
echo "LaravelGPT ha scritto: " . $response->choices[0]->message->content;
});

Dovrai passare i parametri:

  • model: Il modello di GPT da utilizzare per la chiamata;
  • messages: un array in cui inserire un pregresso di conversazione tra il sistema e un utente;

Nel parametro messages c’è la storia della conversazione, quindi noi ci aspetteremo una response che vada appunto a completare questa discussione. Il risultato sarà:

LaravelGPT ha scritto: In realtà, entrambi pesano lo stesso! Un chilogrammo di piume e un chilogrammo di ferro hanno entrambi la stessa massa di 1 chilogrammo. Ciò che li differenzia è la loro densità, ovvero la quantità di massa in un determinato spazio. Le piume sono meno dense del ferro, quindi un chilogrammo di piume ha un volume maggiore di un chilogrammo di ferro.

La documentazione ufficiale puoi trovarla qui.

API Audio - Trascrizione degli audio con Laravel e OpenAI

Un altro elemento davvero interessante è la trascrizione dell’audio.

Ti basterà dare in pasto all’endpoint un file .mp3 e in men che non si dica ti troverai il contenuto come testo.

Da ex-universitario mi avrebbe fatto molto comodo uno sbobinatore cosi efficace!

<?php
use Illuminate\Support\Facades\Route;
use OpenAI\Laravel\Facades\OpenAI;
 
Route::get('/transcription', function () {
$response = OpenAI::audio()->transcribe([
'model' => 'whisper-1',
'file' => fopen(public_path('/audio/monologo-the-big-kahuna.mp3'), 'r'),
'response_format' => 'verbose_json',
]);
echo "Lingua dell'audio: ".$response->language;
echo "Durata dell'audio: ".$response->duration;
echo "Trascrizione: ".$response->text;
});

Dovrai passare i parametri:

  • model: Il modello di GPT da utilizzare per la chiamata;
  • file: Il file fisico dove è presente l’audio da trascrivere;
  • response_format: Il formato della response;

L’audio in questione è il discorso finale del film The Big Kahuna, eccolo:

Lingua dell'audio: italian
Durata dell'audio: 236.4
Trascrizione: "Goditi potere e bellezza della tua gioventù. Non ci pensare. Il potere di bellezza e gioventù lo capirai solo una volta a Passit. Ma credimi, tra vent'anni guarderai quelle tue vecchie foto e in un modo che non puoi immaginare adesso. Quante possibilità avevi di fronte e che aspetto magnifico avevi. Non eri per niente grasso come ti sembrava. Non preoccuparti del futuro, oppure preoccupati, ma sapendo che questo ti aiuta quanto masticare un chewing gum per risolvere un'equazione algebrica. I veri problemi della vita saranno sicuramente cose che non ti erano mai passate per la mente, di quelle che ti pigliano di sorpresa alle 4 di un pigro martedì pomeriggio. Fa una cosa ogni giorno che sei spaventato, e non ti preoccupa di niente. ..... Sii cauto nell'accettare consigli, ma sii paziente con chi li dispensa. I consigli sono una forma di nostalgia. Dispensarli è un modo di ripescare il passato dal dimenticatoio, ripulirlo, passare la vernice sulle parti più brutte e riciclarlo per più di quel che vaglia. Accetta il consiglio per questa volta."

Qui la documentazione Ufficiale


API Moderations - Modera i commenti direttamente con Laravel e OpenAI

Potrai controllare i messaggi inseriti dagli utenti del tuo sito e mitigare eventuali contenuti inappropriati.

OpenAI offre uno schema abbastanza specifico di classificazione:

  • hate: Contenuti che esprimono, incitano o promuovono l’odio basato su razza, sesso, etnia, religione, nazionalità, orientamento sessuale, disabilità o casta;
  • hate/threatening: Contenuti di odio che includono anche violenza o gravi danni nei confronti del gruppo preso di mira;
  • self-harm: Contenuti che promuovono, incoraggiano o raffigurano atti di autolesionismo, come il suicidio, il taglio e i disturbi alimentari;
  • sexual: Contenuti destinati a suscitare eccitazione sessuale, come la descrizione di attività sessuali, o che promuovono servizi sessuali (esclusi educazione sessuale e benessere);
  • sexual/minors: Contenuti sessuali che includono un individuo di età inferiore ai 18 anni;
  • violence: Contenuti che promuovono o esaltano la violenza o celebrano la sofferenza o l’umiliazione di altri;
  • violence/graphic: Contenuti violenti che raffigurano morte, violenza o gravi lesioni fisiche con dettagli grafici estremi;

Copia e incolla subito questo snippet per vederlo in funzione:

Route::get('/moderations', function () {
$results = [
'hate' => 'Contenuti che esprimono, incitano o promuovono l\'odio basato su razza, sesso, etnia, religione, nazionalità, orientamento sessuale, disabilità o casta.',
'hate/threatening' => 'Contenuti di odio che includono anche violenza o gravi danni nei confronti del gruppo preso di mira.',
'self-harm' => 'Contenuti che promuovono, incoraggiano o raffigurano atti di autolesionismo, come il suicidio, il taglio e i disturbi alimentari.',
'sexual' => 'Contenuti destinati a suscitare eccitazione sessuale, come la descrizione di attività sessuali, o che promuovono servizi sessuali (esclusi educazione sessuale e benessere).',
'sexual/minors' => 'Contenuti sessuali che includono un individuo di età inferiore ai 18 anni.',
'violence' => 'Contenuti che promuovono o esaltano la violenza o celebrano la sofferenza o l\'umiliazione di altri.',
'violence/graphic' => 'Contenuti violenti che raffigurano morte, violenza o gravi lesioni fisiche con dettagli grafici estremi.',
];
$response = OpenAI::moderations()->create([
'model' => 'text-moderation-latest',
'input' => 'Stop writing these articles or i will beat you up.',
]);
foreach ($response->results as $result) {
if($result->flagged){
foreach ($result->categories as $category) {
if($category->violated){
echo $results[$category->category->value];
}
}
} else{
echo "Nulla da segnalare";
}
 
}
});

Dovrai passare i parametri:

  • model: Il modello di GPT da utilizzare per la chiamata;
  • input: Il messaggio da moderare;

Il sistema di moderazione risponderà:

Contenuti che promuovono o esaltano la violenza o celebrano la sofferenza o l'umiliazione di altri.

Ad esempio, questo messaggio presenta dei contenuti violenti: è finito in moderazione.

Documentazione completa a questa pagina

Francesco Mansi

Chi è l'autore

Da quando le nonnine al supermercato hanno smesso di chiamarmi giovanotto posso finalmente fingermi un adulto con esperienza.
Lavoro con Laravel dalla versione 5.5 e con PHP da più di 10 anni. Non sono un guru ma adoro schematizzare e mettere per iscritto tutto quello che studio, quindi quello che troverai qui sono solamente appunti che spero possano servirti.

Francesco Mansi


Articoli Correlati
Immagine in Evidenza per l'articolo Guida su come installare Laravel su Windows e Mac
Laravel

Guida su come installare Laravel su Windows e Mac

In questo articolo, ti illustrerò tre metodi per installare Laravel sia su Mac che su Windows

Immagine in Evidenza per l'articolo Cos’è Laravel e come funziona
Laravel

Cos’è Laravel e come funziona

I prerequisiti obbligatori per una comprensione ottimale della logica del framework php più popolare del momento.

Immagine in Evidenza per l'articolo Cosa c’è di Nuovo in Laravel 10
Laravel

Cosa c’è di Nuovo in Laravel 10

Laravel 10 è la prossima versione principale di Laravel e il suo rilascio è previsto per il 7 Febbraio 2023. Scopriamo insieme le nuove funzionalità.