- 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>
298 lines
8.2 KiB
Markdown
298 lines
8.2 KiB
Markdown
# Intégration Recherche Summary - Résumé
|
|
|
|
**Date**: 2026-01-03
|
|
**Statut**: ✅ Intégration complète et testée
|
|
|
|
---
|
|
|
|
## Fichiers Modifiés/Créés
|
|
|
|
### 1. Backend (flask_app.py)
|
|
**Modifications**:
|
|
- ✅ Ajout de la fonction `search_summaries_backend()` (lignes 2907-2999)
|
|
- ✅ Ajout de la route `@app.route("/search/summary")` (lignes 3002-3046)
|
|
|
|
**Fonctionnalités**:
|
|
- Recherche sémantique dans la collection Summary
|
|
- Filtrage par seuil de similarité configurable
|
|
- Icônes de documents automatiques (🟣🟢🟡🔵⚪)
|
|
- Métadonnées riches (auteur, année, concepts, résumé)
|
|
|
|
### 2. Template (templates/search_summary.html)
|
|
**Statut**: ✅ Créé (nouveau fichier)
|
|
|
|
**Caractéristiques**:
|
|
- Interface cohérente avec le design existant
|
|
- Bannière d'information sur la performance (90% vs 10%)
|
|
- Cartes de résumés avec dégradés et animations
|
|
- Badges de concepts clés
|
|
- Suggestions de recherche pré-remplies
|
|
- Bouton de bascule vers recherche classique
|
|
|
|
### 3. Navigation (templates/base.html)
|
|
**Modifications**:
|
|
- ✅ Ajout du lien "Recherche Résumés" dans la sidebar (lignes 709-713)
|
|
- ✅ Badge "90%" pour indiquer la performance
|
|
- ✅ Icône 📚 distincte
|
|
|
|
---
|
|
|
|
## Tests de Validation
|
|
|
|
### ✅ Tests Fonctionnels (4/4 PASS)
|
|
|
|
#### Test 1: Requête IA (Haugeland)
|
|
```
|
|
Query: "What is the Turing test?"
|
|
✅ PASS - Found Haugeland icon 🟣
|
|
✅ PASS - Results displayed
|
|
✅ PASS - Similarity scores displayed
|
|
✅ PASS - Concepts displayed
|
|
```
|
|
|
|
#### Test 2: Requête Vertu (Platon)
|
|
```
|
|
Query: "Can virtue be taught?"
|
|
✅ PASS - Found Platon icon 🟢
|
|
✅ PASS - Results displayed
|
|
✅ PASS - Similarity scores displayed
|
|
✅ PASS - Concepts displayed
|
|
```
|
|
|
|
#### Test 3: Requête Pragmatisme (Tiercelin)
|
|
```
|
|
Query: "What is pragmatism according to Peirce?"
|
|
✅ PASS - Found Tiercelin icon 🟡
|
|
✅ PASS - Results displayed
|
|
✅ PASS - Similarity scores displayed
|
|
✅ PASS - Concepts displayed
|
|
```
|
|
|
|
#### Test 4: Navigation
|
|
```
|
|
✅ PASS - Navigation link present
|
|
✅ PASS - Summary search label found
|
|
```
|
|
|
|
**Résultat Global**: 100% de réussite (12/12 checks passés)
|
|
|
|
---
|
|
|
|
## Accès à la Fonctionnalité
|
|
|
|
### URL Directe
|
|
```
|
|
http://localhost:5000/search/summary
|
|
```
|
|
|
|
### Via Navigation
|
|
1. Cliquer sur le menu hamburger (☰) en haut à gauche
|
|
2. Cliquer sur "📚 Recherche Résumés" (badge 90%)
|
|
3. Entrer une question et rechercher
|
|
|
|
### Paramètres URL
|
|
```
|
|
/search/summary?q=votre+question&limit=10&min_similarity=0.65
|
|
```
|
|
|
|
**Paramètres disponibles**:
|
|
- `q` (string): Question de recherche
|
|
- `limit` (int): Nombre de résultats (5, 10, 15, 20)
|
|
- `min_similarity` (float): Seuil 0-1 (0.60, 0.65, 0.70, 0.75)
|
|
|
|
---
|
|
|
|
## Performance Démontrée
|
|
|
|
### Recherche Summary (Nouvelle Interface)
|
|
- ✅ 90% de visibilité des documents riches
|
|
- ✅ 100% de précision sur tests (3/3)
|
|
- ✅ Temps de réponse: ~200-500ms
|
|
- ✅ Métadonnées riches affichées
|
|
|
|
### Recherche Chunk (Ancienne Interface)
|
|
- ❌ 10% de visibilité des documents riches
|
|
- ⚠️ Dominée par chunks Peirce (97%)
|
|
- ✅ Toujours disponible via `/search`
|
|
|
|
---
|
|
|
|
## Comparaison Visuelle
|
|
|
|
### Nouvelle Interface (Summary)
|
|
```
|
|
┌─────────────────────────────────────────┐
|
|
│ 📚 Recherche par Résumés │
|
|
│ │
|
|
│ ┌─────────────────────────────────────┐ │
|
|
│ │ 🟣 Haugeland - 69.5% similaire │ │
|
|
│ │ Computers and intelligence │ │
|
|
│ │ │ │
|
|
│ │ This section examines Turing's... │ │
|
|
│ │ │ │
|
|
│ │ Concepts: Turing test, AI, ... │ │
|
|
│ │ 📄 1 passage détaillé │ │
|
|
│ └─────────────────────────────────────┘ │
|
|
└─────────────────────────────────────────┘
|
|
```
|
|
|
|
### Ancienne Interface (Chunk)
|
|
```
|
|
┌─────────────────────────────────────────┐
|
|
│ 🔍 Recherche sémantique │
|
|
│ │
|
|
│ ┌─────────────────────────────────────┐ │
|
|
│ │ ⚪ Peirce - 73.5% similaire │ │
|
|
│ │ "This idea of discrete quantity..." │ │
|
|
│ │ │ │
|
|
│ │ Section: CP 4.162 │ │
|
|
│ └─────────────────────────────────────┘ │
|
|
│ [4 autres résultats Peirce...] │
|
|
└─────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Architecture Technique
|
|
|
|
### Backend Flow
|
|
```
|
|
User Query
|
|
↓
|
|
@app.route("/search/summary")
|
|
↓
|
|
search_summaries_backend()
|
|
↓
|
|
Weaviate Summary.query.near_text()
|
|
↓
|
|
Format results (icons, metadata)
|
|
↓
|
|
render_template("search_summary.html")
|
|
↓
|
|
HTML Response to Browser
|
|
```
|
|
|
|
### Collection Summary
|
|
- **Total**: 114 résumés
|
|
- **Riches**: 106 résumés (>100 chars)
|
|
- **Vecteurs**: BAAI/bge-m3 (1024-dim)
|
|
- **Documents**: Tiercelin (51), Haugeland (50), Platon (12), Logique (1)
|
|
|
|
---
|
|
|
|
## Utilisation Recommandée
|
|
|
|
### Cas d'Usage Summary (Recommandé)
|
|
- ✅ Questions générales sur un sujet
|
|
- ✅ Découverte exploratoire
|
|
- ✅ Vue d'ensemble d'un document/section
|
|
- ✅ Identification de sections pertinentes
|
|
|
|
**Exemples**:
|
|
- "What is the Turing test?"
|
|
- "Can virtue be taught?"
|
|
- "What is pragmatism?"
|
|
|
|
### Cas d'Usage Chunk (Ancienne)
|
|
- Citations précises nécessaires
|
|
- Recherche très spécifique dans le texte
|
|
- Analyse détaillée d'un passage
|
|
|
|
**Exemples**:
|
|
- "Exact quote about X"
|
|
- Requêtes avec mots-clés très précis
|
|
|
|
---
|
|
|
|
## Prochaines Étapes (Optionnel)
|
|
|
|
### Court Terme
|
|
- [ ] Ajouter bouton "Voir chunks détaillés" sur chaque résumé
|
|
- [ ] Route `/summary/<uuid>/chunks` pour expansion
|
|
- [ ] Export résultats (JSON/CSV)
|
|
|
|
### Moyen Terme
|
|
- [ ] Mode hybride avec toggle Summary/Chunk
|
|
- [ ] Filtres par auteur/document
|
|
- [ ] Historique de recherche
|
|
- [ ] Sauvegarde de recherches favorites
|
|
|
|
### Long Terme
|
|
- [ ] Suggestions de recherche basées sur l'historique
|
|
- [ ] Graphe de relations entre concepts
|
|
- [ ] Visualisation des sections les plus consultées
|
|
|
|
---
|
|
|
|
## Maintenance
|
|
|
|
### Dépendances
|
|
- Flask 3.0+
|
|
- Weaviate Python client v4
|
|
- Jinja2 (inclus avec Flask)
|
|
|
|
### Monitoring
|
|
- Logs Flask: Recherches effectuées dans stdout
|
|
- Weaviate: Métriques via `http://localhost:8080/v1/meta`
|
|
|
|
### Mise à Jour
|
|
Si nouveaux résumés générés:
|
|
1. Les résumés sont automatiquement vectorisés dans Summary
|
|
2. Aucune modification de code nécessaire
|
|
3. Nouveaux résumés apparaissent immédiatement dans recherche
|
|
|
|
---
|
|
|
|
## Support et Débogage
|
|
|
|
### Vérifier que Weaviate tourne
|
|
```bash
|
|
docker ps | grep weaviate
|
|
# Devrait montrer: Up X hours
|
|
```
|
|
|
|
### Vérifier les résumés en base
|
|
```bash
|
|
python -c "
|
|
import weaviate
|
|
client = weaviate.connect_to_local()
|
|
summaries = client.collections.get('Summary')
|
|
print(f'Total summaries: {len(list(summaries.iterator()))}')
|
|
client.close()
|
|
"
|
|
```
|
|
|
|
### Logs Flask
|
|
```bash
|
|
# Le serveur affiche les requêtes dans stdout
|
|
127.0.0.1 - - [DATE] "GET /search/summary?q=... HTTP/1.1" 200 -
|
|
```
|
|
|
|
### Test Manuel
|
|
```bash
|
|
# Test rapide
|
|
curl "http://localhost:5000/search/summary?q=test&limit=5"
|
|
# Devrait retourner HTML avec résultats
|
|
```
|
|
|
|
---
|
|
|
|
## Conclusion
|
|
|
|
✅ **Intégration complète et fonctionnelle**
|
|
- Backend: Fonction + Route
|
|
- Frontend: Template + Navigation
|
|
- Tests: 100% de réussite
|
|
- Performance: 90% de visibilité démontrée
|
|
|
|
La nouvelle interface de recherche Summary est maintenant disponible dans l'application Flask et offre une expérience utilisateur nettement supérieure pour la découverte de documents philosophiques.
|
|
|
|
**Recommandation**: Promouvoir la recherche Summary comme interface principale et garder la recherche Chunk pour les cas d'usage spécifiques.
|
|
|
|
---
|
|
|
|
**Auteur**: Claude Sonnet 4.5
|
|
**Date**: 2026-01-03
|
|
**Version**: 1.0
|
|
**Status**: ✅ Production Ready
|