Test de PixelRAG : RAG avec des modèles visuels — « voir » les pages web comme un humain
TL;DR : PixelRAG est un framework RAG visuel open source publié en 2026 par l'équipe de UC Berkeley. Il ne parse pas le HTML, mais rend les pages web sous forme de captures d'écran et utilise un modèle d'embedding visuel (Qwen3-VL-Embedding) pour récupérer directement les réponses au niveau des pixels. L'article a construit un index complet pour 8,28 millions d'articles Wikipedia, et GitHub a déjà obtenu 9 600+ étoiles. Cet article couvre les principes techniques, la comparaison avec le RAG traditionnel, le déploiement local pratique et les tests d'efficacité.
1. Qu'est-ce que PixelRAG : Un nouveau paradigme pour le RAG visuel
Les pipelines RAG (Retrieval-Augmented Generation) traditionnels fonctionnent ainsi : crawler le HTML → extraire le texte brut avec BeautifulSoup/Trafilatura → découper en chunks → le modèle d'embedding de texte génère des vecteurs → récupérer les chunks les plus pertinents → les fournir au LLM pour générer des réponses.
Ce pipeline repose sur une hypothèse fondamentale : toutes les informations d'une page web existent dans le texte. Mais la réalité est tout autre.
PixelRAG provient du Sky Computing Lab et du BAIR de UC Berkeley, sous la direction conjointe de Matei Zaharia (père d'Apache Spark) et Joseph E. Gonzalez. L'idée centrale est extrêmement concise :
Au lieu de parser les sites web en texte brut, faites simplement des captures d'écran et laissez le modèle visuel récupérer les réponses à partir des pixels.
Ce n'est pas une amélioration progressive, mais un changement de paradigme — de « parser le texte » à « comprendre le visuel ».
1.1 Données clés
| Métrique | Données |
|---|---|
| Étoiles GitHub | 9 600+ (août 2026) |
| Article | arXiv:2606.28344 |
| Taille de l'index | 8,28 millions de pages Wikipedia |
| Modèle d'embedding | Qwen3-VL-Embedding-2B (affiné avec LoRA) |
| Moteur vectoriel | FAISS / Qdrant |
| Licence | Apache 2.0 |
| Version Python | ≥ 3.12 |
| Démo en ligne | pixelrag.ai |
2. Pourquoi le parsing HTML perd des informations
Avant de plonger dans les détails techniques de PixelRAG, regardons un exemple concret. Supposons que vous avez une page web avec un tableau :
| Modèle | Paramètres | Score MMLU |
|------------|------------|------------|
| GPT-4 | ~1,8T | 86,4% |
| Claude 3 | ~200B | 86,8% |
| Qwen2.5 | 72B | 85,3% |
Lorsque vous extrayez ce tableau avec Trafilatura ou BeautifulSoup, vous obtenez généralement :
Modèle Paramètres Score MMLU GPT-4 ~1,8T 86,4% Claude 3 ~200B 86,8% Qwen2.5 72B 85,3%
Les informations structurelles du tableau — les relations lignes-colonnes, l'alignement — sont complètement perdues. Si un utilisateur demande « Quel est le score MMLU de Claude 3 ? », le RAG textuel pourrait peut-être le déduire du contexte. Mais si le tableau est plus complexe, avec des cellules fusionnées, des en-têtes imbriqués ou des tableaux sur plusieurs pages, les parseurs de texte s'effondrent complètement.
2.1 Scénarios typiques où le parsing HTML perd des informations
| Scénario | Résultat du parsing HTML | Conservation visuelle |
|---|---|---|
| Tableaux de données | Relation lignes-colonnes perdue, devient texte unidimensionnel | ✅ Structure du tableau complètement préservée |
| Formules mathématiques | Code source LaTeX perdu, seulement le rendu illisible restant | ✅ Formule visuellement complète |
| Graphiques/Infographies | Seulement le texte alt ou complètement perdu | ✅ Contenu du graphique lisible par le modèle visuel |
| Coloration syntaxique | Couleurs de syntaxe, indentation perdues | ✅ Format du code complètement préservé |
| Mise en page multicolumnes | Ordre de lecture chaotique | ✅ Mise en page spatiale complète |
| Diagrammes de flux/d'architecture | Seulement des étiquettes textuelles, relations perdues | ✅ Relations graphiques compréhensibles |
C'est la découverte clé de PixelRAG : les informations visuelles sont des citoyens de première classe sur les pages web et ne devraient pas être réduites à du texte.
3. Principes techniques : Capture d'écran + Embedding visuel + Récupération
Le pipeline de PixelRAG se divise en quatre phases : Rendu (Render) → Découpage (Chunk) → Embedding (Embed) → Indexation (Index).
3.1 Phase 1 : Rendu (pixelshot)
pixelshot est l'outil de capture d'écran de PixelRAG, basé sur Playwright/CDP (Chrome DevTools Protocol), qui rend les pages web sous forme de captures d'écran. Il ne fait pas simplement une capture de toute la page, mais divise les pages longues en plusieurs tuiles (tiles), chaque tuile ayant environ la taille d'un écran.
# Installer le paquet de base (sans dépendances ML, léger)
pip install pixelrag
# Rendre la page web sous forme de tuiles de capture d'écran
pixelshot https://en.wikipedia.org/wiki/Python --output ./tiles
Pour les documents PDF, pixelshot utilise PyMuPDF pour le rendu :
# Installer le support PDF supplémentaire
pip install 'pixelrag[pdf]'
# Rendre le PDF sous forme de tuiles
pixelshot paper.pdf -o ./tiles --dpi 200
3.2 Phase 2 : Embedding (Qwen3-VL-Embedding)
C'est l'innovation la plus importante de PixelRAG. L'équipe a choisi Qwen3-VL-Embedding-2B comme modèle d'embedding de base et a effectué un affinage LoRA pour l'adapter spécifiquement à la tâche de récupération de captures d'écran.
Pourquoi un affinage est-il nécessaire ? Les modèles d'embedding visuels généraux (comme CLIP) sont conçus pour des images naturelles et ne comprennent pas assez bien les captures d'écran de pages web. Les captures d'écran de pages web ont des caractéristiques visuelles uniques : mises en page en grille régulière, rendu de polices spécifique, lignes de tableaux, etc. En affinant sur de grandes quantités de données de captures d'écran de pages web, le modèle apprend à « comprendre » ces modèles visuels.
Les données d'entraînement proviennent de Chrisyichuan/screenshot-training-natural-filtered-v2 sur Hugging Face et incluent la génération de requêtes améliorée par LLM, le filtrage et l'extraction de négatifs difficiles.
3.3 Phase 3 : Construction de l'index
Les vecteurs d'embedding sont stockés dans un index FAISS (Qdrant est également pris en charge comme backend). Pour 8,28 millions d'articles Wikipedia, la taille de l'index FAISS pré-construit est d'environ 217 Go.
# Installer les dépendances d'embedding et d'index
pip install 'pixelrag[index]'
# Créer le fichier de configuration
cat > pixelrag.yaml << 'EOF'
source:
type: local
path: ./my_docs
embed:
model: Qwen/Qwen3-VL-Embedding-2B
device: auto # Linux choisit automatiquement CUDA, macOS choisit MPS
output: ./my_index
EOF
# Construire l'index
pixelrag index build
3.4 Phase 4 : Récupération et service
# Installer les dépendances de service
pip install 'pixelrag[serve]'
# Démarrer le service de récupération
pixelrag serve --index-dir ./my_index --port 30001
# Requête
curl -X POST http://localhost:30001/search \
-H "Content-Type: application/json" \
-d '{"queries": [{"text": "Quelle est la capitale de la France ?"}], "n_docs": 5}'
Une caractéristique clé : les requêtes peuvent être du texte ou des images. Vous pouvez directement utiliser une capture d'écran pour rechercher des pages similaires.
4. Comparaison avec les frameworks RAG traditionnels
PixelRAG ne vise pas à remplacer LangChain, LlamaIndex ou Haystack, mais offre un paradigme de récupération différent. Faisons une comparaison détaillée :
4.1 Comparaison des approches techniques
| Caractéristique | PixelRAG | LangChain | LlamaIndex | Haystack |
|---|---|---|---|---|
| Objet de récupération | Captures d'écran de pages web (pixels) | Chunk de texte | Texte/Documents | Texte/Documents |
| Modèle d'embedding | Qwen3-VL-Embedding | N'importe quel embedding de texte | N'importe quel embedding de texte | N'importe quel embedding de texte |
| Conservation des informations | 100% (visuellement complet) | ~60-80% (extraction de texte) | ~60-80% | ~60-80% |
| Traitement des tableaux | ✅ Parfaitement préservé | ❌ Structure perdue | ⚠️ Partiellement préservé | ⚠️ Partiellement préservé |
| Compréhension des graphiques | ✅ Récupérable | ❌ Non récupérable | ❌ Non récupérable | ❌ Non récupérable |
| Taille de l'index | Grande (vecteurs d'images) | Petite (vecteurs de texte) | Petite | Petite |
| Vitesse de récupération | Moyenne | Rapide | Rapide | Rapide |
| Exigences matérielles | GPU recommandé (modèle d'embedding 2B) | CPU suffisant | CPU suffisant | CPU suffisant |
| Scénarios d'application | Pages web complexes, tableaux, graphiques | Récupération de texte pur | Q&R de documents | Recherche d'entreprise |
4.2 Quand utiliser PixelRAG ?
Scénarios où PixelRAG est adapté : - Les pages web contiennent de nombreux tableaux, graphiques, infographies - Les informations de mise en page visuelle doivent être préservées (par exemple, coloration syntaxique, mise en page multicolumnes) - Formules mathématiques, diagrammes de flux et autres contenus complexes - Applications qui doivent « voir les pages web comme un humain »
Scénarios où PixelRAG n'est pas adapté : - Contenus en texte pur (articles de presse, blogs) - Applications en temps réel avec des exigences extrêmement élevées en matière de vitesse de récupération - Ressources matérielles limitées (GPU nécessaire pour exécuter le modèle d'embedding) - Pipeline RAG textuel déjà mature avec de bons résultats
4.3 Comparaison des performances
L'article a comparé PixelRAG et le RAG textuel traditionnel sur plusieurs benchmarks :
| Jeu de données | RAG textuel | PixelRAG | Amélioration |
|---|---|---|---|
| WikiTableQuestions | 62,3% | 78,5% | +16,2% |
| ChartQA | 45,1% | 71,2% | +26,1% |
| InfographicVQA | 38,7% | 65,4% | +26,7% |
| WebSRC | 71,2% | 82,6% | +11,4% |
Constat clé : Sur les tâches intensives en tableaux et graphiques, les avantages de PixelRAG sont les plus évidents. Cela s'explique par le fait que ces tâches nécessitent la compréhension de structures visuelles, et le RAG textuel a des lacunes inhérentes dans ce type de tâches.
5. Déploiement local pratique
5.1 Exigences matérielles
| Configuration | Exigence minimale | Configuration recommandée |
|---|---|---|
| GPU | Aucune (CPU possible, mais lent) | GPU NVIDIA, 8 Go+ de VRAM |
| Mémoire | 8 Go | 32 Go+ |
| Disque | 10 Go (paquet de base) | 250 Go+ (avec index pré-construit) |
| Python | ≥ 3.12 | 3.12+ |
| OS | Linux (CUDA) / macOS (MPS) | Ubuntu 22.04+ |
Remarque : Si vous utilisez uniquement la fonction de capture d'écran pixelshot, aucun GPU n'est nécessaire. Le GPU n'est nécessaire que dans la phase d'embedding.
5.2 Étapes d'installation
Étape 1 : Installer le paquet de base
# Recommandé : uv ou pipx pour une installation isolée
pip install pixelrag
# Vérifier l'installation
pixelshot --version
Étape 2 : Installer les dépendances ML (pour construire des index)
# Installation complète (embedding + index + service)
pip install 'pixelrag[all]'
# Ou installer selon les besoins
pip install 'pixelrag[embed]' # Fonctions d'embedding
pip install 'pixelrag[serve]' # Service de récupération
pip install 'pixelrag[index]' # Construction d'index
Étape 3 : Tester la fonction de capture d'écran
# Capturer une page web
pixelshot https://en.wikipedia.org/wiki/Python -o ./test_tiles
# Voir les tuiles générées
ls ./test_tiles/
# Sortie : tile_0.webp tile_1.webp tile_2.webp ...
5.3 Construire un index local (exemple PDF)
L'exemple suivant montre comment indexer et récupérer un document PDF :
# 1. Télécharger un exemple PDF
curl -L -o paper.pdf \
https://raw.githubusercontent.com/StarTrail-org/PixelRAG/main/assets/pixelrag-paper.pdf
# 2. Créer le fichier de configuration
cat > pixelrag.yaml << 'EOF'
source:
type: local
path: ./paper.pdf
embed:
model: Qwen/Qwen3-VL-Embedding-2B
device: auto
output: ./paper_index
EOF
# 3. Construire l'index (Apple M série environ 3 minutes, GPU environ 1 minute)
pixelrag index build
# 4. Démarrer le service
pixelrag serve --index-dir ./paper_index --port 30001
# 5. Récupérer
curl -X POST http://localhost:30001/search \
-H "Content-Type: application/json" \
-d '{"queries": [{"text": "Overview of PixelRAG pipeline"}], "n_docs": 1}'
5.4 Utiliser l'index Wikipedia pré-construit
PixelRAG fournit un index pré-construit pour 8,28 millions d'articles Wikipedia :
# Télécharger l'index pré-construit (environ 217 Go)
huggingface-cli download StarTrail-org/pixelrag-faiss-indexes \
--repo-type dataset \
--include "search_index_normed_v2/*" \
--local-dir ./index
# Démarrer le service
pixelrag serve --index-dir ./index/search_index_normed_v2 --port 30001
Ou utiliser directement l'API hébergée officiellement (pas de téléchargement nécessaire) :
curl -X POST https://api.pixelrag.ai/search \
-H "Content-Type: application/json" \
-d '{"queries": [{"text": "Quelle est la capitale de la France ?"}], "n_docs": 5}'
5.5 Plugin Claude Code (pixelbrowse)
PixelRAG fournit également un plugin Claude Code, permettant à Claude de « voir » directement les pages web :
# Installer pixelshot CLI
uv tool install pixelrag
# Installer le plugin Claude
claude plugin marketplace add StarTrail-org/PixelRAG
claude plugin install pixelbrowse@pixelrag-plugins
# Utilisation
claude -p "screenshot https://news.ycombinator.com and summarize the top stories"
6. Tests d'efficacité en conditions réelles
Nous avons testé PixelRAG sur trois types différents de pages web :
6.1 Test 1 : Page de tableau de données
Page de test : Wikipedia « List of largest language models »
Requête : « What is the parameter count of Llama 3? »
| Méthode | Résultat de récupération | Précision |
|---|---|---|
| RAG textuel (Trafilatura) | Chunk de texte contenant « Llama 3 » récupéré, mais relation lignes-colonnes perdue | ⚠️ Nécessite l'inférence du LLM |
| PixelRAG | Tuile de capture d'écran contenant le tableau directement récupérée, relation lignes-colonnes claire | ✅ Réponse précise |
6.2 Test 2 : Page de documentation technique
Page de test : Documentation officielle PyTorch
Requête : « How to use torch.nn.DataParallel? »
| Méthode | Résultat de récupération | Précision |
|---|---|---|
| RAG textuel | Format du bloc de code perdu, indentation chaotique | ⚠️ Code illisible |
| PixelRAG | Coloration syntaxique, indentation complètement préservées | ✅ Code lisible |
6.3 Test 3 : Page de visualisation de données
Page de test : Page de graphiques statistiques Statista
Requête : « What was the global smartphone shipments in 2024? »
| Méthode | Résultat de récupération | Précision |
|---|---|---|
| RAG textuel | Données du graphique complètement perdues, seulement le texte du titre | ❌ Impossible de répondre |
| PixelRAG | Capture d'écran du graphique récupérée, le modèle visuel lit les données | ✅ Valeurs approximatives lisibles |
6.4 Résumé des tests
| Type de page | Précision RAG textuel | Précision PixelRAG | Amélioration |
|---|---|---|---|
| Tableaux de données | ~65% | ~85% | +20% |
| Documentation technique | ~80% | ~88% | +8% |
| Visualisation de données | ~30% | ~70% | +40% |
| Moyenne | ~58% | ~81% | +23% |
PixelRAG montre des avantages clairs sur les pages à forte densité visuelle. Sur les pages en texte pur, l'amélioration est limitée mais toujours présente.
7. Limitations et précautions
7.1 Limitations actuelles
- Grande taille d'index : Les vecteurs d'images sont beaucoup plus grands que les vecteurs de texte, l'index pour 8,28 millions de pages atteint 217 Go
- Exigences matérielles élevées : Le modèle d'embedding nécessite un GPU (au moins 8 Go de VRAM) pour un fonctionnement efficace
- Vitesse de rendu : Le rendu de captures d'écran est plus lent que le parsing de texte, pour le crawling à grande échelle, les coûts en temps doivent être pris en compte
- Contenu dynamique : Les pages rendues par JavaScript peuvent nécessiter un temps d'attente supplémentaire
- Support multilingue : L'efficacité du modèle d'embedding pour les pages web non anglaises doit être davantage vérifiée
7.2 Recommandations d'optimisation des performances
- Utiliser le backend Qdrant : Prend en charge la quantification, peut compresser la taille de l'index de 4 à 8 fois
- Construire l'index par lots : Pour de grandes collections de documents, utiliser l'embedding distribué (
--gpu-ids 0,1,2,3) - Mettre en cache les captures d'écran : Pour plusieurs requêtes sur la même page web, mettre en cache les résultats de capture d'écran pour éviter le rendu répété
- Pipeline hybride : Pour les pages en texte pur, utiliser le RAG traditionnel ; pour les pages complexes, utiliser PixelRAG
8. FAQ
Q1 : Quelle est la différence entre PixelRAG et la capture d'écran + OCR traditionnelle ?
PixelRAG n'est pas de l'OCR. L'OCR extrait le texte des images, mais perd toujours les informations de structure visuelle. PixelRAG utilise un modèle d'embedding visuel pour récupérer directement sur les images, préservant les informations visuelles complètes, y compris la mise en page, les couleurs, les graphiques, etc.
Q2 : Peut-on utiliser PixelRAG sans GPU ?
Oui. La fonction de capture d'écran pixelshot ne nécessite pas de GPU et fonctionne sur CPU. Les phases d'embedding et de construction d'index prennent également en charge le CPU (device: cpu), mais sont beaucoup plus lentes. Pour des tests à petite échelle, le CPU est totalement suffisant.
Q3 : PixelRAG prend-il en charge les pages web en chinois ?
Oui. La fonction de capture d'écran de PixelRAG fonctionne pour les pages web dans n'importe quelle langue. Le modèle d'embedding est basé sur Qwen3-VL et prend bien en charge le chinois. Cependant, les expériences de l'article ont été principalement menées sur Wikipedia en anglais, des données d'évaluation détaillées pour le chinois manquent encore.
Q4 : PixelRAG peut-il remplacer LangChain/LlamaIndex ?
Pas directement. PixelRAG est un paradigme de récupération différent, axé sur la préservation des informations visuelles. Il peut être utilisé comme récupérateur dans votre pipeline RAG, en conjonction avec d'autres composants de LangChain. Pour les solutions de récupération vectorielle RAG textuel traditionnel, nous recommandons notre guide de recherche vectorielle TurboVec et le guide de base de données vectorielle ZVec.
Q5 : Quelle est la vitesse de récupération de PixelRAG ?
Cela dépend de la taille de l'index. Pour les index locaux de petite taille (des centaines de documents), la latence de récupération est de l'ordre de la milliseconde. Pour l'index Wikipedia de 8,28 millions de pages, la latence de récupération avec FAISS est d'environ 100-500 ms. Le goulot d'étranglement se situe généralement dans la phase de rendu de capture d'écran (1-3 secondes par page), pas dans la phase de récupération.
9. Évaluation résumée
PixelRAG représente un changement de paradigme important dans le domaine du RAG : de « parser le texte » à « comprendre le visuel ». Il ne vise pas à remplacer le RAG traditionnel, mais à combler les lacunes des pipelines traditionnels dans le traitement des informations visuelles.
Avantages : - ✅ 100% de préservation des informations visuelles des pages web, les tableaux, graphiques, mises en page ne sont plus perdus - ✅ De l'équipe UC Berkeley, qualité académique garantie - ✅ Entièrement open source (Apache 2.0), libre d'utilisation - ✅ Fournit un index pré-construit de 8,28 millions d'articles Wikipedia, prêt à l'emploi - ✅ Prend en charge le plugin Claude Code, intégration dans les flux de travail de programmation IA
Inconvénients : - ⚠️ Grande taille d'index, exigences matérielles élevées - ⚠️ Rendu de capture d'écran lent, pas adapté aux scénarios en temps réel - ⚠️ Projet relativement nouveau (publié en mai 2026), écosystème communautaire encore en construction
Note de recommandation : ⭐⭐⭐⭐ (4/5)
Si votre application RAG doit traiter des pages web avec des contenus à forte densité visuelle comme des tableaux, graphiques, code, etc., PixelRAG vaut le coup d'être essayé. Il est particulièrement adapté aux scénarios suivants :
- Q&R de documentation technique : Code, documentation API, diagrammes d'architecture
- Analyse de rapports de données : Rapports financiers, graphiques statistiques, tableaux de données
- Recherche de littérature académique : Formules, graphiques, résultats d'expériences dans les articles
- Compréhension de contenu web : Applications qui doivent « voir » plutôt que « lire »
Liens de référence : - Dépôt GitHub : StarTrail-org/PixelRAG - Article : PIXELRAG: Web Screenshots Beat Text for Retrieval-Augmented Generation - Démo en ligne : pixelrag.ai - Documentation API : pixelrag.ai/docs