docs: Add MCP tools analysis and Document removal verification
Added comprehensive documentation for:
1. ANALYSE_MCP_TOOLS.md:
- Complete analysis of 18 MCP server tools
- Categorized into System (1), Library RAG (8), Memory (9)
- Detailed parameters, return values, usage patterns
- Flow examples for common operations
2. TEST_VERIFICATION_DOCUMENT_REMOVAL.md:
- Verification of Document collection removal (commit 53f6a92)
- Puppeteer test results (all passed)
- Search functionality validation (11 results found)
- Summary of code modifications (8 files)
- Confirmation of 6 active collections (3 RAG + 3 Memory)
Both documents provide essential reference for system architecture
and validation of recent schema simplification.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
767
ANALYSE_MCP_TOOLS.md
Normal file
767
ANALYSE_MCP_TOOLS.md
Normal file
@@ -0,0 +1,767 @@
|
||||
# Analyse des Outils MCP Server
|
||||
|
||||
**Date**: 2026-01-09
|
||||
**Fichier**: `generations/library_rag/mcp_server.py`
|
||||
**Total**: 18 outils MCP
|
||||
|
||||
## Vue d'ensemble
|
||||
|
||||
Le serveur MCP (Model Context Protocol) expose **18 outils** organisés en **3 catégories** :
|
||||
|
||||
1. **Système** (1 outil) - Santé et diagnostics
|
||||
2. **Library RAG** (8 outils) - Ingestion et recherche de textes philosophiques
|
||||
3. **Memory** (9 outils) - Système de mémoire conversationnelle
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Catégorie 1: Système (1 outil)
|
||||
|
||||
### 1. `ping()`
|
||||
**Type**: Health check
|
||||
**Paramètres**: Aucun
|
||||
**Retour**: Message de statut
|
||||
|
||||
**Description**: Vérification que le serveur MCP est actif et répond.
|
||||
|
||||
**Exemple**:
|
||||
```python
|
||||
ping()
|
||||
# → "Library RAG MCP Server is running!"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 Catégorie 2: Library RAG (8 outils)
|
||||
|
||||
### Outils d'Ingestion (1)
|
||||
|
||||
#### 2. `parse_pdf(pdf_path)`
|
||||
**Type**: Ingestion PDF
|
||||
**Collection cible**: Work, Chunk_v2, Summary_v2
|
||||
|
||||
**Paramètres**:
|
||||
- `pdf_path` (str): Chemin local ou URL vers le PDF
|
||||
|
||||
**Configuration pré-optimisée** (fixe):
|
||||
- LLM: Mistral API (mistral-medium-latest)
|
||||
- OCR: Avec annotations (meilleure TOC)
|
||||
- Chunking: Sémantique LLM (unités argumentatives)
|
||||
- Ingestion: Automatique dans Weaviate
|
||||
|
||||
**Retour**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"document_name": "platon-menon",
|
||||
"source_id": "platon-menon",
|
||||
"pages": 120,
|
||||
"chunks_count": 456,
|
||||
"cost_ocr": 0.36,
|
||||
"cost_llm": 0.08,
|
||||
"cost_total": 0.44,
|
||||
"output_dir": "output/platon-menon",
|
||||
"metadata": {
|
||||
"title": "Ménon",
|
||||
"author": "Platon",
|
||||
"year": -380,
|
||||
"language": "fr"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Processus** (10 étapes):
|
||||
1. OCR Mistral avec annotations
|
||||
2. Construction Markdown
|
||||
3. Extraction images
|
||||
4. LLM extraction métadonnées
|
||||
5. LLM extraction TOC
|
||||
6. LLM classification sections
|
||||
7. LLM chunking sémantique
|
||||
8. Nettoyage chunks
|
||||
9. LLM validation + concepts
|
||||
10. Ingestion Weaviate + GPU vectorisation
|
||||
|
||||
---
|
||||
|
||||
### Outils de Recherche (7)
|
||||
|
||||
#### 3. `search_chunks(query, limit, min_similarity, author_filter, work_filter, language_filter)`
|
||||
**Type**: Recherche sémantique
|
||||
**Collection**: Chunk_v2 (5,372 chunks)
|
||||
|
||||
**Paramètres**:
|
||||
- `query` (str): Requête en langage naturel
|
||||
- `limit` (int): Nombre de résultats (1-100, défaut 10)
|
||||
- `min_similarity` (float): Seuil similarité 0-1 (défaut 0.0)
|
||||
- `author_filter` (str|None): Filtrer par auteur
|
||||
- `work_filter` (str|None): Filtrer par œuvre
|
||||
- `language_filter` (str|None): Filtrer par langue (fr, en, etc.)
|
||||
|
||||
**Retour**:
|
||||
```json
|
||||
{
|
||||
"results": [
|
||||
{
|
||||
"text": "La vertu est-elle enseignable...",
|
||||
"work": {
|
||||
"title": "Ménon",
|
||||
"author": "Platon"
|
||||
},
|
||||
"section_path": "Première partie > Dialogue initial",
|
||||
"similarity": 0.87,
|
||||
"language": "fr"
|
||||
}
|
||||
],
|
||||
"total_count": 10,
|
||||
"query": "la vertu peut-elle s'enseigner"
|
||||
}
|
||||
```
|
||||
|
||||
**Usage**:
|
||||
- Recherche sémantique dans tous les textes
|
||||
- Filtrage par auteur/œuvre/langue
|
||||
- Contrôle du seuil de similarité
|
||||
|
||||
---
|
||||
|
||||
#### 4. `search_summaries(query, limit, min_level, max_level)`
|
||||
**Type**: Recherche sémantique (haut niveau)
|
||||
**Collection**: Summary_v2 (114 résumés)
|
||||
|
||||
**Paramètres**:
|
||||
- `query` (str): Requête en langage naturel
|
||||
- `limit` (int): Nombre de résultats (défaut 10)
|
||||
- `min_level` (int|None): Niveau minimum (1=chapitre)
|
||||
- `max_level` (int|None): Niveau maximum (3=sous-section)
|
||||
|
||||
**Retour**:
|
||||
```json
|
||||
{
|
||||
"results": [
|
||||
{
|
||||
"title": "Dialogue sur la vertu",
|
||||
"text": "Ce chapitre explore la question...",
|
||||
"section_path": "Première partie",
|
||||
"level": 1,
|
||||
"concepts": ["vertu", "enseignement", "connaissance"],
|
||||
"chunks_count": 45
|
||||
}
|
||||
],
|
||||
"total_count": 5,
|
||||
"query": "dialogue sur la vertu"
|
||||
}
|
||||
```
|
||||
|
||||
**Usage**:
|
||||
- Vue d'ensemble des chapitres/sections
|
||||
- Recherche par niveau hiérarchique
|
||||
- Navigation structurelle
|
||||
|
||||
---
|
||||
|
||||
#### 5. `get_document(source_id, include_chunks, include_toc)`
|
||||
**Type**: Récupération document
|
||||
**Collections**: Work, Chunk_v2
|
||||
|
||||
**Paramètres**:
|
||||
- `source_id` (str): Identifiant du document
|
||||
- `include_chunks` (bool): Inclure les chunks (défaut False)
|
||||
- `include_toc` (bool): Inclure la TOC (défaut False)
|
||||
|
||||
**Retour**:
|
||||
```json
|
||||
{
|
||||
"source_id": "platon-menon",
|
||||
"work": {
|
||||
"title": "Ménon",
|
||||
"author": "Platon",
|
||||
"year": -380,
|
||||
"language": "fr"
|
||||
},
|
||||
"chunks_count": 456,
|
||||
"chunks": [...], // Si include_chunks=true
|
||||
"toc": [...] // Si include_toc=true
|
||||
}
|
||||
```
|
||||
|
||||
**Usage**:
|
||||
- Récupérer métadonnées d'un document
|
||||
- Charger tous les chunks d'un document
|
||||
- Obtenir la structure (TOC)
|
||||
|
||||
---
|
||||
|
||||
#### 6. `list_documents(limit, author_filter, language_filter)`
|
||||
**Type**: Liste documents
|
||||
**Collection**: Work (19 œuvres)
|
||||
|
||||
**Paramètres**:
|
||||
- `limit` (int): Nombre max de résultats (défaut 50)
|
||||
- `author_filter` (str|None): Filtrer par auteur
|
||||
- `language_filter` (str|None): Filtrer par langue
|
||||
|
||||
**Retour**:
|
||||
```json
|
||||
{
|
||||
"documents": [
|
||||
{
|
||||
"source_id": "platon-menon",
|
||||
"title": "Ménon",
|
||||
"author": "Platon",
|
||||
"language": "fr",
|
||||
"year": -380,
|
||||
"chunks_count": 456
|
||||
}
|
||||
],
|
||||
"total_count": 19
|
||||
}
|
||||
```
|
||||
|
||||
**Usage**:
|
||||
- Explorer le catalogue
|
||||
- Lister les œuvres d'un auteur
|
||||
- Filtrer par langue
|
||||
|
||||
---
|
||||
|
||||
#### 7. `get_chunks_by_document(source_id, limit, offset)`
|
||||
**Type**: Récupération chunks
|
||||
**Collection**: Chunk_v2
|
||||
|
||||
**Paramètres**:
|
||||
- `source_id` (str): Identifiant du document
|
||||
- `limit` (int): Nombre de chunks (défaut 50)
|
||||
- `offset` (int): Position de départ (défaut 0)
|
||||
|
||||
**Retour**:
|
||||
```json
|
||||
{
|
||||
"source_id": "platon-menon",
|
||||
"chunks": [
|
||||
{
|
||||
"text": "Socrate : Peux-tu me dire...",
|
||||
"section_path": "Première partie",
|
||||
"order_index": 0,
|
||||
"unit_type": "argument"
|
||||
}
|
||||
],
|
||||
"total_count": 456,
|
||||
"offset": 0,
|
||||
"limit": 50
|
||||
}
|
||||
```
|
||||
|
||||
**Usage**:
|
||||
- Parcourir séquentiellement un document
|
||||
- Pagination des chunks
|
||||
- Lecture structurée
|
||||
|
||||
---
|
||||
|
||||
#### 8. `filter_by_author(author, limit)`
|
||||
**Type**: Filtrage par auteur
|
||||
**Collections**: Work, Chunk_v2
|
||||
|
||||
**Paramètres**:
|
||||
- `author` (str): Nom de l'auteur
|
||||
- `limit` (int): Nombre max de résultats (défaut 100)
|
||||
|
||||
**Retour**:
|
||||
```json
|
||||
{
|
||||
"author": "Platon",
|
||||
"works": [
|
||||
{
|
||||
"title": "Ménon",
|
||||
"chunks_count": 456
|
||||
},
|
||||
{
|
||||
"title": "La République",
|
||||
"chunks_count": 892
|
||||
}
|
||||
],
|
||||
"total_works": 2,
|
||||
"total_chunks": 1348
|
||||
}
|
||||
```
|
||||
|
||||
**Usage**:
|
||||
- Bibliographie d'un auteur
|
||||
- Statistiques par auteur
|
||||
- Exploration par corpus
|
||||
|
||||
---
|
||||
|
||||
#### 9. `delete_document(source_id, confirm)`
|
||||
**Type**: Suppression
|
||||
**Collections**: Work, Chunk_v2, Summary_v2
|
||||
|
||||
**Paramètres**:
|
||||
- `source_id` (str): Identifiant du document
|
||||
- `confirm` (bool): Confirmation obligatoire (défaut False)
|
||||
|
||||
**Retour**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"source_id": "platon-menon",
|
||||
"deleted_chunks": 456,
|
||||
"deleted_summaries": 12,
|
||||
"deleted_work": true
|
||||
}
|
||||
```
|
||||
|
||||
**Usage**:
|
||||
- Supprimer un document du système
|
||||
- Nettoyage base de données
|
||||
- Ré-ingestion après modification
|
||||
|
||||
**⚠️ Sécurité**: Nécessite `confirm=true` explicite.
|
||||
|
||||
---
|
||||
|
||||
## 🧠 Catégorie 3: Memory (9 outils)
|
||||
|
||||
### Outils Thought (3)
|
||||
|
||||
#### 10. `add_thought(content, thought_type, trigger, concepts, privacy_level)`
|
||||
**Type**: Ajout pensée
|
||||
**Collection**: Thought (104 pensées)
|
||||
|
||||
**Paramètres**:
|
||||
- `content` (str): Contenu de la pensée
|
||||
- `thought_type` (str): Type (reflection, question, intuition, observation)
|
||||
- `trigger` (str|None): Déclencheur
|
||||
- `concepts` (list[str]): Concepts liés
|
||||
- `privacy_level` (str): Niveau (private, shared, public)
|
||||
|
||||
**Retour**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"thought_id": "uuid-xxxx",
|
||||
"timestamp": "2026-01-09T10:30:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
**Usage**:
|
||||
- Capturer insights et réflexions
|
||||
- Construire base de connaissance personnelle
|
||||
- Tracer évolution de la pensée
|
||||
|
||||
---
|
||||
|
||||
#### 11. `search_thoughts(query, limit, thought_type_filter)`
|
||||
**Type**: Recherche sémantique
|
||||
**Collection**: Thought
|
||||
|
||||
**Paramètres**:
|
||||
- `query` (str): Requête en langage naturel
|
||||
- `limit` (int): Nombre de résultats (défaut 10)
|
||||
- `thought_type_filter` (str|None): Filtrer par type
|
||||
|
||||
**Retour**:
|
||||
```json
|
||||
{
|
||||
"results": [
|
||||
{
|
||||
"content": "Vector databases enable semantic search...",
|
||||
"thought_type": "observation",
|
||||
"concepts": ["weaviate", "embeddings"],
|
||||
"timestamp": "2026-01-08T15:20:00Z",
|
||||
"similarity": 0.92
|
||||
}
|
||||
],
|
||||
"total_count": 10
|
||||
}
|
||||
```
|
||||
|
||||
**Usage**:
|
||||
- Recherche dans ses pensées
|
||||
- Retrouver insights passés
|
||||
- Connexions sémantiques
|
||||
|
||||
---
|
||||
|
||||
#### 12. `get_thought(uuid)`
|
||||
**Type**: Récupération pensée
|
||||
**Collection**: Thought
|
||||
|
||||
**Paramètres**:
|
||||
- `uuid` (str): UUID de la pensée
|
||||
|
||||
**Retour**:
|
||||
```json
|
||||
{
|
||||
"uuid": "uuid-xxxx",
|
||||
"content": "...",
|
||||
"thought_type": "observation",
|
||||
"trigger": "Research session",
|
||||
"concepts": ["weaviate"],
|
||||
"privacy_level": "private",
|
||||
"timestamp": "2026-01-08T15:20:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
**Usage**:
|
||||
- Récupérer une pensée spécifique
|
||||
- Accès direct par ID
|
||||
|
||||
---
|
||||
|
||||
### Outils Message (3)
|
||||
|
||||
#### 13. `add_message(content, role, conversation_id, order_index)`
|
||||
**Type**: Ajout message
|
||||
**Collection**: Message (380 messages)
|
||||
|
||||
**Paramètres**:
|
||||
- `content` (str): Contenu du message
|
||||
- `role` (str): Rôle (user, assistant, system)
|
||||
- `conversation_id` (str): ID de la conversation
|
||||
- `order_index` (int): Position dans la conversation
|
||||
|
||||
**Retour**:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"message_id": "uuid-xxxx",
|
||||
"conversation_id": "chat_2026_01_09",
|
||||
"timestamp": "2026-01-09T10:30:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
**Usage**:
|
||||
- Ajouter message à une conversation
|
||||
- Construire historique
|
||||
- Tracer dialogue
|
||||
|
||||
---
|
||||
|
||||
#### 14. `get_messages(conversation_id, limit)`
|
||||
**Type**: Récupération messages
|
||||
**Collection**: Message
|
||||
|
||||
**Paramètres**:
|
||||
- `conversation_id` (str): ID de la conversation
|
||||
- `limit` (int): Nombre max de messages (défaut 50)
|
||||
|
||||
**Retour**:
|
||||
```json
|
||||
{
|
||||
"conversation_id": "chat_2026_01_09",
|
||||
"messages": [
|
||||
{
|
||||
"content": "Explain transformers...",
|
||||
"role": "user",
|
||||
"order_index": 0,
|
||||
"timestamp": "2026-01-09T10:00:00Z"
|
||||
},
|
||||
{
|
||||
"content": "Transformers are neural networks...",
|
||||
"role": "assistant",
|
||||
"order_index": 1,
|
||||
"timestamp": "2026-01-09T10:01:00Z"
|
||||
}
|
||||
],
|
||||
"total_count": 2
|
||||
}
|
||||
```
|
||||
|
||||
**Usage**:
|
||||
- Charger historique conversation
|
||||
- Contexte pour continuation
|
||||
- Analyse conversationnelle
|
||||
|
||||
---
|
||||
|
||||
#### 15. `search_messages(query, limit, conversation_id_filter)`
|
||||
**Type**: Recherche sémantique
|
||||
**Collection**: Message
|
||||
|
||||
**Paramètres**:
|
||||
- `query` (str): Requête en langage naturel
|
||||
- `limit` (int): Nombre de résultats (défaut 10)
|
||||
- `conversation_id_filter` (str|None): Filtrer par conversation
|
||||
|
||||
**Retour**:
|
||||
```json
|
||||
{
|
||||
"results": [
|
||||
{
|
||||
"content": "Transformers use self-attention...",
|
||||
"role": "assistant",
|
||||
"conversation_id": "chat_2026_01_09",
|
||||
"timestamp": "2026-01-09T10:01:00Z",
|
||||
"similarity": 0.94
|
||||
}
|
||||
],
|
||||
"total_count": 10
|
||||
}
|
||||
```
|
||||
|
||||
**Usage**:
|
||||
- Rechercher dans l'historique
|
||||
- Retrouver réponses passées
|
||||
- Analyse transversale conversations
|
||||
|
||||
---
|
||||
|
||||
### Outils Conversation (3)
|
||||
|
||||
#### 16. `get_conversation(conversation_id)`
|
||||
**Type**: Récupération conversation
|
||||
**Collection**: Conversation (12 conversations)
|
||||
|
||||
**Paramètres**:
|
||||
- `conversation_id` (str): ID de la conversation
|
||||
|
||||
**Retour**:
|
||||
```json
|
||||
{
|
||||
"conversation_id": "chat_2026_01_09",
|
||||
"title": "Discussion on AI transformers",
|
||||
"category": "technical",
|
||||
"summary": "Explained transformer architecture...",
|
||||
"tags": ["AI", "transformers", "architecture"],
|
||||
"message_count": 24,
|
||||
"timestamp": "2026-01-09T10:00:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
**Usage**:
|
||||
- Métadonnées conversation
|
||||
- Vue d'ensemble
|
||||
- Navigation conversations
|
||||
|
||||
---
|
||||
|
||||
#### 17. `search_conversations(query, limit, category_filter)`
|
||||
**Type**: Recherche sémantique
|
||||
**Collection**: Conversation
|
||||
|
||||
**Paramètres**:
|
||||
- `query` (str): Requête en langage naturel
|
||||
- `limit` (int): Nombre de résultats (défaut 10)
|
||||
- `category_filter` (str|None): Filtrer par catégorie
|
||||
|
||||
**Retour**:
|
||||
```json
|
||||
{
|
||||
"results": [
|
||||
{
|
||||
"conversation_id": "chat_2026_01_09",
|
||||
"title": "Discussion on AI transformers",
|
||||
"summary": "Explained transformer architecture...",
|
||||
"category": "technical",
|
||||
"message_count": 24,
|
||||
"similarity": 0.89
|
||||
}
|
||||
],
|
||||
"total_count": 10
|
||||
}
|
||||
```
|
||||
|
||||
**Usage**:
|
||||
- Rechercher conversations passées
|
||||
- Retrouver discussions par thème
|
||||
- Navigation sémantique
|
||||
|
||||
---
|
||||
|
||||
#### 18. `list_conversations(limit, category_filter)`
|
||||
**Type**: Liste conversations
|
||||
**Collection**: Conversation
|
||||
|
||||
**Paramètres**:
|
||||
- `limit` (int): Nombre max de résultats (défaut 20)
|
||||
- `category_filter` (str|None): Filtrer par catégorie
|
||||
|
||||
**Retour**:
|
||||
```json
|
||||
{
|
||||
"conversations": [
|
||||
{
|
||||
"conversation_id": "chat_2026_01_09",
|
||||
"title": "Discussion on AI transformers",
|
||||
"category": "technical",
|
||||
"message_count": 24,
|
||||
"timestamp": "2026-01-09T10:00:00Z"
|
||||
}
|
||||
],
|
||||
"total_count": 12
|
||||
}
|
||||
```
|
||||
|
||||
**Usage**:
|
||||
- Explorer l'historique
|
||||
- Lister par catégorie
|
||||
- Vue chronologique
|
||||
|
||||
---
|
||||
|
||||
## 📊 Résumé des Outils
|
||||
|
||||
| Catégorie | Nombre | Collections utilisées | GPU Embedder |
|
||||
|-----------|--------|----------------------|--------------|
|
||||
| **Système** | 1 | - | - |
|
||||
| **Library RAG** | 8 | Work, Chunk_v2, Summary_v2 | ✅ |
|
||||
| **Memory** | 9 | Thought, Message, Conversation | ✅ |
|
||||
| **TOTAL** | **18** | **6 collections** | **5 vectorisées** |
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Patterns d'Usage
|
||||
|
||||
### Pattern 1: Ingestion complète
|
||||
```python
|
||||
# 1. Ingérer un PDF
|
||||
result = parse_pdf("path/to/platon-menon.pdf")
|
||||
|
||||
# 2. Vérifier l'ingestion
|
||||
docs = list_documents(author_filter="Platon")
|
||||
|
||||
# 3. Rechercher dans le document
|
||||
chunks = search_chunks("la vertu peut-elle s'enseigner", work_filter="Ménon")
|
||||
```
|
||||
|
||||
### Pattern 2: Recherche multi-niveaux
|
||||
```python
|
||||
# 1. Recherche haut niveau (résumés)
|
||||
summaries = search_summaries("dialectique maïeutique", limit=5)
|
||||
|
||||
# 2. Recherche détaillée (chunks)
|
||||
chunks = search_chunks("dialectique maïeutique", limit=20)
|
||||
```
|
||||
|
||||
### Pattern 3: Exploration par auteur
|
||||
```python
|
||||
# 1. Lister les œuvres d'un auteur
|
||||
author_data = filter_by_author("Platon")
|
||||
|
||||
# 2. Récupérer un document spécifique
|
||||
doc = get_document("platon-menon", include_toc=True)
|
||||
|
||||
# 3. Parcourir les chunks
|
||||
chunks = get_chunks_by_document("platon-menon", limit=100)
|
||||
```
|
||||
|
||||
### Pattern 4: Memory workflow
|
||||
```python
|
||||
# 1. Capturer une pensée
|
||||
add_thought(
|
||||
content="Vector databases enable semantic search...",
|
||||
thought_type="observation",
|
||||
concepts=["weaviate", "embeddings"]
|
||||
)
|
||||
|
||||
# 2. Démarrer une conversation
|
||||
add_message(
|
||||
content="Explain transformers",
|
||||
role="user",
|
||||
conversation_id="chat_2026_01_09"
|
||||
)
|
||||
|
||||
# 3. Rechercher dans l'historique
|
||||
messages = search_messages("transformers architecture")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Sécurité
|
||||
|
||||
### Validation des entrées
|
||||
- Tous les paramètres sont typés avec Pydantic
|
||||
- Validation automatique des limites (1-100 pour results)
|
||||
- Filtrage SQL injection via Weaviate client
|
||||
|
||||
### Permissions
|
||||
- `delete_document` nécessite `confirm=true` explicite
|
||||
- Pas d'authentification (usage local Claude Desktop)
|
||||
- Logs structurés JSON pour audit
|
||||
|
||||
### Error Handling
|
||||
- `WeaviateConnectionError`: Problème connexion base
|
||||
- `PDFProcessingError`: Échec traitement PDF
|
||||
- Tous les outils retournent `success: false` + message d'erreur
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Performance
|
||||
|
||||
### Latence typique
|
||||
- `ping()`: <1ms
|
||||
- `search_chunks()`: 100-500ms (vectorisation + recherche)
|
||||
- `parse_pdf()`: 2-5min (dépend taille PDF, OCR, LLM)
|
||||
- `list_documents()`: 50-100ms
|
||||
- Memory tools: 100-300ms
|
||||
|
||||
### Optimisations
|
||||
- GPU embedder (BAAI/bge-m3, RTX 4070): 17ms par query
|
||||
- Weaviate HNSW + RQ: recherche <100ms sur 5k+ chunks
|
||||
- Batch processing pour ingestion
|
||||
- Cache Weaviate pour requêtes répétées
|
||||
|
||||
---
|
||||
|
||||
## 📝 Notes d'Implémentation
|
||||
|
||||
### Architecture
|
||||
- **Serveur**: FastMCP (stdio transport)
|
||||
- **Handlers**: Fonctions async dans `mcp_tools/`
|
||||
- **Memory handlers**: Dans `memory/mcp/`
|
||||
- **Validation**: Pydantic models
|
||||
- **Logging**: JSON structuré avec timestamps
|
||||
|
||||
### Collections Weaviate
|
||||
```
|
||||
6 collections au total:
|
||||
|
||||
RAG (3):
|
||||
- Work (no vectorizer) - 19 œuvres
|
||||
- Chunk_v2 (GPU embedder) - 5,372 chunks
|
||||
- Summary_v2 (GPU embedder) - 114 résumés
|
||||
|
||||
Memory (3):
|
||||
- Conversation (GPU embedder) - 12 conversations
|
||||
- Message (GPU embedder) - 380 messages
|
||||
- Thought (GPU embedder) - 104 pensées
|
||||
```
|
||||
|
||||
### GPU Embedder
|
||||
- **Modèle**: BAAI/bge-m3 (1024 dimensions)
|
||||
- **Hardware**: RTX 4070 (PyTorch CUDA)
|
||||
- **Performance**: 17ms par vectorisation
|
||||
- **Context**: 8192 tokens
|
||||
- **Usage**: Toutes les 5 collections vectorisées
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Cas d'Usage
|
||||
|
||||
### 1. Recherche académique
|
||||
- Ingérer corpus philosophique complet
|
||||
- Recherche sémantique multi-œuvres
|
||||
- Analyse comparative auteurs/concepts
|
||||
|
||||
### 2. Aide à la rédaction
|
||||
- Rechercher citations pertinentes
|
||||
- Explorer arguments philosophiques
|
||||
- Contextualiser concepts
|
||||
|
||||
### 3. Apprentissage
|
||||
- Parcourir documents structurés (TOC)
|
||||
- Recherche par niveaux (chapitres → sections)
|
||||
- Découverte guidée
|
||||
|
||||
### 4. Mémoire conversationnelle
|
||||
- Capturer insights pendant recherche
|
||||
- Historique conversations avec Claude
|
||||
- Recherche transversale dans l'historique
|
||||
|
||||
---
|
||||
|
||||
**Dernière mise à jour**: 2026-01-09
|
||||
**Version**: Library RAG MCP Server v2.0
|
||||
**Collections**: 6 (3 RAG + 3 Memory)
|
||||
**GPU Embedder**: BAAI/bge-m3 (RTX 4070)
|
||||
Reference in New Issue
Block a user