> ## 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.

# Lavorare con tabelle e CSV

> Scopri come caricare e utilizzare file CSV e dati strutturati tabellari in INNOCHAT.

INNOCHAT ti consente di caricare dati di training sotto forma di file CSV o tabelle Excel **semplici**.\
Le “tabelle semplici” si riferiscono a dati tabellari senza celle unite, con **un’unica colonna di chiave primaria** con elementi univoci, intestazioni di colonne o righe univoche e descrittive e una chiara struttura **a colonne** oppure **righe/colonne**.

Esempio di tabella solo a colonne:

<Frame>
  <img src="https://mintcdn.com/innoq/m-MXq-_ojngkTbq6/images/working-with-tables-1.png?fit=max&auto=format&n=m-MXq-_ojngkTbq6&q=85&s=65c5268e28c5caa7e5a7f9ddd6e1700f" width="491" height="161" data-path="images/working-with-tables-1.png" />
</Frame>

*Tutti i dati per riga si riferiscono alla chiave prodotto nella prima colonna.*

Esempio di tabella righe/colonne:

<Frame>
  <img src="https://mintcdn.com/innoq/m-MXq-_ojngkTbq6/images/working-with-tables-2.png?fit=max&auto=format&n=m-MXq-_ojngkTbq6&q=85&s=d804dc6942acf3990ee82d4e3e869b59" width="706" height="121" data-path="images/working-with-tables-2.png" />
</Frame>

*Ogni combinazione di riga e colonna rimanda a un valore di cella specifico.*

Non esiste un numero massimo di colonne, tuttavia c’è un limite al **numero totale di token per riga**.\
Se viene superato, il training va in errore.

Al **marzo 2024**, il massimo è **circa 8000 token per riga** (incluso il codice JSON necessario per rappresentare la struttura della tabella).\
Ciò significa che la quota effettivamente disponibile per i valori è inferiore e dipende dalla lunghezza dei nomi di righe e colonne.

Se i tuoi dati rispettano il formato descritto sopra, puoi caricare la tabella come fonte di training.\
Per farlo, vai su:

**Sources → Add Sources → Tables**

<Frame>
  <img src="https://mintcdn.com/innoq/m-MXq-_ojngkTbq6/images/working-with-tables-3.png?fit=max&auto=format&n=m-MXq-_ojngkTbq6&q=85&s=03af426dca12d2e60ab7ad8922586261" width="1367" height="805" data-path="images/working-with-tables-3.png" />
</Frame>

Per le tabelle righe/colonne, dopo il caricamento devi fare quanto segue:

* Seleziona la tabella
* Apri il menu a tre punti sulla destra
* Fai clic su **Edit Table Data**

<Frame>
  <img src="https://mintcdn.com/innoq/m-MXq-_ojngkTbq6/images/working-with-tables-4.png?fit=max&auto=format&n=m-MXq-_ojngkTbq6&q=85&s=ba141f5a3789f81992d4b0a627d3b4e5" width="1609" height="321" data-path="images/working-with-tables-4.png" />
</Frame>

Nell’editor delle tabelle, seleziona **Row-Column Header** e fai clic su **Save Changes**.\
Questo assicura che i dati vengano pre-elaborati correttamente per l’elaborazione da parte del LLM.

<Frame>
  <img src="https://mintcdn.com/innoq/m-MXq-_ojngkTbq6/images/working-with-tables-5.png?fit=max&auto=format&n=m-MXq-_ojngkTbq6&q=85&s=39d8e2aafad7819244b62671be72d369" width="1041" height="497" data-path="images/working-with-tables-5.png" />
</Frame>

Successivamente, puoi utilizzare le tabelle come dati di riferimento quando assegni la knowledge base ai tuoi agenti.

Nota bene:\
**I modelli GPT-4 superano nettamente i modelli GPT-3.5** in termini di precisione e coerenza quando si lavora con le tabelle.

<Frame>
  <img src="https://mintcdn.com/innoq/m-MXq-_ojngkTbq6/images/working-with-tables-6.png?fit=max&auto=format&n=m-MXq-_ojngkTbq6&q=85&s=dec2ecce6eff2c885a1d442dd5ca8c95" width="1037" height="856" data-path="images/working-with-tables-6.png" />
</Frame>

*Esempio di retrieval LLM basato sulle tabelle di esempio mostrate sopra.*

## Il mio agente o chatbot non comprende correttamente la mia tabella!

I LLM come GPT-4 sono eccellenti nel gestire **testo non strutturato**.\
Con capacità multimodali (ad es. GPT-Vision) possono persino interpretare immagini.\
Le tabelle, però, sono tutt’altra cosa.

Non esiste **una sintassi universale** per rappresentare informazioni strutturate.\
Poiché i LLM funzionano in modo probabilistico, non sono naturalmente bravi a interpretare direttamente dati tabellari.

Un articolo di **Microsoft Research** analizza le prestazioni di GPT-4 con dati strutturati:

[https://www.microsoft.com/en-us/research/blog/improving-llm-understanding-of-structured-data-and-exploring-advanced-prompting-methods/](https://www.microsoft.com/en-us/research/blog/improving-llm-understanding-of-structured-data-and-exploring-advanced-prompting-methods/)

<Frame>
  <img src="https://mintcdn.com/innoq/m-MXq-_ojngkTbq6/images/working-with-tables-7.png?fit=max&auto=format&n=m-MXq-_ojngkTbq6&q=85&s=be5ea1ce39f4379f61319768dc986e2f" width="1430" height="229" data-path="images/working-with-tables-7.png" />
</Frame>

*Confronto delle prestazioni tra GPT-3.5 e GPT-4 nelle operazioni su tabelle e dati strutturati.*\
*Fonte: Microsoft Research*

INNOCHAT utilizza attualmente una **struttura basata su JSON** per rappresentare le tabelle.\
Non è perfetta, ma supporta un numero limitato di casi d’uso in cui le tabelle vengono utilizzate come fonte di training.

Sappiamo che molti casi d’uso includono **dataset più grandi, più complessi e più dinamici**.\
La funzione di tabelle statiche non è ideale per questo.

Per questo motivo, consigliamo invece il **Function Calling**.

L’approccio **più robusto e professionale** per la Retrieval-Augmented Generation (RAG) con dati strutturati è:

### → Function Calling con Custom Functions basate su SQL

Questo significa:

1. Progetti le tue funzioni
2. Le funzioni includon
