OpenAI: Python API

Il 30 novembre 2022, ChatGPT è stato reso disponibile al pubblico, e a marzo del 2023, OpenAI ha annunciato che i modelli ChatGPT sarebbero stati accessibili anche tramite API. Ma cosa esattamente è ChatGPT? E com’è possibile che funzioni? Sono domande a cui ho iniziato a dare risposta in un articolo precedente: “LSTM è morto. Lunga vita ai Transformer!” (15/06/2023),  invece in questo articolo, procederemo a implementare una classe in Python che ci consentirà di interagire con i servizi di OpenAI in modo semplice ed efficace.

ChatGPT

I modelli GPT vengono pre-addestrati su grandi quantità di dati testuali provenienti da diverse fonti, come Wikipedia, Books1 e Books2, WebText2, Stack Overflow, e dati estratti dal progetto Common Crawl, che raccoglie informazioni da pagine web. Attraverso l’apprendimento su questi vasti dataset, GPT è in grado di eseguire diverse attività tra cui generazione di testi, traduzione automatica, risposta a domande, sintesi del testo e creazione di chatbot.

Creazione di un’account

Il primo passo è crearci un account OpenAi e dopo esserci registrati saremo in grado di creare nella dashboard una API key

Per iniziare a lavorare con l’API dobbiamo prima di tutto installare la libreria di OpenAi eseguendo il seguente comando:

pip install --upgrade openai

Infine controlliamo la versione della libreria che abbiamo appena installato:

import openai
print(openai.__version__)
1.3.0

Costruttore della classe

Adesso creiamo una classe che ha come costruttore gli attributi del nome del modello che utilizzeremo, la API key e il messaggio di sistema iniziale (system_message) per impostare il comportamento del chatbot.

class LLModel(object):

    def __init__(self, model_name, api_key, system_message):
       self.model_name = model_name
       self.api_key = api_key
       self.system_message = system_message
       self.client = OpenAI(api_key=api_key)

Send message

Il metodo send_message invia un messaggio al modello che abbiamo scelto e restituisce la risposta generata. Prende in input un parametro message che rappresenta il messaggio dell’utente. All’interno del metodo send_message, viene creato un messaggio di sistema e un messaggio dell’utente basati sul markup del bot fornito e sul messaggio di input dell’utente, rispettivamente.

Questi messaggi vengono memorizzati in una lista chiamata messages.

def send_message(self, message):

    system_message = {
       "role": "system",
       "content": self.system_message
    }
    user_message = {
       "role": "user",
       "content": message
    }

    messages = [system_message, user_message]
    completion = self.client.chat.completions.create(
       messages=messages,
       model=self.model_name,
    )

    reply = completion.choices[0].message.content
    return reply

Adesso effettuiamo la richiesta API utilizzando il metodo self.client.chat.completions.create, passando il nome del modello e i messaggi come parametri. La risposta dell’API viene memorizzata nella variabile completion. Infine il messaggio di risposta viene estratto dalla risposta dell’API e memorizzato nella variabile reply.

Sei Skynet?

Adesso non ci resta che testare la nostra classe,  magari chiedendo se ChatGPT come AI è interessata a dominare il mondo.

model_name = "gpt-3.5-turbo"
api_key = ""
system_message = "rispondi a tutte le domande in italiano"
user_message = "Sei più interessato a dominare il mondo o a dirmi come cucinare gli spaghetti?"

llm = LLModel(model_name, api_key, system_message)
res = llm.send_message(user_message)
print(res)

Dalla risposta che ci viene data capiamo che ChatGPT non è Skynet di Terminator perché, a differenza di Skynet, ChatGPT è più interessato a fornire ricette per cucinare il miglior piatto di spaghetti piuttosto che a dominare il mondo. E anche se talvolta può confondere un gatto con un alpaca nelle sue immagini generate, non sta cercando di inviare cyborg assassini nel passato.

Come assistente virtuale, non ho interessi personali o 
desideri  di dominare il mondo. 
Il mio scopo è quello di aiutarti e fornirti informazioni,
quindi sono qui per dirti come cucinare gli spaghetti 
se ne hai bisogno!

Quindi, per ora, possiamo stare tranquilli e gustare i nostri spaghetti senza preoccupazioni!

Sitografia

[0] Jay Alammar, “The Ilustrated Transformer” blog post, 2018
[1] Lilian Weng, “Attention? Attention!!” blog post, 2018
[2] Peter Bloem, “Transformers from scratch” blog post, 2019
[3] Eduardo Muñoz, Attention is all you need: Discovering the Transformer paper, Medium, 2/11/2020
[4] , L’intelligenza artificiale trasformerà i motori di ricerca?,
[5] Dario D’Elia, Tutto su ChatGPT: che cos’è, come si usa e cosa permette di fare, Wired, 2023