PageIndex comme alternative à la recherche vectorielle dans RAG : analyse et configuration locale
PageIndex propose de remplacer la recherche vectorielle dans RAG par une structure hiérarchique de documents. Le document est segmenté en pages, et un LLM construit un arbre de table des matières avec des résumés de nœuds. Les requêtes de recherche sont dirigées vers le LLM pour sélectionner les nœuds pertinents, suivis par l'extraction des pages comme contexte. Aucun découpage, embedding ou base de données vectorielle n'est requis.
Limites de mise à l'échelle
PageIndex est optimisé pour des documents uniques. Pour des collections, les solutions suivantes sont suggérées :
- Filtrage par métadonnées (en développement, similaire aux vector stores).
- Recherche via descriptions générées (pour de petits volumes).
- Recherche sémantique (revient aux embeddings vectoriels).
La table des matières avec résumés compresse le contexte par 4 à 5 fois. Des alternatives comme TF-IDF ou BM25 nécessitent une indexation. Le stockage de la table des matières pour des milliers de documents reste non résolu. Ici, le LLM remplace la recherche de similarité par une recherche de pertinence, similaire à la navigation dans un texte complexe via une table des matières.
Une précision revendiquée de 98,7 % sur FinanceBench (contre ~90 % pour la recherche vectorielle) est obtenue grâce au raisonnement. Le coût est des dizaines de fois plus élevé. Testé sur gpt-4o et gpt-5.4.
Expérimentations avec des modèles locaux
Testé sur un article académique concernant Cyberpunk 2077 (PDF, ~17k tokens). Le pipeline Markdown est similaire à MarkdownTextSplitter de LangChain — découpage par titres.
Le pipeline PDF extrait automatiquement les titres mais avec des problèmes :
- Erreurs de sortie JSON — traitement du texte (suppression des bibliographies, citations).
- Seuil de précision de 60 % — abaissé via la variable d'environnement ACCURACY_THRESHOLD.
- Faible précision due à la correspondance des nœuds et fragments par le LLM — augmentation de MAX_TOKENS de 20k.
Modèles :
- gemma3:27b — hallucine la table des matières (précision <60 %).
- gpt-oss:20b — précision de 57–63 %, stable.
- qwen3:14b — précision de 69,57 %, mais avec des erreurs JSON.
Temps sur GPU 16 Go : ~30 min (la correction d'erreurs domine).
Exemple de table des matières (gpt-oss:20b, précision 0,63) :
{
"doc_name": "2077.pdf",
"structure": [
{
"title": "Introduction",
"node_id": "0000",
"start_index": 1,
"end_index": 3,
"summary": "L'article examine comment le jeu vidéo Cyberpunk 20...",
"text": "Une perspective Cyberpunk 2077 sur la prédiction et..."
},
{
"title": "Revue de littérature",
"node_id": "0001",
"start_index": 3,
"end_index": 3,
"summary": "Le document partiel présente une revue de littérature ...",
"text": "contextualisant Cyberpunk 2077 dans le cadre plus large ...",
"nodes": [
// ... sous-nœuds
]
}
// ... nœuds restants
]
}
Configuration et installation locale
Installation : liteLLM==1.82.0 (les versions plus récentes sont vulnérables). Ne pas utiliser pip install pageindex — c'est pour l'API.
Notebooks : MinimalPageindexLocalPDF.ipynb, MinimalPageindexLocalMD.ipynb.
Modifications de utils.py : OLLAMA_HOST, OLLAMA_TIMEOUT.
page_index.py : ACCURACY_THRESHOLD, MAX_TOKENS.
Processus :
- Charger le document (PDF/MD).
- Le LLM construit la table des matières (find_toc_pages).
- Segmentation en pages/lignes.
- Construction de l'arbre de nœuds avec résumés.
- Correction de précision.
- Recherche : le LLM sélectionne les nœuds par requête → extraction de pages → RAG final.
PageIndex intègre le LLM dans la récupération pour une recherche traçable avec références de pages/sections. Adapté aux documents complexes mais gourmand en ressources pour la production.
Points clés à retenir
- Mise à l'échelle : Aucune solution prête pour les grandes collections sans recherche vectorielle.
- Précision : Dépend du modèle ; local (qwen3:14b) atteint 69 % mais avec des erreurs.
- Coût : +8–9 % de précision pour x10–xN ressources par rapport au RAG vectoriel.
- Formats : PDF avec détection automatique des titres ; MD via structure markdown.
- Modifications : Variables d'environnement nécessaires pour les seuils et tokens sur matériel moins puissant.
— Editorial Team
Aucun commentaire pour le moment.