Il caching dei prompt è un modo per memorizzare e quindi riutilizzare le risposte generate dai prompt eseguiti quando si lavora con modelli linguistici come quelli IBM® Granite. Se si incontra nuovamente lo stesso input (prompt), anziché effettuare una nuova chiamata API, l'applicazione recupererà la risposta precedentemente memorizzata nella cache dei prompt.
Si può pensare alla memorizzazione nella cache dei prompt come a una sorta di "memoria" per la propria applicazione. Il sistema conserva i risultati delle interrogazioni precedenti per risparmiare tempo nelle elaborazioni, non dovendo effettuare richieste ripetute sullo stesso input.
La memorizzazione dei prompt nella cache è importante perché evita chiamate ripetute all'application programming interface (API) riutilizzando le risposte esistenti per prompt ripetuti identici. Questa capacità si traduce in tempi di risposta più rapidi, output costanti e un minore utilizzo dell'API, il che è utile per rimanere entro i limiti di velocità. Inoltre, aiuta a scalare il flusso e a creare resilienza durante le interruzioni. La memorizzazione dei prompt nella cache è una caratteristica fondamentale che aggiunge valore a qualsiasi applicazione di AI conveniente, efficiente e facile da usare.
Per creare un progetto watsonx.ai è necessario un account IBM Cloud .
È necessario anche Python versione 3.12.7
Sebbene sia possibile scegliere tra diversi strumenti, questo tutorial illustra come configurare un account IBM per utilizzare un Jupyter Notebook.
Accedi a watsonx.ai utilizzando il tuo account IBM Cloud.
Crea un progetto watsonx.ai. Puoi ottenere l'ID del progetto dall'interno del tuo progetto. Clicca sulla scheda Gestisci. Quindi, copia l'ID del progetto dalla sezione Dettagli della pagina Generali. Per questo tutorial ti serve questo ID.
Crea un Jupyter Notebook. Questo passaggio aprirà un ambiente Jupyter Notebook in cui puoi copiare il codice ottenuto da questo tutorial. In alternativa, puoi scaricare questo notebook sul tuo sistema locale e caricarlo nel tuo progetto watsonx.ai come asset. Per visualizzare altri tutorial su Granite, visita l'IBM Granite Community.
Crea un'istanza di servizio watsonx.ai Runtime (scegli il piano Lite, che è un'istanza gratuita).
Genera una chiave API.
Associa il servizio watsonx.ai Runtime al progetto che hai creato in watsonx.ai.
Sono necessarie delle librerie in grado di funzionare con il framework langchain e con WatsonxLLM. Per prima cosa, installiamo i pacchetti richiesti. Questo tutorial è stato realizzato utilizzando Python 3.12.7
Nota: se stai utilizzando una versione precedente di pip, puoi utilizzare il comando pip install --upgrade pip per installare facilmente i pacchetti più recenti che potrebbero non essere compatibili con le versioni precedenti. Ma se stai già utilizzando l'ultima versione o hai aggiornato di recente i tuoi pacchetti, puoi saltare questo comando.
Il modulo os viene utilizzato per accedere alle variabili d'ambiente, come le credenziali del progetto o le chiavi API.
WatsonxLLM è un modulo di langchain_ibm che integra IBM Watson LLM per generare output da modelli di AI generativa.
ChatWatsonX Consente interazioni basate sulla chat utilizzando IBM® watsonx tramite LangChain.
SimpleDirectoryReader serve per caricare e leggere documenti da una directory per l'indicizzazione con LlamaIndex.
GenParams contiene chiavi di metadati per configurare i parametri di generazione di testo watsonx.
SQLiteCache consente di configurare un database SQLite .cache.db locale per evitare chiamate API ridondanti e accelerare lo sviluppo e il test.
Per questo tutorial, necessitiamo di alcune librerie e moduli. Assicurati di importare i seguenti elementi e, se non sono installati, una rapida installazione pip risolverà il problema.
Questo codice configura le credenziali per l'accesso all'API IBM Watson machine learning (WML) e garantisce che l'ID del progetto sia configurato correttamente.
Questo codice inizializza IBM® WatsonxLLM per l'utilizzo nell'applicazione:
Per saperne di più sui parametri del modello, come i limiti minimi e massimi dei token, consulta la documentazione.
SQLiteCache è uno strumento di caching persistente offerto da LangChain che memorizza le risposte delle chiamate LLM in un file di database SQLite. SQLiteCache riduce in modo intelligente il tempo della CPU memorizzando elaborazioni costose, il che significa che si concentra sul recupero dei dati anziché sul ricalcolo. Invece di ripetere l'intero processo, estrae semplicemente i risultati dal disco, rendendo il processo efficiente, affidabile e riutilizzabile.
La figura illustra come, con il prompt caching, i risultati vengono caricati istantaneamente dal disco; senza di esso, ogni query fa perdere tempo in elaborazioni ridondanti.
In questo caso, la CPU ha funzionato solo per 22 ms, ma il tempo effettivamente trascorso è stato di 1,43 secondi.
L'esempio suggerisce che la maggior parte del tempo sia stato impiegato in attesa, probabilmente per operazioni di I/O (ad esempio, lettura e scrittura su disco, accesso alla rete o chiamata API)
Ora eseguiamo il modello una seconda volta con il prompt e vediamo il tempo di risposta.
Chiaramente, usando SQLiteCache, la CPU viene utilizzata per soli 7,26 ms, ma il tempo totale è stato di 6,15 secondi.
Ciò indica chiaramente il blocco delle dipendenze esterne (come attendere una risposta da un server).
Il caching dei prompt accelera e riduce il costo delle richieste API ai modelli linguistici di grandi dimensioni, come GPT-4o. Richiede il contenuto della cache come token di input, token di output, embedding e messaggi dell'utente, un prompt di sistema o l'output di una funzione, che ora utilizza un contenuto memorizzato nella cache anziché le richieste di rete per una nuova revisione. Questo metodo offre prezzi più bassi, una maggiore latenza di risposta e migliori indicatori chiave delle prestazioni (KPI).
La memorizzazione nella cache rapida può essere utile per chatbot, sistemi RAG, assistenti di fine-tuning e assistenti di codifica. Una solida strategia di caching che includa funzioni come lettura e scrittura della cache, messaggio di sistema, controllo della cache e time to live (TTL) effettivo migliorerà i tassi di accesso alla cache e ridurrà i tassi di perdita.
L'uso coerente degli stessi token di prompt, del prefisso di prompt e le istruzioni di utilizzo del sistema aiuta a garantire prestazioni di prompt costanti nelle conversazioni a più turni e nelle richieste successive. Indipendentemente dall'utilizzo di Python, di un SDK o dalla collaborazione con OpenAI o un altro provider, capire come funziona la memorizzazione dei prompt nella cache ti consentirà di implementarla al meglio per utilizzarla in molti casi d'uso.