Sconto del 20% su tutti i corsi inserendo nel form il codice SPRING20 | Fino al 30 aprile
Sconto del 20% su tutti i corsi inserendo nel form il codice SPRING20 | Fino al 30 aprile

Blog

prompt designer che pensa insieme ad un robottino che funziona attraverso intelligenza artificiale

OpenAI API e il linguaggio Java

L’integrazione delle API di OpenAI con il linguaggio Java rappresenta una combinazione potente e versatile per sviluppare applicazioni basate su intelligenza artificiale (AI). In questo articolo, esploreremo che cos’è l’intelligenza artificiale, come può essere implementata tramite le RESTful API di OpenAI e come un Java developer può trarre vantaggio da queste tecnologie.

Cos’è l’Intelligenza Artificiale?

Prima di entrare nei dettagli tecnici, è utile comprendere che cos’è l’intelligenza artificiale. L’intelligenza artificiale AI è un campo della computer science che si occupa della creazione di macchine capaci di svolgere compiti che, normalmente, richiedono l’intelligenza umana. 

 

Il linguaggio Java: cos’è e a cosa serve

Il linguaggio Java è uno dei linguaggi di programmazione più diffusi al mondo. Sviluppato da Sun Microsystems (ora parte di Oracle Corporation), Java è noto per la sua portabilità, robustezza e sicurezza. 

Java è un linguaggio orientato agli oggetti, ampiamente utilizzato nel mondo della programmazione informatica. Si tratta di un linguaggio multi-piattaforma, sicuro ed affidabile. Viene utilizzato in moltissimi contesti come sviluppo di app desktop, tecnologie lato server, big data e, non per ultimo, intelligenza artificiale.

Per chi vuole diventare un programmatore informatico, imparare Java è un passo fondamentale verso una carriera in settori come lo sviluppo di applicazioni enterprise, il web development e, più recentemente, l’integrazione con tecnologie di intelligenza artificiale.

 

Integrazione delle API di OpenAI con Java

In questo contesto, le API di OpenAI offrono agli sviluppatori Java un’opportunità straordinaria per sfruttare le capacità avanzate dell’intelligenza artificiale nelle loro applicazioni. Queste API possono essere utilizzate per una varietà di scopi, come la generazione di testo, la creazione di immagini, la trascrizione audio e molto altro. 

Grazie alla potenza di Java e alla versatilità delle API di OpenAI, è possibile creare soluzioni innovative che trasformano semplici applicazioni in strumenti avanzati basati su AI. Se il concetto di API dovesse essere poco familiare per te, non preoccuparti: proviamo, ora, a definire che cos’è un API RESTful e, in seguito, vediamo come integrarle con Java.

 

Cos’è un’API RESTful?

Le RESTful API sono una tipologia di web service API che utilizza i principi del REST (Representational State Transfer) per la comunicazione tra client e server.

REST si basa su una serie di vincoli e linee guida che garantiscono che le API siano semplici, scalabili e facili da mantenere.

Le API RESTful utilizzano i metodi HTTP standard come GET, POST, PUT, DELETE, tra gli altri, per eseguire operazioni come la lettura, la creazione, l’aggiornamento e la cancellazione di risorse. Le risorse, che possono essere dati o servizi, sono identificate da URL univoci e vengono trasferite tra client e server in formati standard come JSON o XML.

Uno degli aspetti chiave di un’API RESTful è la sua natura stateless, il che significa che ogni richiesta da parte del client al server deve contenere tutte le informazioni necessarie per comprendere e processare la richiesta stessa. Il server non conserva lo stato delle sessioni tra le richieste, rendendo l’API più efficiente e riducendo la complessità del sistema.

Questa architettura rende le API RESTful particolarmente adatte per applicazioni web moderne, poiché sono flessibili e possono essere facilmente consumate da una vasta gamma di client, come browser, applicazioni mobili e altri servizi web. L’adozione diffusa delle API RESTful nel settore dello sviluppo software è dovuta alla loro semplicità d’uso, scalabilità e allineamento con i protocolli web standard.

 

Come integrare le API di OpenAI con Java.

Per integrare le API di OpenAI con Java, ci si deve servire del Token di OpenAI che possiamo generare dal sito consultando questo questo link.

 

Possiamo generare due tipi di token: account personali e di servizio. 

Il token personale si spiega da sé. I token per gli account di servizio vengono utilizzati per bot o applicazioni che possono essere collegate ai progetti OpenAI. 

 

Anche se funzionerebbero entrambi, un token personale è sufficiente per il nostro scopo.

Il codice che vedremo, utilizza una libreria open source, sviluppata da terzi in Java, disponibile su GitHub (anche se, purtroppo, dal 6 giugno 2024 non ha – e non avrà – più aggiornamenti.) Puoi guardare il codice sorgente ed installare la libreria andando su questo link. Non dimenticare di settare le dipendenze! 

 

Prima di iniziare, dobbiamo generare una OPENAI_TOKEN, in modo tale che la nostra applicazione si possa connettere con le API di OpenAI. Per farlo dobbiamo generare il token dal sito


Tuttavia, dovremmo fare attenzione al token che stiamo generando. Gli esempi che vediamo sulla repo di github utilizzano le variabili di ambiente. Questa potrebbe non essere la soluzione migliore per larga scala, ma funziona bene per piccoli script personali.

 

Durante le esecuzioni, non abbiamo necessariamente bisogno di identificare la variabile di ambiente per l’intera macchina; possiamo utilizzare le configurazioni nel nostro IDE.

 

Possiamo generare due tipi di token: account personali e di servizio. Il token personale è autoesplicativo. I token per gli account di servizio sono utilizzati per bot o applicazioni che possono essere connesse ai progetti OpenAI. Sebbene entrambi funzionerebbero, un token personale è sufficiente per il nostro scopo.

 

Per partire, utilizzando le nostre API nel linguaggio Java, l’entry point è il seguente:

 

String token = "OPENAI_TOKEN";
OpenAiService service = new OpenAiService(token);

Successivamente creiamo una richiesta utilizzando ChatCompletionRequest. La configurazione minima richiede di fornire solo messaggi e un modello:


ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest
  .builder()
  .model(GPT_3_5_TURBO_0301.getName())
  .messages(messages)
  .build();
@Getter
@AllArgsConstructor
public enum ModelEnum {    	 
	GPT_3_5_TURBO("gpt-3.5-turbo"),
	GPT_3_5_TURBO_0301("gpt-3.5-turbo-0301"),
	GPT_4("gpt-4"),
	GPT_4_0314("gpt-4-0314"),
	GPT_4_32K("gpt-4-32k"),
	GPT_4_32K_0314("gpt-4-32k-0314"),
	GPT_4_1106_preview("gpt-4-1106-preview");
	private String name;
}

È essenziale scegliere il modello che si adatta alle nostre esigenze e incide anche sui costi. Dobbiamo quindi fare una scelta ragionevole.

 

List<ChatMessage> messages = new ArrayList<>();
ChatMessage systemMessage = new ChatMessage(ChatMessageRole.SYSTEM.value(), PROMPT);
messages.add(systemMessage);

La classe ChatMessage è quella che ci consente di generare messaggi e iniziare a rendere il chatbot “parlante”.

La parte interessante è che inviamo una raccolta di messaggi. Anche se nelle chat normali comunichiamo inviando messaggi uno per uno, in questo caso è più simile ai thread di posta elettronica.

Il sistema funziona al completamento e aggiunge il messaggio successivo alla catena. In questo modo possiamo mantenere il contesto della conversazione. Possiamo considerarlo stateless. Tuttavia, ciò significa che dobbiamo passare i messaggi per mantenere il contesto.

Allo stesso tempo, possiamo andare in un altro modo e creare un assistente. Con questo approccio, memorizziamo i messaggi nei thread e non sarà necessario inviare avanti e indietro l’intera cronologia.

 

Come accennato in precedenza, i ruoli sono cruciali affinché ChatGPT comprenda il contesto della conversazione. Possiamo usarli per identificare gli attori dietro i messaggi. In questo modo possiamo aiutare ChatGPT a interpretare correttamente i messaggi. I ChatMessage supportano quattro ruoli: chat, system, assistant e function.

 

public enum ChatMessageRole {
	SYSTEM("system"),
	USER("user"),
	ASSISTANT("assistant"),
	FUNCTION("function");

	private final String value;

	ChatMessageRole(final String value) {
    	this.value = value;
	}

	public String value() {
    	return value;
	}
}

Possiamo pensare ai token come alla quantità di informazioni che possiamo elaborare e alla quantità che vogliamo ottenere in risposta. Possiamo impedire al modello di generare risposte enormi limitando il numero di token nella risposta con dei semplici settaggi.

 

Non c’è una mappatura diretta tra le parole e i token perché ogni modello li elabora in modo leggermente diverso. Questo parametro limita la risposta a un numero specifico di token. L’utilizzo dei valori predefiniti potrebbe consentire risposte eccessive e aumentare le fatture per l’utilizzo. Pertanto, è una buona pratica configurarlo in modo esplicito.

 

Attenzione a non confondere il concetto di token appena spiegato con il token utilizzato per sfruttare le API di OpenAI creato al primo step.

 

ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest
  .builder()
  .model(MODEL)
  .maxTokens(MAX_TOKENS)
  .messages(messages)
  .build();

All’interno di un progetto, possiamo sfruttare questo codice e interagire tramite il chatbot con un tipico cmd.

 

Gli strumenti di intelligenza artificiale sono ottimi e ci aiutano a migliorare le applicazioni e ad automatizzare le attività quotidiane, dall’elaborazione delle e-mail alla creazione di liste della spesa fino all’ottimizzazione dell’istruzione. Java fornisce un paio di modi per interagire con le API OpenAI tramite restful API e openai-java è una di queste librerie.

Tuttavia, è importante ricordare che i modelli generativi come chat gpt 4, nonostante siano abbastanza convincenti, sono soggetti ad allucinazioni. Pertanto, è nostra responsabilità ricontrollare le informazioni emesse da questa AI generativa. 

 

Vuoi saperne di più sul linguaggio Java? Abbiamo preparato per te una guida a Java in italiano: corri a scoprirla!

Se, invece, ad incuriosirti maggiormente è l’universo dell’intelligenza artificiale generativa, scopri il nostro corso di prompt design!

Articoli correlati

Scopri i nostri corsi online certificati

Richiedi informazioni senza impegno

Seguici su Facebook

Ti interessa approfondire questi argomenti?

Abbiamo il corso che fa per te!

Scopri i nostri corsi online certificati

Richiedi informazioni senza impegno

Pagamento rateale

Valore della rata: A PARTIRE DA 115 €/mese.

Esempio di finanziamento 

Importo finanziato: € 2440 in 24 rate da € 115 – TAN fisso 9,55% TAEG 12,57% – importo totale del credito € 2841.

Il costo totale del credito comprende: interessi calcolati al TAN indicato, oneri fiscali (imposta di bollo sul contratto 16,00 euro*) addebitati sulla prima rata, costo mensile di gestione pratica € 3,90, spesa di istruttoria € 0,00, spesa per invio rendicontazione periodica cartacea € 0,98 (o spesa per invio rendicontazione periodica cartacea € 0,00), imposta di bollo su rendicontazione periodica € 0,00. Modalità di rimborso obbligatoria: addebito diretto su c/c. La scadenza delle rate è determinata dal giorno della liquidazione del contratto; la data di scadenza delle rate è prevista il giorno 15 del mese. L’importo di ciascuna rata comprende una quota di capitale crescente e interessi decrescente secondo un piano di ammortamento “alla francese”. Offerta valida dal 01/01/2024 al 31/12/2024.

Messaggio pubblicitario con finalità promozionale. Per le informazioni precontrattuali richiedere sul punto vendita il documento “Informazioni europee di base sul credito ai consumatori” (SECCI) e copia del testo contrattuale. Salvo approvazione di Sella Personal Credit S.p.A. Aulab S.r.l. opera quale intermediario del credito NON in esclusiva.

*In fase di richiesta del finanziamento verrà proposta la facoltà di selezionare, in alternativa all’imposta di bollo sul contratto di 16,00 euro, l’imposta sostitutiva, pari allo 0,25% dell’importo finanziato.

Pagamento rateale

Valore della rata: A PARTIRE DA 210 €/mese.

Esempio di finanziamento  

Importo finanziato: € 4500 in 24 rate da € 210,03 – TAN fisso 9,68% TAEG 11,97% – importo totale del credito € 5146,55.

Il costo totale del credito comprende: interessi calcolati al TAN indicato, oneri fiscali (imposta di bollo sul contratto 16,00 euro*) addebitati sulla prima rata, costo mensile di gestione pratica € 3,90, spesa di istruttoria € 0,00, spesa per invio rendicontazione periodica cartacea € 0,98 (o spesa per invio rendicontazione periodica cartacea € 0,00), imposta di bollo su rendicontazione periodica € 0,00. Modalità di rimborso obbligatoria: addebito diretto su c/c. La scadenza delle rate è determinata dal giorno della liquidazione del contratto; la data di scadenza delle rate è prevista il giorno 15 del mese. L’importo di ciascuna rata comprende una quota di capitale crescente e interessi decrescente secondo un piano di ammortamento “alla francese”. Offerta valida dal 01/01/2024 al 31/12/2024.

Messaggio pubblicitario con finalità promozionale. Per le informazioni precontrattuali richiedere sul punto vendita il documento “Informazioni europee di base sul credito ai consumatori” (SECCI) e copia del testo contrattuale. Salvo approvazione di Sella Personal Credit S.p.A. Aulab S.r.l. opera quale intermediario del credito NON in esclusiva.

* In fase di richiesta del finanziamento verrà proposta la facoltà di selezionare, in alternativa all’imposta di bollo sul contratto di 16,00 euro, l’imposta sostitutiva, pari allo 0,25% dell’importo finanziato.

Contattaci senza impegno per informazioni sul corso

Scopriamo insieme se i nostri corsi fanno per te. Compila il form e aspetta la chiamata di uno dei nostri consulenti.