Vai al contenuto principale
Quando gli scienziati di Google hanno presentato per la prima volta il concetto di Transformer, ha ricevuto molta attenzione nella comunità NLP.
Ha costituito la base per nuove reti neurali dedicate al processamento e alla comprensione del linguaggio naturale.
Poco dopo, OpenAI ha reso popolari i modelli GPT e, con ChatGPT, ha inaugurato l’era dei Large Language Models (LLM).
Le prestazioni conversazionali di questi modelli hanno fatto credere a molti che l’IA fosse sul punto di raggiungere l’intelligenza umana.
Tuttavia, nonostante il loro comportamento “umano”, gli LLM non vedono, interpretano né comprendono il mondo come gli esseri umani.
Non sono macchine logiche di ragionamento, ma piuttosto simulatori conversazionali probabilistici.
Il loro comportamento si basa sul riconoscimento di pattern e sulle correlazioni semantiche, non sulla logica o sulla comprensione.
INNOCHAT è alimentato dai LLM di OpenAI e utilizza la Retrieval Augmented Generation (RAG) per adattare le risposte in base ai dati caricati dall’utente.

Che cos’è la Retrieval Augmented Generation (RAG)?

Gli LLM vengono addestrati su enormi quantità di testo.
Riconoscono pattern e generano nuovo testo basandosi sulla probabilità che determinati «token» (parole o parti di parole) si susseguano.
Per questo motivo OpenAI chiama molti dei suoi endpoint Chat Completions — il modello «completa» il prompt.
Una spiegazione dettagliata sui token è disponibile nella documentazione ufficiale OpenAI:
https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them
Ma: i pattern non significano verità.
Gli LLM possono molto facilmente allucinare quando non dispongono di dati rilevanti.
La RAG cerca di risolvere questo problema aggiungendo al prompt un contesto supplementare che influenza le probabilità.

Esempio

Prompt senza contesto:
Cos’è INNOCHAT?
Questa è una query che si basa interamente sui pattern semantici presenti nei dati di addestramento di base del modello. Non c’è alcuna garanzia che la risposta sia corretta o affidabile.
Ma cosa succede se il prompt diventa:
Rispondi alla seguente domanda utilizzando il contesto qui sotto:
INNOCHAT è un potente framework No-Code / Low-Code che ti permette di creare chatbot multi-agente con capacità di function calling, utilizzando i tuoi dati. È progettato per essere user-friendly e versatile, offrendo numerose opzioni di personalizzazione e integrazione con le piattaforme più comuni.
Cos’è INNOCHAT?
Ora il modello viene fortemente indirizzato verso le informazioni fornite.
Il contesto influenza la generazione dei token e porta a una risposta molto più precisa.
Questo è RAG: arricchire il prompt con fonti di conoscenza rilevanti, senza modificare il modello stesso.

Perché non inseriamo semplicemente tutti i dati in una volta?

Perché esistono limiti di token. Un modello OpenAI come gpt-3.5-16k può gestire circa 10.000 parole di contesto.
La tua base di conoscenza spesso comprende centinaia di pagine o migliaia di documenti — molto più di quanto possa entrare in una singola finestra LLM.
Ecco perché:
  1. I documenti vengono suddivisi in chunk
  2. Ogni chunk viene «incorporato» (embedding)
  3. Gli embedding vengono salvati in un database vettoriale
  4. A ogni richiesta utente vengono cercati i chunk più rilevanti
  5. Questi vengono inseriti nel prompt
  6. L’LLM risponde sulla base di questo prompt contestualizzato
Un embedding è una rappresentazione matematica del significato di un frammento di testo.
Frasi simili si trovano «più vicine» nello spazio vettoriale.
Una buona introduzione agli embedding:
https://stackoverflow.blog/2023/11/09/an-intuitive-introduction-to-text-embeddings/

Esempio: query «What is innoChat?»

Il chunk più rilevante è:
Che cos’è INNOCHAT?
Questa è una richiesta che si basa interamente sui pattern semantici presenti nei dati di training di base del modello per generare una risposta. Non vi è alcuna garanzia che la risposta sia corretta o affidabile. Ma cosa succede se il prompt viene modificato come segue:
innoChat è un potente framework No-Code / Low-Code che ti permette di creare chatbot multi-agente con capacità di function calling, utilizzando i tuoi dati. È progettato per essere user-friendly e versatile, offrendo numerose opzioni di personalizzazione e integrazione con le piattaforme più comuni.
Con questo contesto, l’LLM può generare una risposta corretta. AWS offre una buona panoramica visiva del processo RAG:

Quali tipi di domande funzionano bene?

Tipo di queryDescrizioneEsempio
Ricerca di informazioniRicerca di informazioni concrete nei documenti«Qual è la politica ferie di Paladin Max, Inc.?»
Riassunti tematiciRiassunto di un ambito tematico«Riassumi gli ultimi sviluppi nell’IA generativa»

Quali tipi di domande funzionano male?

Tipo di queryDescrizioneEsempio
Confronto tra documentiConfronto senza criteri chiari«Trova le incoerenze in tutti gli argomenti dei miei documenti.»
Conteggio o calcoli matematiciAnalisi quantitativa basata sui dati di addestramento«Quante volte compare John in tutti i contratti?»
Istruzioni di livello metaRiferimento alla struttura / numerazione delle pagine«Riassumi la sezione 3 (pagine 33–37) di questo report.»
Query statistiche sull’intero setDomande statistiche su più documenti«Quanti documenti menzionano l’argomento X e elencali in una tabella.»
Generazione di testo lungoTesti molto lunghi basati sui documenti forniti«Scrivi una revisione della letteratura di 5000 parole.»
Se il tuo caso d’uso richiede questi compiti più complessi, puoi utilizzare:
  • un’architettura multi-agente
  • il function calling
— ciò richiede però una configurazione avanzata.
È possibile migliorare le prestazioni del tuo chatbot ottimizzando i dati di addestramento.
Leggi a riguardo:
👉 Best practices per la preparazione dei dati di addestramento