Prompt Compression
La compressione dei prompt accorcia gli input degli LLM eliminando i token con poche informazioni o codificando il contesto in modo compatto, riducendo costi e latenza senza compromettere le risposte.
La compressione dei prompt accorcia l'input di un modello linguistico di grandi dimensioni (LLM) mantenendo le informazioni necessarie per rispondere, così una richiesta usa meno token, viene elaborata più velocemente e rientra nella finestra di contesto. I metodi spaziano dall'eliminazione di parole prevedibili con un piccolo modello linguistico, alla sintesi di cronologie lunghe, fino all'addestramento di token appresi compatti che sostituiscono interi passaggi. La compressione è vantaggiosa quando i prompt sono lunghi e vengono inviati spesso, come nelle pipeline di generazione aumentata dal recupero (RAG) che inseriscono molti documenti recuperati, negli agenti di IA le cui cronologie crescono a ogni passaggio e nelle applicazioni con istruzioni ed esempi lunghi. I provider fatturano ogni token di input e il calcolo dell'attenzione cresce con la lunghezza dell'input, quindi comprimere un prompt della metà riduce all'incirca della metà il costo dell'input e diminuisce la latenza di inferenza.
Come funziona la compressione dei prompt#
La compressione hard dei prompt trasforma il testo in un testo più breve leggibile da qualsiasi LLM, compresi i modelli API chiusi. La maggior parte dei metodi assegna un punteggio a ogni token con un piccolo modello linguistico ed elimina quelli che il modello ritiene facili da prevedere, perché contengono meno informazioni. Selective Context applica questa idea a parole e frasi, mentre LLMLingua di Microsoft aggiunge un controller di budget che assegna diversi rapporti di compressione all'istruzione, agli esempi e alla domanda, oltre a una potatura iterativa a livello di token. In questo modo raggiunge una compressione fino a 20x con una perdita di prestazioni ridotta. LLMLingua-2 riformula la compressione come classificazione dei token con un encoder bidirezionale come XLM-RoBERTa, addestrato su esempi di compressione distillati da un LLM più grande; funziona da 3x a 6x più velocemente dei metodi precedenti e accelera la latenza end-to-end da 1,6x a 2,9x con una compressione da 2x a 5x. I metodi astrattivi chiedono invece a un modello di riassumere il contesto: comprimono di più, ma possono perdere dettagli necessari per rispondere alla domanda.
La compressione soft dei prompt trasforma il testo in pochi embedding appresi che il modello legge al posto dei token originali. I token Gist addestrano LLaMA-7B e FLAN-T5-XXL a comprimere un'istruzione in una manciata di token speciali, ottenendo una compressione fino a 26x e fino al 40% di FLOPs in meno. Questi metodi richiedono l'accesso ai pesi del modello e si applicano quindi ai modelli aperti.
Il nucleo della compressione a livello di token si implementa in poche righe di PyTorch. Questo esempio usa GPT-2 da 124 milioni di parametri di Hugging Face Transformers per calcolare l'informazione propria di ogni token, ossia il logaritmo negativo della probabilità del token date tutte le parole precedenti, e conserva la metà più sorprendente:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("gpt2")
model = AutoModelForCausalLM.from_pretrained("gpt2")
prompt = (
"The quarterly maintenance report states that, as of the end of the quarter, a total of three conveyor "
"belts on line 4 were found to have worn bearings, and all of them were replaced on March 12 by the night shift."
)
ids = tokenizer(prompt, return_tensors="pt").input_ids[0]
# Self-information of each token, -log p(token | preceding tokens), under a small language model
with torch.no_grad():
logits = model(ids[None]).logits[0, :-1]
info = -logits.log_softmax(-1).gather(1, ids[1:, None]).squeeze(1)
# Keep the first token and the more surprising half of the rest, in their original order
keep = torch.cat([torch.tensor([True]), info > info.median()])
compressed = tokenizer.decode(ids[keep])
print(f"{len(ids)} -> {keep.sum().item()} tokens: {compressed}")Stampa 46 -> 23 tokens: The quarterly maintenance report states, a three convey on line 4 found worn bearings all replaced on March 12 by night shift. Le informazioni essenziali restano, compresi il punto 4, i cuscinetti usurati, il 12 marzo e il turno di notte, mentre scompare il riempitivo prevedibile come "alla fine del trimestre". Il frammento "convey", rimasto da "conveyor belts", è un tipico artefatto della potatura di singoli token, motivo per cui alcuni metodi eliminano parole o frasi intere.
Compressione delle immagini#
I modelli visione-linguaggio trasformano ogni immagine in centinaia di token visivi, molti dei quali ridondanti. FastV elimina metà dei token dell'immagine dopo il secondo layer e riduce i FLOPs del 45% per LLaVA-1.5-13B senza compromettere le prestazioni; la fusione dei token applica un'idea simile all'interno dei vision transformer. Un rilevatore di oggetti può anche comprimere le immagini: Ultralytics YOLO26 riduce una foto a Results.summary(), un elenco che include il nome della classe, la confidenza e le coordinate del box di ogni oggetto, così una pipeline LLM interessata solo agli oggetti presenti e alla loro posizione può inviare poche decine di token per oggetto invece di un'immagine che ne richiede da centinaia a oltre mille.
Compressione dei prompt e tecniche correlate#
- Memorizzazione nella cache dei prompt: Memorizza gli stati calcolati dal modello per un prefisso di prompt ripetuto, evitando di ricalcolarli. La lunghezza del prompt non cambia; le due tecniche si combinano bene, comprimendo la parte variabile del prompt e memorizzando nella cache quella fissa.
- Compressione della cache KV: Elimina o quantizza gli stati chiave-valore all'interno del modello durante la generazione. La compressione dei prompt agisce sull'input prima che il modello lo veda.
- Prompt engineering: Le persone scrivono a mano prompt chiari e concisi. La compressione è automatica e si applica a contenuti che nessuno modifica, come i documenti recuperati.
- Ingegneria del contesto: La pratica più ampia di decidere cosa inserire nel contesto di un modello a ogni passaggio. La compressione è uno dei suoi strumenti, insieme al recupero e al filtraggio.
- Arricchimento dei prompt: Aggiunge al prompt un contesto recuperato o generato. Le pipeline spesso arricchiscono il prompt per primo e poi comprimono il risultato.
Applicazioni nel mondo reale#
- Pipeline RAG: I passaggi recuperati vengono compressi prima della generazione, così il budget può includere più fonti e il modello si concentra sulle frasi che rispondono alla domanda.
- Cronologie degli agenti: Quando il contesto si riempie, gli agenti di programmazione e ricerca compattano la cronologia, sostituendo i vecchi output degli strumenti e i turni di conversazione con un riepilogo, perché l'accuratezza diminuisce quando i contesti lunghi si riempiono di contenuti obsoleti.
- Prompt few-shot: Gli elenchi lunghi di esempi svolti si comprimono bene. Il controller di budget di LLMLingua elimina prima intere dimostrazioni, ordinate per perplessità, e poi elimina singoli token, mantenendo l'85% dell'istruzione e il 90% della domanda nelle impostazioni predefinite dell'articolo.










