> ## Documentation Index
> Fetch the complete documentation index at: https://docs.innochat.ch/llms.txt
> Use this file to discover all available pages before exploring further.

# Perché il mio chatbot non risponde correttamente alle domande?

> Scopri perché i chatbot basati su LLM a volte rispondono in modo errato e come funziona la Retrieval Augmented Generation (RAG).

Quando gli scienziati di Google hanno presentato per la prima volta il concetto di **Transformer**[](https://arxiv.org/pdf/1706.03762.pdf), 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.

<Note>
  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](https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them)
</Note>

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/](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:

<Frame caption="https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-foundation-models-customize-rag.html">
  <img src="https://mintcdn.com/innoq/Kfwv40RbqRH1R9h2/images/help-1.png?fit=max&auto=format&n=Kfwv40RbqRH1R9h2&q=85&s=4b02dd6691c46eefe6792ed241217949" width="898" height="532" data-path="images/help-1.png" />
</Frame>

## Quali tipi di domande funzionano bene?

| Tipo di query           | Descrizione                                    | Esempio                                           |
| ----------------------- | ---------------------------------------------- | ------------------------------------------------- |
| Ricerca di informazioni | Ricerca di informazioni concrete nei documenti | «Qual è la politica ferie di Paladin Max, Inc.?»  |
| Riassunti tematici      | Riassunto di un ambito tematico                | «Riassumi gli ultimi sviluppi nell’IA generativa» |

## Quali tipi di domande funzionano male?

| Tipo di query                     | Descrizione                                           | Esempio                                                                |
| --------------------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------- |
| Confronto tra documenti           | Confronto senza criteri chiari                        | «Trova le incoerenze in tutti gli argomenti dei miei documenti.»       |
| Conteggio o calcoli matematici    | Analisi quantitativa basata sui dati di addestramento | «Quante volte compare John in tutti i contratti?»                      |
| Istruzioni di livello meta        | Riferimento alla struttura / numerazione delle pagine | «Riassumi la sezione 3 (pagine 33–37) di questo report.»               |
| Query statistiche sull’intero set | Domande statistiche su più documenti                  | «Quanti documenti menzionano l’argomento X e elencali in una tabella.» |
| Generazione di testo lungo        | Testi 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](/best-practices)**
