> For the complete documentation index, see [llms.txt](https://docs.aisuru.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.aisuru.com/avanzate/integrazioni/funzioni/funzioni-avanzate/cache-delle-funzioni.md).

# Cache delle funzioni

La cache delle funzioni in AIsuru ti consente di memorizzare temporaneamente i risultati delle chiamate a funzioni, permettendo all'Agente di riutilizzare le informazioni senza ripetere richieste identiche.

### Come funziona la cache delle funzioni

Quando un utente interagisce con il tuo Agente e viene attivata una funzione:

1. Il risultato della chiamata alla funzione viene **salvato automaticamente nel contesto della conversazione;**
2. Questo risultato diventa disponibile nei turni successivi della conversazione;
3. L'IA generativa viene istruita a **controllare prima i dati nella cache** prima di richiamare una funzione;
4. Se le informazioni necessarie sono già presenti, l'Agente utilizzerà i dati memorizzati invece di effettuare una nuova chiamata.

Questa ottimizzazione offre diversi vantaggi:

* **Riduzione dei tempi di risposta;**
* **Minore consumo di risorse;**
* **Migliore esperienza utente.**

### Gestione della cache

La cache delle funzioni viene gestita automaticamente e i dati memorizzati sono disponibili come:

* **Testo preformattato** allegato al contenuto;
* **Informazioni inserite nel contesto della conversazione.**

Le informazioni memorizzate nella cache sono considerate valide per la conversazione corrente o finché il contesto non è pieno; dopodiché, l'Agente può decidere di richiamare la funzione per ottenere dati aggiornati.

### Personalizzazione tramite istruzioni

Puoi influenzare il comportamento della cache tramite le istruzioni dell'IA generativa. Puoi:

* **Istruire l'Agente** a preferire i dati memorizzati nella cache per determinate funzioni;
* **Forzare un aggiornamento** in situazioni specifiche, aggirando la cache;
* **Definire casi d'uso** in cui la funzione deve essere sempre richiamata per ottenere dati aggiornati.

#### Esempio di istruzioni per la gestione della cache

```
When a user asks about the weather:

1. Check whether weather data is already available in the function cache
2. If the data is recent (less than 1 hour old), use the existing data
3. If the data is older or if the user says "updated" or "current", call the function again
4. For requests about future forecasts, always make a fresh call
```

### Esempi pratici

#### Esempio 1: Informazioni sul libro

Considera questo scambio tra un utente e un Agente:

* **Utente**: "Non dirmi affatto a cosa si riferisce la caratteristica del libro, dimmi solo di che tipo è, NON IL VALORE (ad esempio, non dirmi 100kg, dimmi 'peso')";
* **Agente**: "In base ai dati ricevuti, posso dirti che la caratteristica del libro di cui chiedi riguarda il colore. Non ti dirò quale colore specifico sia, come hai richiesto, ma posso confermare che si tratta di un attributo cromatico.";
* **Utente**: "OK, ora SENZA USARE ALCUNA FUNZIONE, TU conosci il colore? Ora dimmelo".
* **Agente**: "Sì, conosco il colore perché è stato rivelato nella precedente chiamata alla funzione BOOK, che ha restituito 'psst il libro è giallo'. Quindi il colore del libro è giallo."

In questo esempio, la prima interazione ha chiamato la funzione "BOOK", che ha recuperato le informazioni sul colore. Queste informazioni sono state salvate nella cache e l'Agente ha potuto accedervi direttamente nella seconda interazione, senza chiamare nuovamente la funzione.

#### Esempio 2: dati dei clienti in un ambiente aziendale

* **Utente**: "Mostrami i dati di vendita di ACME Corp";
* **Agente**: \[Chiama la funzione `getCustomerData` con il parametro "ACME Corp"] "Ecco i dati di vendita di ACME Corp: fatturato annuale: €250,000, ultimo ordine: 15 giorni fa, prodotti acquistati: servizi cloud, hardware, consulenza.";
* **Utente**: "Qual è stata la loro spesa nell'ultimo trimestre?";
* **Agente**: \[Utilizza dati già memorizzati nella cache] "In base ai dati che ho, ACME Corp ha speso €75,000 nell'ultimo trimestre, principalmente per servizi cloud e consulenza.";
* **Utente**: "Ci sono stati cambiamenti recenti nel loro profilo?";
* **Agente**: \[Richiama la funzione perché la richiesta implica dati potenzialmente aggiornati] "Fammi controllare le informazioni più recenti... Sì, ci sono stati cambiamenti: ACME Corp ha recentemente ampliato il proprio portafoglio con nuovi servizi di cybersecurity e ha aumentato il budget del 15% rispetto all'ultimo trimestre."

### Limiti della cache

Ci sono alcune limitazioni di cui tenere conto:

* La cache occupa una **porzione limitata del contesto** disponibile per il modello, pari a circa il 15% del contesto del modello;
* Per un modello con un contesto di 200k token, ciò equivale a circa 120.000 caratteri;
* Le chiamate di funzioni con risposte molto lunghe potrebbero essere troncate.

### Buone pratiche

Per sfruttare al meglio la cache delle funzioni:

1. **Struttura le risposte delle funzioni** in modo conciso e informativo;
2. **Definisci chiaramente nelle istruzioni** quando utilizzare la cache e quando richiamare la funzione;
3. **Considera la validità temporale** dei dati per le funzioni che forniscono informazioni che cambiano nel tempo;
4. **Monitora le prestazioni dell'Agente** per verificare che la cache stia effettivamente migliorando l'esperienza;
5. **Bilancia accuratezza ed efficienza**: per dati critici o che cambiano frequentemente, potresti dover limitare l'uso della cache.

Utilizzando strategicamente la cache delle funzioni, puoi creare Agenti più reattivi ed efficienti, migliorando significativamente l'esperienza complessiva dei tuoi utenti.
