feat: Add vectorized summary field and migration tools

- Add 'summary' field to Chunk collection (vectorized with text2vec)
- Migrate from Dynamic index to HNSW + RQ for both Chunk and Summary
- Add LLM summarizer module (utils/llm_summarizer.py)
- Add migration scripts (migrate_add_summary.py, restore_*.py)
- Add summary generation utilities and progress tracking
- Add testing and cleaning tools (outils_test_and_cleaning/)
- Add comprehensive documentation (ANALYSE_*.md, guides)
- Remove obsolete files (linear_config.py, old test files)
- Update .gitignore to exclude backups and temp files

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-07 22:56:03 +01:00
parent feb215dae0
commit 636ad6206c
40 changed files with 11937 additions and 712 deletions

View File

@@ -0,0 +1,206 @@
# Analyse Finale du Système RAG Library - État au 2026-01-03
## Résumé Exécutif
Le système RAG a été considérablement amélioré grâce à la génération de résumés LLM de haute qualité. La recherche dans la collection **Summary** fonctionne excellemment (90% de visibilité des documents riches). Cependant, la recherche dans la collection **Chunk** souffre d'une domination écrasante des chunks Peirce (97% de la base), rendant les autres documents pratiquement introuvables.
## État de la Base de Données
### Collection Summary
- **Total**: 114 résumés
- **Riches** (>100 chars): 106 résumés
- **Vides** (titres): 8 résumés
**Répartition par document:**
- Tiercelin: 51 résumés (43 riches)
- Haugeland: 50 résumés
- Platon: 12 résumés
- La logique de la science: 1 résumé
**Performance de recherche**: 90% de visibilité (54/60 résultats sur 15 requêtes réelles)
### Collection Chunk
- **Total**: 5,230 chunks
- **Peirce**: 5,068 chunks (97%)
- **Haugeland**: 50 chunks (1%)
- **Platon**: 50 chunks (1%)
- **Tiercelin**: 36 chunks (0.7%)
- **Autres**: 26 chunks (0.5%)
**Ratio problématique**: 97:3 (Peirce:Autres)
## Travaux Réalisés
### Phase 1: Génération des Résumés
| Document | Résumés | Coût | Statut |
|----------|---------|------|--------|
| Tiercelin | 43 | $0.63 | ✅ Complet |
| Platon | 12 | $0.14 | ✅ Complet |
| La logique de la science | 1 | $0.02 | ✅ Complet |
| Haugeland | 50 | $0.44 | ✅ Complet |
| **TOTAL** | **106** | **$1.23** | **✅ Complet** |
### Phase 2: Nettoyage de la Base
1. **Suppression de 7 doublons vides** (Tiercelin)
2. **Suppression de 8,313 résumés vides Peirce**
- Avant: 10% de visibilité
- Après: 63% → 90% (avec Haugeland)
## Performance par Type de Recherche
### ✅ Recherche dans Summary (EXCELLENT)
**15 requêtes réelles testées** couvrant 5 domaines:
- Pragmatisme/Peirce (3 requêtes)
- Platon/Vertu (3 requêtes)
- IA/Philosophie de l'esprit (3 requêtes)
- Sémiotique (3 requêtes)
- Épistémologie (3 requêtes)
**Résultat**: 90% de visibilité des résumés riches (54/60 résultats)
**Exemple de qualité**:
- Query: "Can virtue be taught according to Plato?"
- Top 3: Tous Platon, similarité 71-72%
- Résumés pertinents et informatifs
### ❌ Recherche dans Chunks (PROBLÉMATIQUE)
#### Test 1: Questions génériques sur l'IA (domaine de Haugeland)
**10 requêtes AI-spécifiques**:
- "What is the Turing test?"
- "Can machines think?"
- "What is a physical symbol system?"
- "How do connectionist networks work?"
- etc.
**Résultats (50 total)**:
- 🔴 Peirce: 44/50 (88%)
- 🟣 Haugeland: 5/50 (10%)
- 🟢 Platon: 1/50 (2%)
**Conclusion**: Même sur son domaine propre, Haugeland est écrasé.
#### Test 2: Recherche hiérarchique (Summary → Chunks)
**Stratégie**:
1. Identifier documents pertinents via Summary (fonctionne bien)
2. Filtrer chunks de ces documents (échoue - Peirce domine toujours)
**Exemple**:
- Query: "How do connectionist networks work?"
- Summary identifie correctement: Haugeland "Connectionist networks"
- Mais Chunk search retourne: 5/5 chunks Peirce (0/5 Haugeland)
**Limitation technique**: Weaviate v4 ne permet pas de filtrer par nested objects dans les requêtes → filtrage en Python après récupération.
## Problème Central
### Domination des Chunks Peirce
**Cause**: 5,068 chunks Peirce sur 5,230 total (97%)
**Impact**:
- Les chunks Peirce ont des similarités sémantiques élevées (73-77%) sur presque toutes les requêtes
- Ratio trop déséquilibré pour laisser apparaître d'autres documents
- Même la recherche hiérarchique ne résout pas le problème
**Contrainte utilisateur**:
> "NE SUPPRIME PAS LES CHUNKLS D EPEIRCE BORDEL"
Pas de suppression des chunks Peirce permise.
## Solutions Proposées
### Option A: Summary comme Interface Principale (RECOMMANDÉ)
**Statut**: Prouvé et fonctionnel (90% de visibilité)
**Avantages**:
- ✅ Fonctionne immédiatement (déjà testé)
- ✅ Coût: $0 (déjà implémenté)
- ✅ Performance excellente démontrée
- ✅ Interface utilisateur claire
**Mise en œuvre**:
```python
# Recherche primaire dans Summary
summary_results = summaries.query.near_text(
query=user_query,
limit=10,
return_metadata=wvq.MetadataQuery(distance=True)
)
# Afficher résumés avec contexte
for result in summary_results:
print(f"Document: {result.properties['document']['sourceId']}")
print(f"Section: {result.properties['title']}")
print(f"Résumé: {result.properties['text']}")
print(f"Concepts: {', '.join(result.properties['concepts'])}")
```
**Flux utilisateur**:
1. User pose une question
2. Système retourne résumés pertinents (comme Google Scholar)
3. User peut cliquer pour voir les chunks détaillés d'une section
### Option B: Système Hybride
**Statut**: Nécessite développement
**Fonctionnalités**:
- Toggle "Recherche par résumés" / "Recherche détaillée"
- Mode résumés par défaut (pour découverte)
- Mode chunks pour requêtes très précises
**Coût**: ~2-3 jours de développement UI
### Option C: Régénération Résumés Peirce
**Statut**: Non implémenté
**Estimation**:
- 5,068 chunks → ~500-600 sections
- Regroupement intelligent nécessaire
- Coût: $45-50
- Temps: 15-20 heures (génération + ingestion)
**Risque**: Peut ne pas résoudre le problème si les résumés Peirce restent sémantiquement proches de toutes les requêtes.
## Tests Disponibles
Tous les scripts de test sont dans `generations/library_rag/`:
1. **test_summaries_validation.py** - Validation complète des résumés
2. **test_real_queries.py** - 15 requêtes réelles sur Summary
3. **test_hierarchical_search.py** - Test Summary → Chunks
4. **test_haugeland_ai.py** - Test spécifique IA (domaine Haugeland)
## Recommandation Finale
**Implémenter Option A immédiatement**:
1. Interface de recherche principale sur Summary
2. 90% de visibilité déjà prouvée
3. Coût $0, temps < 1 jour
4. Respecte la contrainte (pas de suppression chunks Peirce)
**Future améliorations** (optionnel):
- Option B: Ajouter mode hybride si demandé
- Option C: Considérer seulement si vraiment nécessaire
## Statistiques Finales
### Coûts Totaux
- Génération résumés: $1.23
- Suppression données vides: $0
- **Total projet**: $1.23
### Résultats
- 106 résumés riches de haute qualité
- 90% de visibilité en recherche Summary
- Base de données propre et optimisée
- Interface de recherche fonctionnelle
### Performance
- Summary search: 90% pertinence ✅
- Chunk search: 10% pertinence ❌ (mais solution identifiée)
---
**Date**: 2026-01-03
**Système**: Weaviate 1.34.4 + BGE-M3 (1024-dim)
**LLM**: Claude Sonnet 4.5 (résumés) + text2vec-transformers (vectorisation)