1. Concetti di Base dei Modelli di Generazione di Testo
Il modello di generazione di testo di OpenAI, comunemente noto come Generative Pre-trained Transformer (GPT), si basa sul meccanismo di auto-attenzione nel deep learning per comprendere e processare il linguaggio naturale. La formazione del modello GPT consiste in due fasi: pre-formazione e sintonizzazione fine.
Pre-formazione
Durante la fase di pre-formazione, il modello viene sottoposto a un apprendimento non supervisionato utilizzando un set di dati di testo su larga scala. In questo processo, il modello viene addestrato prevedendo la parola successiva. Ad esempio, dato la frase "Ho una penna," dopo aver visto le prime poche parole, cerca di prevedere la parola "penna." L'obiettivo principale della pre-formazione è abilitare il modello a comprendere la struttura e la semantica del linguaggio.
Sintonizzazione Fine
La fase di sintonizzazione fine coinvolge l'apprendimento supervisionato su compiti specifici. In questa fase, il modello viene regolato per adattarsi a specifiche applicazioni come i sistemi di domande e risposte e la riassunzione dei documenti. La sintonizzazione fine prevede ulteriore addestramento del modello con set di dati annotati basati sul modello pre-addestrato, consentendogli di adattarsi meglio a compiti specifici.
2. Scenari di Applicazione
Il modello di generazione di testo di OpenAI può essere applicato a una vasta gamma di scenari. Ecco alcune applicazioni specifiche:
- Redazione di Documenti: Assistere gli utenti nella rapida redazione e modifica dei documenti.
- Scrittura di Codice Informatico: Generazione di frammenti di codice per aiutare nella programmazione.
- Rispondere a Domande su una Base di Conoscenza: Fornire risposte basate sulla conoscenza memorizzata.
- Analisi del Testo: Estrarre informazioni dal testo, analizzare il sentiment e altro ancora.
- Fornire un'Interfaccia di Linguaggio Naturale al Software: Consentire agli utenti di interagire con il software utilizzando linguaggio naturale.
- Tutoraggio in Diverse Materie: Fornire guidance didattica in varie materie.
- Traduzione di Lingue: Tradurre testo tra lingue diverse.
- Simulazione di Personaggi per Giochi: Generare dialoghi e storie di background per giochi o scenari di gioco di ruolo.
3. Introduzione al Modello di Dialogo
Un modello di dialogo è un tipo speciale di modello di generazione di testo che comprende e genera conversazioni naturali attraverso la pre-formazione. Questo modello può simulare una conversazione tra un utente e un assistente virtuale, adatto per applicazioni interattive in tempo reale.
L'uso di un modello di dialogo coinvolge tipicamente conversazioni interattive a più turni. Ad esempio, quando un utente pone una domanda, il modello può generare risposte adeguate basate sui dati di addestramento precedenti. Inoltre, il modello di dialogo può mantenere informazioni contestuali, considerando il contenuto della conversazione precedente per generare risposte più coerenti e naturali.
Scenari di Applicazione del Modello di Dialogo:
- Assistenti del Servizio Clienti: Rispondere automaticamente alle domande frequenti degli utenti, fornire assistenza e consigli.
- Chatbot: Coinvolgersi in interazioni conversazionali naturali con gli utenti.
- Assistente Virtuale: Eseguire comandi vocali degli utenti, come pianificare riunioni, impostare promemoria e altro ancora.
- Giochi di Ruolo: Arricchire l'esperienza di gioco dando ai personaggi del gioco dialoghi e personalità unici.
4. API del Modello di Dialogo
L'API del Modello di Dialogo consente agli sviluppatori di interagire con il modello GPT utilizzando richieste HTTP. Questa sezione illustrerà come utilizzare curl per costruire le richieste e analizzare le risposte restituite dal modello.
Costruzione delle Richieste
Prima di iniziare, è necessario registrarsi e ottenere una chiave API da OpenAI, che deve essere autenticata attraverso intestazioni HTTP quando si inviano le richieste.
Ecco un esempio di utilizzo di curl per inviare una richiesta all'API del Modello di Dialogo:
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "system",
"content": "Sei un assistente utile."
},
{
"role": "user",
"content": "Quale squadra ha vinto le World Series 2020?"
}
]
}'
Significato dei Parametri del Modello di Dialogo
Quando si utilizza l'API del Modello di Dialogo di OpenAI, i principali parametri includono "model" e "messages", ognuno con significati specifici che influenzano i risultati prodotti.
Parametri del Modello
Il parametro del modello viene utilizzato per specificare la versione del modello da utilizzare. Ad esempio, "model": "gpt-3.5-turbo"
indica che stai richiedendo il modello GPT-3.5-Turbo. La versione del modello selezionata qui risponderà all'input dell'utente in base alle sue capacità, ai dati di addestramento e alle funzionalità dell'interfaccia.
Ecco i modelli attualmente supportati:
Modelli Supportati | Massimo Contesto | Descrizione del Modello |
---|---|---|
gpt-4-0125-preview | 128.000 token | Anteprima del modello GPT-4 Turbo progettato per ridurre i casi "pigri", in cui il modello non riesce a completare i compiti. |
gpt-4-turbo-preview | 128.000 token | Attualmente punta al modello gpt-4-0125-preview . |
gpt-4-1106-preview | 128.000 token | Modello GPT-4 Turbo con migliorate capacità di esecuzione delle istruzioni, modalità JSON, output riproducibile e chiamate di funzioni parallele. |
gpt-4-vision-preview | 128.000 token | Modello GPT-4 con la capacità di comprendere le immagini, oltre a tutte le altre funzionalità di GPT-4 Turbo. |
gpt-4 | 8.192 token | Attualmente punta a gpt-4-0613 . |
gpt-4-0613 | 8.192 token | Snapshot di GPT-4 dal 13 giugno 2023, che fornisce un miglior supporto alle chiamate di funzioni. |
gpt-4-32k | 32.768 token | Attualmente punta a gpt-4-32k-0613 . Questo modello non è molto promosso e preferisce l'uso di GPT-4 Turbo. |
gpt-4-32k-0613 | 32.768 token | Snapshot della versione GPT-4 32k dal 13 giugno 2023. Questo modello non è molto promosso e preferisce l'uso di GPT-4 Turbo. |
gpt-3.5-turbo-1106 | 16.385 token | L'ultimo modello GPT-3.5 Turbo con migliorate capacità di esecuzione delle istruzioni, modalità JSON, output riproducibile e chiamate di funzioni parallele. |
gpt-3.5-turbo | 4.096 token | Attualmente punta a gpt-3.5-turbo-0613 . |
gpt-3.5-turbo-16k | 16.385 token | Attualmente punta a gpt-3.5-turbo-16k-0613 . |
gpt-3.5-turbo-instruct | 4.096 token | Simile dal punto di vista funzionale ai modelli dell'era GPT-3. Compatibile con i tipici punti di completamento, non adatto per il completamento delle chat. |
gpt-3.5-turbo-0613 | 4.096 token | Snapshot di gpt-3.5-turbo dal 13 giugno 2023. Obsoleto dal 13 giugno 2024. |
gpt-3.5-turbo-16k-0613 | 16.385 token | Snapshot di gpt-3.5-16k-turbo dal 13 giugno 2023. Obsoleto dal 13 giugno 2024. |
gpt-3.5-turbo-0301 | 4.096 token | Snapshot di gpt-3.5-turbo dall'1 marzo 2023. Obsoleto dal 13 giugno 2024. |
Parametro Messaggi
Il parametro dei messaggi è un array, in cui ogni elemento rappresenta un messaggio nella conversazione. Ogni messaggio è un oggetto contenente due proprietà: ruolo (il ruolo del mittente) e contenuto (il contenuto specifico del messaggio).
- ruolo: Specifica il ruolo del mittente per il messaggio. I valori opzionali includono "sistema", "utente" e "assistente".
- contenuto: Il contenuto specifico del messaggio.
Tipi e Funzioni del Ruolo
Il valore del parametro del ruolo definisce il tipo e la funzione del messaggio. L'API di dialogo cambierà la risposta del modello in base ai diversi ruoli.
Ruolo 'sistema'
I messaggi di sistema vengono utilizzati per indicare globalmente il comportamento del modello. Ad esempio, possono specificare esplicitamente il ruolo svolto dal modello (come assistente, traduttore, ecc.), o fornire istruzioni specifiche da seguire nella conversazione. I messaggi di sistema hanno un impatto a lungo termine sul comportamento del modello durante la conversazione, ma di solito sono facoltativi.
Ad esempio, se vuoi che il modello partecipi alla conversazione come assistente del servizio clienti, puoi specificare nel messaggio di sistema:
{
"role": "system",
"content": "Sei un assistente del servizio clienti."
}
Ruolo 'utente'
I messaggi utente rappresentano le domande inserite dall'utente. Il modello risponde a questi messaggi e fornisce informazioni, risposte o altre forme di output. Questi messaggi sono una parte cruciale del flusso di lavoro dell'API di dialogo e corrispondono tipicamente alle effettive richieste dell'utente nell'applicazione.
Ad esempio, nella richiesta utente nell'esempio di curl qui sopra:
{
"role": "user",
"content": "Quale squadra ha vinto le World Series del 2020?"
}
Ruolo 'assistente'
I messaggi dell'assistente si riferiscono tipicamente alle risposte generate dal modello e possono anche far parte dei messaggi della storia della conversazione forniti dallo sviluppatore, utilizzati per simulare il formato dei messaggi restituiti dall'IA. Nelle richieste API, i messaggi di ruolo assistente di solito non vengono forniti a meno che non sia necessario preimpostare il formato in cui il modello risponde alle domande nella storia della conversazione per fornire esempi di output per il modello.
Analisi della risposta
La risposta del modello viene restituita in formato JSON. Ecco un esempio di analisi della risposta:
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "Il campione delle World Series del 2020 è Los Angeles Dodgers.",
"role": "assistente"
},
"logprobs": null
}
],
"created": 1677664795,
"id": "chatcmpl-7QyqpwdfhqwajicIEznoc6Q47XAyW",
"model": "gpt-3.5-turbo-0613",
"object": "chat.completion",
"usage": {
"completion_tokens": 17,
"prompt_tokens": 57,
"total_tokens": 74
}
}
Nella risposta sopra, puoi ottenere la risposta del modello da choices[0].message.content
.
Come implementare la funzione di memoria in un modello di dialogo
Di seguito è riportato un esempio di utilizzo dell'API di completamento della chat di OpenAI per implementare la funzione di memoria del modello GPT, che dimostra come salvare il contesto della conversazione storica (cioè il contenuto della memoria) in una nuova richiesta API per ottenere un dialogo continuo.
import requests
api_url = "https://api.openai.com/v1/chat/completions"
api_key = "La tua chiave API di OpenAI"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
data = {
"model": "gpt-3.5-turbo", # Può essere sostituito con gpt-4 o altri modelli disponibili
"messages": [
{
"role": "system", # Messaggio di sistema, utilizzato per impostare il comportamento del modello di dialogo
"content": "Sei un assistente di aiuto."
},
{
"role": "user", # Messaggio dell'utente, a cui il modello risponderà
"content": "Puoi dirmi le principali cause dei cambiamenti climatici?"
},
{
"role": "assistant", # Risposta del modello
"content": "Le principali cause dei cambiamenti climatici includono le emissioni di gas serra, la combustione di combustibili fossili e la deforestazione, ecc."
},
{
"role": "user", # Nuova domanda basata sulla risposta del modello
"content": "Come possiamo ridurre le emissioni di gas serra?"
}
]
}
response = requests.post(api_url, headers=headers, json=data)
if response.status_code == 200:
reply_content = response.json()['choices'][0]['message']['content']
print(f"Risposta del modello => {reply_content}")
else:
print(f"Errore nella richiesta: {response.status_code}")
In questo esempio, simuliamo un utente che chiede innanzitutto le principali cause dei cambiamenti climatici, e poi pone un'altra domanda basata sulla spiegazione del modello. Nelle richieste successive, manteniamo il contenuto della conversazione precedente per garantire che il modello possa ricordare la storia della conversazione precedente e generare una risposta basata su di essa. Questo metodo permette di trasmettere e memorizzare lo stato del dialogo utilizzando l'input e l'output del round di conversazione precedente come messaggi storici della nuova richiesta.
Suggerimento: Per implementare la funzione di memoria del dialogo, poiché il modello ha un limite massimo di token, non è fattibile inserire tutti i messaggi della conversazione storica per ogni richiesta. Tipicamente, vengono inseriti come messaggi storici nel modello i messaggi pertinenti relativi alle domande attuali, e le sezioni successive introducono come la funzione di Embeddings raggiunge la ricerca di similarità dei testi.
5. Schema JSON
Lo schema JSON è una funzionalità dell'API del modello di dialogo che consente agli utenti di istruire il modello a restituire sempre un oggetto JSON, adatto per scenari che richiedono di ricevere risposte in formato JSON.
Utilizzo dello schema JSON
Per utilizzare lo schema JSON, è necessario impostare il campo response_format
su { "type": "json_object" }
nel corpo della richiesta HTTP e assicurarsi che il messaggio di sistema indichi che l'output del modello è in formato JSON. Di seguito è riportato un esempio di richiesta curl per abilitare lo schema JSON:
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-3.5-turbo-1106",
"response_format": { "type": "json_object" },
"messages": [
{
"role": "system",
"content": "Sei un assistente utile progettato per restituire JSON."
},
{
"role": "user",
"content": "Quale squadra ha vinto le World Series del 2020?"
}
]
}'
Analisi della risposta dello schema JSON
Nella modalità dello schema JSON, la risposta conterrà un oggetto JSON completo e perfettamente analizzato. Questa modalità garantisce che l'output del modello sia un valido oggetto JSON che può essere direttamente analizzato e utilizzato. Di seguito è riportato un esempio di una risposta che potrebbe essere restituita utilizzando lo schema JSON:
{
"choices": [
{
"finish_reason": "stop",
"message": {
"content": "{\"winner\": \"Los Angeles Dodgers\"}"
}
}
]
}
In Python, è possibile utilizzare il seguente codice per estrarre il contenuto dalla risposta:
import json
risposta = {
"choices": [
{
"finish_reason": "stop",
"message": {
"content": "{\"winner\": \"Los Angeles Dodgers\"}"
}
}
]
}
contenuto_risposta = json.loads(risposta['choices'][0]['message']['content'])
print(contenuto_risposta)
Il risultato sarà:
{'winner': 'Los Angeles Dodgers'}
Lo schema JSON fornisce un metodo affidabile per garantire la formattazione corretta delle risposte per casi d'uso specifici. Pertanto, si consiglia di abilitare lo schema JSON in scenari in cui ci sono requisiti specifici per il formato della risposta dell'API.