Contestualizziamo il prompt per i modelli GPT

Contestualizziamo il prompt per i modelli GPT

Nell’ambito della conversazione tra esseri umani, la conoscenza del contesto e delle informazioni contestuali è fondamentale per offrire risposte pertinenti e significative. La giusta risposta a certe domande dipende dalle informazioni su chi le pone e sulla situazione in cui avviene la conversazione. Similmente, anche i modelli di intelligenza artificiale (AI), come quelli basati sui modelli GPT (Generative Pre-trained Transformer), richiedono informazioni contestuali per offrire risposte più accurate e significative.

Ma come incorporare le informazioni contestuali nell’addestramento dei modelli GPT? Quali sono le strategie e le tecniche più efficaci per acquisire e utilizzare informazioni contestuali di alta qualità?

In questo articolo, esploreremo l’importanza dell’addestramento dei modelli GPT con informazioni contestuali.

Se il modello GPT non si trova sul nostro computer ma presso i server di altre aziende come per esempio i modelli GPT-3 e GPT-4 di OpenAI é necessario che avvenga uno scambio di dati.

Il formato JSON

JSON (JavaScript Object Notation) è un formato di scrittura per lo scambio di dati tra sistemi. È un formato testuale facile da leggere e scrivere per gli umani e facile da analizzare e generare per le macchine.

In pratica, JSON fornisce una sintassi per la rappresentazione di oggetti composti da coppie nome/valore, dove il nome è una stringa e il valore può essere un numero, una stringa, un booleano (true/false), un array (una sequenza ordinata di valori) o un altro oggetto.

Esempio

{
    "nome": "Mario Rossi",
    "eta": 35,
    "email": "mario.rossi@gmail.com",
    "amicizie": ["Luigi Bianchi", "Giovanni Verdi", "Paolo Neri"],
    "indirizzo": {
        "via": "Via Roma",
        "numero": 21,
        "citta": "Milano",
        "cap": "20121"
    }
}

In questo esempio, stiamo rappresentando un oggetto che ha come proprietà un nome, un’età, un’email, un array di amicizie (che sono anch’esse stringhe), e un oggetto indirizzo con alcune proprietà. Tutti questi dati vengono separati da virgole e racchiusi tra parentesi graffe.

JSON è ampiamente utilizzato in applicazioni per il web e per dispositivi mobili, per la trasmissione di dati tra client e server. Ad esempio, un’applicazione di social network potrebbe utilizzare JSON per trasmettere i dati del profilo di un utente ad un device mobile. Anche molti API (Application Programming Interface) lavorano con dati in formato JSON, rendendoli facilmente utilizzabili dai programmatori.

È possibile annidare più informazioni in questo formato. Ecco un esempio:

Ecco un esempio di JSON con più oggetti annidati:


{
  "nome_persona": "Alice",
  "città_nascita": {
      "nome": "Roma",
      "area_metropolitana": false,
      "posizione": {
          "latitudine": 41.9028,
          "longitudine": 12.4964
      }
  },
  "contatti": [
      {
          "tipo": "email",
          "valore": "alice@email.com"
      },
      {
          "tipo": "telefono",
          "valore": "1234567890"
      }
  ]
}

In questo esempio abbiamo un oggetto “persona” con il nome “Alice”. L’oggetto “città_nascita” è un altro oggetto che contiene il nome della città, un booleano che indica se si tratta di un’area metropolitana e un oggetto “posizione” che indica la latitudine e la longitudine della città.

L’oggetto “contatti” è un array di oggetti che rappresentano i vari contatti di Alice, in questo caso un’indirizzo email e un numero di telefono.

Gli oggetti annidati possono essere utili per rappresentare dati complessi e organizzati in modo gerarchico, permettendo di organizzarli in modo semplice e facilmente leggibile, oltre che di comprendere a colpo d’occhio le varie relazioni tra i dati.

Il chatbot, un esempio in cui un buon contesto fa la differenza

Un esempio di utilizzo di un buon contesto per l’AI potrebbe essere un chatbot che risponde alle domande degli utenti su un sito web di vendita di abbigliamento. Questo chatbot sfrutterebbe il contesto fornito per comprendere meglio le richieste degli utenti. Il contesto includerebbe informazioni come la disponibilità dei prodotti, il prezzo e le opzioni di spedizione e restituzione, così come le preferenze di stile e gli acquisti precedenti degli utenti. Il chatbot utilizzerebbe queste informazioni per fornire risposte migliorate ed efficienti alle domande degli utenti sul sito di vendita. Inoltre, si potrebbero usare tecniche di rilevazione del sentimento per valutare l’approccio emotivo corretto peril chatbot durante la conversazione con l’utente ed essere più empatici e utili in ogni situazione.

Il modello chatGPT di OpenAI, e in particolare il modello GPT-3.5 turbo, utilizza una combinazione di tecniche di elaborazione del linguaggio naturale, apprendimento automatico e reti neurali per creare risposte intelligenti e coerenti alle domande degli utenti. Una delle grandi caratteristiche di questo modello è che è in grado di generare testo dall’input fornito, senza bisogno di modelli predefiniti, rendendolo in grado di rispondere a una vasta gamma di domande e di conversazioni diversificate.

Per migliorare la creazione del contesto e quindi le risposte fornite dal modello chatGPT di OpenAI, si potrebbe inviare in background dei dati che forniscono informazioni rilevanti al contesto in cui si utilizza l’IA. Ad esempio, quando un utente fa una domanda alla IA, i dati inviati in background potrebbero includere informazioni come la posizione dell’utente, le sue preferenze di ricerca e di acquisto precedenti, le tendenze in tempo reale e i dati demografici. In questo modo, l’IA sarebbe in grado di utilizzare queste informazioni per contestualizzare meglio la sua risposta e fornire un’esperienza più personalizzata e pertinente all’utente.

Per inviare questi dati in background, si potrebbe creare un sistema di raccolta di dati che cattura e memorizza le informazioni rilevanti come i metadati dell’utente, il loro comportamento, come interagiscono con la piattaforma e altri parametri pertinenti. Poi, questi dati vengono inviati automaticamente al modello chatGPT, in modo che l’IA possa utilizzare queste informazioni per migliorare la sua comprensione e contestualizzazione delle richieste degli utenti. La raccolta dei dati potrebbe essere automatizzata, e si potrebbero utilizzare tecniche di machine learning per analizzare i dati in background e migliorare continuamente le risposte fornite dall’IA.

Strutturazione dei dati del contesto in ruoli : user / system

Per strutturare i dati in role “system / user” quando si vogliono inviare preferenze e una storia all’IA come dati di contesto, si potrebbe utilizzare un formato di messaggio standard come ad esempio JSON (JavaScript Object Notation) che è molto diffuso e facile da utilizzare.

Con questo formato, si potrebbe definire un singolo oggetto JSON che contiene informazioni di contesto pertinenti, suddividendole in role “system” e “user”. Nell’oggetto JSON, potrebbe essere presente un campo “system” che contiene le preferenze e le caratteristiche generali di sistema o contestuali, ad esempio la lingua, la regione o la categoria di interesse. Allo stesso modo, potrebbe essere presente un campo “user” che contiene informazioni sul profilo dell’utente come le preferenze personali, la storia degli acquisti, la cronologia delle ricerche e altre informazioni rilevanti.

Inoltre, i dati in generale potrebbero essere organizzati in modo gerarchico attraverso l’uso di oggetti nidificati nel JSON. Ad esempio, il campo “user” potrebbe contenere un oggetto “preferences” che a sua volta contiene informazioni suddivise per categoria come tipi di prodotto preferiti, negozi preferiti e prezzi preferiti. Oppure il campo “user” potrebbe contenere un’informazione sulla “cronologia degli acquisti” che a sua volta contiene informazioni sulla “cronologia degli acquisti online” e “cronologia degli acquisti in-store”.

In questo modo, le informazioni sul contesto possono essere strutturate in modo chiaro e facile da gestire, e l’IA può facilmente accedere e utilizzare queste informazioni per fornire risposte migliori e più pertinenti alle domande degli utenti.

Se stai creando un chatbot in grado di personalizzare la conversazione basandosi sulle preferenze dell’utente, potresti considerare di strutturare le informazioni sulle preferenze dell’utente come parte del messaggio “user”, e quindi inviare queste informazioni al chatbot nell’input del messaggio.

L’esempio del modello gpt 3.5-turbo di OpenAI

Per esempio nell’ambito della comunicazione con il modello GPT 3.5-turbo di OpenAI viene inviato questo array:

     messages=[
              {"role": "user", 
               "content": ""},
              {"role": "assistant",
               "content": ""},

              {"role": "user", 
               "content": ""},
              {"role": "assistant",
               "content": ""},

              ...

              {"role": "user", 
               "content": prompt}
          ]

Ecco un esempio di come possono essere valorizzati le proprietà user e assistant.
Il content dell’ elemento dell’array che definisce il ruolo di utente (“role”: “user”) conterrà la richiesta immaginaria o effettivamente effettuata in passato dall’utente, mentre il content dell’ elemento che definisce il ruolo di sistema (“role”: “assistant”) conterrà la risposta attinente che è stata data o che si pensa debba essere data.

{"role": "user", 
 "content": "Ciao, mi serve un suggerimento per un hotel a New York. Preferisco una stanza con vista sulla città e un'area benessere in loco. Il prezzo non deve superare i 300 dollari a notte."},

{"role": "assistant", 
 "content": "Ecco alcune opzioni di hotel che corrispondono alle tue preferenze: ...... "}

In questo esempio, il campo content di assistant può contenere alcune opzioni di hotel che corrispondono alle preferenze dell’utente.

Più dati user/assistant vengono inseriti all’interno dell’array messages e maggiore sarà la conoscenza che il modello avrà per dare una risposta adeguata alla richiesta (prompt) dell’utente.

La risposta del modello

La risposta del modello GPT sarà in formato JSON:

{
 'id': 'chatcmpl-6p9XYPYSTTRi0xEviKjjilqrWU2Ve',
 'object': 'chat.completion',
 'created': 1677649420,
 'model': 'gpt-3.5-turbo',
 'usage': {'prompt_tokens': 56, 'completion_tokens': 31, 'total_tokens': 87},
 'choices': [
   {
    'message': {
      'role': 'assistant',
      'content': ' .... risposta risposta risposta ....'},
    'finish_reason': 'stop',
    'index': 0
   }
  ]
}

Questa espressione rappresenta un oggetto che ha le seguenti proprietà:

  1. “id”: è un ID univoco per identificare l’oggetto.
  2. “object”: indica il tipo di oggetto rappresentato, in questo caso “chat.completion”.
  3. “created”: indica la data di creazione dell’oggetto, in formato UNIX timestamp.
  4. “model”: indica il modello di IA utilizzato, in questo caso “gpt-3.5-turbo”.
  5. “usage”: contiene informazioni sull’uso del modello e le statistiche relative alla sua attività.
  6. “choices”: una lista di risposte generate dall’IA in cui ogni elemento che contiene le informazioni sulla risposta, il motivo per cui la chat si è conclusa e l’indice della scelta selezionata dall’IA.

Più informazioni le puoi trovare sul sito di OpenAI >>