LLMLingua : compresser ses prompts pour réduire coûts et latence des LLM
Quand un agent IA s’industrialise, les prompts grossissent : instructions système, exemples few-shot, contexte RAG, historique conversationnel. Chaque token compte, à la fois en facture API et en temps de réponse. LLMLingua, projet open source de Microsoft Research (licence MIT), propose une réponse pragmatique : compresser le prompt avant l’envoi au modèle, sans dégrader la sortie.
Le principe : un petit modèle pour alléger les gros
LLMLingua repose sur une observation simple : les LLM tolèrent une part importante de redondance dans leurs entrées. Un petit modèle de langage local (LLaMA 7B, GPT-2, ou plus petit) calcule la perplexité de chaque token et supprime ceux qui sont les plus prévisibles, donc les moins informatifs. Le prompt restant, parfois 5 à 20 fois plus court, est envoyé au modèle cible, GPT-4, Claude, ou un modèle open source servi via vLLM.
Trois variantes coexistent dans le projet :
- LLMLingua : compression token par token, rapide et générique
- LongLLMLingua : optimisé pour les très longs contextes (RAG, documents), avec réordonnancement des passages pertinents
- LLMLingua-2 : version supervisée, plus rapide encore, formée par distillation à partir de GPT-4
Ce que ça change en production
Les gains rapportés par l’équipe Microsoft tournent autour de 4x à 20x de compression selon le scénario, avec une perte de qualité négligeable sur les benchmarks classiques (LongBench, GSM8K, ZeroSCROLLS). Concrètement, cela ouvre plusieurs leviers :
- Réduction directe des coûts API : un prompt RAG de 8000 tokens passe à 1000 ou 2000, la facture suit
- Latence en baisse : moins de tokens en entrée, c’est aussi moins de temps de traitement côté serveur
- Fenêtres de contexte respectées : utile pour rester sous les limites de modèles plus petits ou auto-hébergés
- Économie d’énergie sur les déploiements self-hosted via Ollama, vLLM ou LiteLLM
Intégration dans une stack open source
LLMLingua s’installe en quelques lignes via pip et s’intègre naturellement avant l’appel au LLM, en aval du pipeline RAG (Qdrant, pgvector) et juste avant le routage. Dans une architecture d’agents, on peut le placer entre le reranker et l’appel final au modèle. Le projet expose une API Python claire :
from llmlingua import PromptCompressor
compressor = PromptCompressor(model_name="microsoft/llmlingua-2-xlm-roberta-large-meetingbank")
compressed = compressor.compress_prompt(prompt, rate=0.33)
# compressed["compressed_prompt"] envoyé au LLM
Limites et points d’attention
La compression n’est pas magique : sur des prompts très structurés (JSON, code, instructions précises), elle peut casser la syntaxe. LLMLingua-2 corrige une partie de ce travers via un entraînement supervisé, mais il reste prudent de tester son pipeline avec un outil comme Promptfoo ou RAGAS avant de basculer en production. À noter aussi que le petit modèle de compression doit tourner quelque part, ce qui ajoute une dépendance matérielle modeste mais réelle.
Où LLMLingua trouve sa place
Dans une architecture IA mature, LLMLingua complète d’autres briques évoquées précédemment sur ce site : un pipeline RAG basé sur Qdrant et un reranker, une couche d’évaluation RAGAS, un routage Semantic Router pour aiguiller vers le bon modèle, et des tests Promptfoo en CI/CD. La compression de prompt est l’une de ces optimisations discrètes qui ne se voient pas dans les démos, mais qui changent l’économie d’un système en production.
Projet : github.com/microsoft/LLMLingua — Licence MIT
