- Research 8 different memory solutions (mem0, LangChain, LlamaIndex, etc.) - Document 5 levels of AI memory - Explain why mem0 was abandoned (5-10s latency) - Current state: manual snippets via OpenWebUI - Future technologies: MemGPT, memory-augmented LLMs, knowledge graphs - Recommendations for Effi short/mid/long term
352 lines
8.8 KiB
Markdown
352 lines
8.8 KiB
Markdown
# Recherche : Solutions de Mémoire pour IA Locale
|
|
|
|
> **Date**: Avril 2026
|
|
> **Contexte**: Projet Effi - Assistant IA Personnel Self-Hosted
|
|
> **Historique**: mem0 abandonné (trop lent), mémoire manuelle via snippets retenu
|
|
|
|
---
|
|
|
|
## Table des Matières
|
|
|
|
1. [Contexte et Besoins](#contexte-et-besoins)
|
|
2. [Niveaux de Mémoire IA](#niveaux-de-mémoire-ia)
|
|
3. [Solutions Actuelles](#solutions-actuelles)
|
|
4. [Comparatif Détaillé](#comparatif-détaillé)
|
|
5. [Intégration OpenWebUI](#intégration-openwebui)
|
|
6. [Innovations et Futur](#innovations-et-futur)
|
|
7. [Recommandations pour Effi](#recommandations-pour-eff)
|
|
|
|
---
|
|
|
|
## Contexte et Besoins
|
|
|
|
### Mémoire Actuelle Effi
|
|
- **Type**: Mémoire manuelle via snippets OpenWebUI
|
|
- **Avantages**: Rapide, prévisible, simple
|
|
- **Inconvénients**: Nécessite intervention manuelle, pas automatique
|
|
|
|
### Besoins Identifiés
|
|
1. **Mémoire court terme**: Conversation actuelle (context window)
|
|
2. **Mémoire long terme**: Informations persistantes entre sessions
|
|
3. **Mémoire sémantique**: Recherche dans les documents
|
|
4. **Mémoire épisodique**: Faits importants sur l'utilisateur
|
|
|
|
---
|
|
|
|
## Niveaux de Mémoire IA
|
|
|
|
### Niveau 1 : Context Window (Mémoire Court Terme)
|
|
- **Description**: Fenêtre de contexte du modèle (32K pour qwen3.5)
|
|
- **Durée**: Session actuelle uniquement
|
|
- **Technologie**: Native au LLM
|
|
|
|
### Niveau 2 : Mémoire de Travail (Working Memory)
|
|
- **Description**: Informations actives pendant une conversation
|
|
- **Durée**: Conversation en cours
|
|
- **Technologie**: RAG, snippets contextuels
|
|
|
|
### Niveau 3 : Mémoire Long Terme (Long Term Memory)
|
|
- **Description**: Informations persistantes entre sessions
|
|
- **Durée**: Jours, semaines, mois
|
|
- **Technologie**: Vector DB, graphe de connaissances
|
|
|
|
### Niveau 4 : Mémoire Épisodique
|
|
- **Description**: Faits importants sur l'utilisateur
|
|
- **Durée**: Permanente
|
|
- **Technologie**: KG, mem0, personnal knowledge graphs
|
|
|
|
### Niveau 5 : Mémoire Procédurale
|
|
- **Description**: Comment faire les choses, préférences
|
|
- **Durée**: Apprentissage continu
|
|
- **Technologie**: LoRA, fine-tuning
|
|
|
|
---
|
|
|
|
## Solutions Actuelles
|
|
|
|
### 1. OpenWebUI Memories (Natif) ⭐ ACTUEL
|
|
|
|
**Description**: Système de snippets intégré à OpenWebUI
|
|
|
|
**Avantages**:
|
|
- ✅ Intégré nativement
|
|
- ✅ Simple et rapide
|
|
- ✅ Pas de latence supplémentaire
|
|
- ✅ Fonctionne avec Ollama
|
|
|
|
**Inconvénients**:
|
|
- ❌ Manuel (snippets à créer)
|
|
- ❌ Pas de mémorisation automatique
|
|
- ❌ Limité en capacité
|
|
|
|
**Utilisation**:
|
|
- `/memory` - Ajouter des souvenirs
|
|
- Snippets dans le contexte
|
|
|
|
---
|
|
|
|
### 2. Mem0 (Abandonné par Effi)
|
|
|
|
**Description**: Couche de mémoire gestion pour LLM, utilisant Qdrant
|
|
|
|
**Statut**: ❌ ABANDONNÉ
|
|
- Latence 5-10s par requête
|
|
- Complexité d'installation
|
|
- Bugs de parsing avec Ollama
|
|
|
|
**Architecture**:
|
|
```
|
|
User Message → Mem0 → Qdrant → Contexte enrichi → LLM
|
|
```
|
|
|
|
---
|
|
|
|
### 3. LangChain Memory
|
|
|
|
**Description**: Framework Python avec plusieurs types de mémoire
|
|
|
|
**Types de mémoire**:
|
|
- ConversationBufferMemory
|
|
- ConversationSummaryMemory
|
|
- VectorStoreRetrievedMemory
|
|
- EntityMemory
|
|
|
|
**Avantages**:
|
|
- ✅ Flexible
|
|
- ✅ Multiple backends (Redis, PostgreSQL, etc.)
|
|
- ✅ Bien documenté
|
|
|
|
**Inconvénients**:
|
|
- ❌ Complexe
|
|
- ❌ Nécessite hébergement supplémentaire
|
|
- ❌ Latence variable
|
|
|
|
---
|
|
|
|
### 4. LlamaIndex Memory
|
|
|
|
**Description**: Framework RAG avec mémoire conversationnelle
|
|
|
|
**Avantages**:
|
|
- ✅ Excellent pour RAG
|
|
- ✅ Memory over RAG
|
|
- ✅ Queries structurées
|
|
|
|
**Inconvénients**:
|
|
- ❌ Python only
|
|
- ❌ Complexe pour usage simple
|
|
|
|
---
|
|
|
|
### 5. Qdrant (RAG Sémantique) ⭐ UTILISÉ
|
|
|
|
**Description**: Vector database pour recherche sémantique
|
|
|
|
**Utilisation actuelle Effi**:
|
|
- Stockage des documents
|
|
- Recherche sémantique via bge-m3
|
|
- RAG sur documents
|
|
|
|
**Configuration**:
|
|
```yaml
|
|
VECTOR_DB: qdrant
|
|
QDRANT_URI: http://192.168.1.27:6333
|
|
```
|
|
|
|
---
|
|
|
|
### 6. Personal Knowledge Graphs (PKG)
|
|
|
|
**Description**: Graphe de connaissances personnel
|
|
|
|
**Outils**:
|
|
- **Mem**: https://mem.ai (cloud)
|
|
- **Nexus**: https://nexus.minddrop.net (fermé)
|
|
- **Corallium**: Alternative open-source
|
|
|
|
**Avantages**:
|
|
- ✅ Mémoire automatique
|
|
- ✅ Connections sémantiques
|
|
- ✅ Apprentissage continu
|
|
|
|
**Inconvénients**:
|
|
- ❌多为 cloud
|
|
- ❌ Pas de solution self-hosted mature
|
|
|
|
---
|
|
|
|
### 7. OpenWebUI Pipelines + Custom Memory
|
|
|
|
**Description**: Framework de plugins pour OpenWebUI
|
|
|
|
**Possibilités**:
|
|
- Custom memory pipeline
|
|
- Intégration avec Qdrant
|
|
- Personnalisation complète
|
|
|
|
**Statut**: ❌ SUPPRIMÉ (trop complexe)
|
|
|
|
---
|
|
|
|
### 8. Beeegf (Mémoire Distribuée)
|
|
|
|
**Description**: Système de mémoire distribué pour agents
|
|
|
|
**Avantages**:
|
|
- ✅ Pour agents multiples
|
|
- ✅ Mémoire partagée
|
|
- ✅ Open-source
|
|
|
|
**Inconvénients**:
|
|
- ❌ Expérimental
|
|
- ❌ Documentation limitée
|
|
|
|
---
|
|
|
|
## Comparatif Détaillé
|
|
|
|
| Solution | Type | Latence | Complexité | Self-Hosted | État |
|
|
|----------|------|---------|------------|-------------|------|
|
|
| OpenWebUI Snippets | Manuel | ~0ms | Très basse | ✅ | ⭐ Actuel |
|
|
| Mem0 | Auto | 5-10s | Haute | ✅ | ❌ Abandonné |
|
|
| LangChain Memory | Hybrid | Variable | Haute | ✅ | ⚠️ Complexe |
|
|
| LlamaIndex | RAG | <1s | Moyenne | ✅ | ⚠️ Python |
|
|
| Qdrant (RAG) | Semantic | <1s | Basse | ✅ | ⭐ Actif |
|
|
| Knowledge Graph | Auto | <2s | Moyenne | ⚠️ | 🔬 Émergent |
|
|
| Ollama Context | Court | 0ms | Aucune | ✅ | ⭐ Actif |
|
|
|
|
---
|
|
|
|
## Intégration OpenWebUI
|
|
|
|
### Configuration Actuelle
|
|
```yaml
|
|
# OpenWebUI Settings
|
|
ENABLE_MEMORIES: true
|
|
|
|
# Mémoire = Snippets manuels
|
|
# RAG = Qdrant (documents)
|
|
```
|
|
|
|
### Options d'Amélioration
|
|
|
|
#### Option A : Améliorer Mémoire Manuelle
|
|
- Snippets plus structurés
|
|
- Prompts enrichis
|
|
- Routines de consolidation
|
|
|
|
#### Option B : RAG Amélioré
|
|
- Indexation automatique des documents
|
|
- Métadonnées enrichies
|
|
- Retrieval optimisé
|
|
|
|
#### Option C : Graph Memory (Future)
|
|
- Intégration knowledge graph
|
|
- Mémoire épisodique
|
|
- Apprentissage passif
|
|
|
|
---
|
|
|
|
## Innovations et Futur
|
|
|
|
### 1. Memory-Augmented LLMs
|
|
|
|
**Technologies émergentes**:
|
|
- **Memento**: Mémoire externalisée pour LLM
|
|
- **Atlas**: Mémoire neurale sur NCEN
|
|
- **MemGPT**: Extensions de contexte pour LLMs
|
|
|
|
**Principe**:
|
|
```
|
|
LLM ←→ Memory Controller ←→ External Memory
|
|
```
|
|
|
|
### 2. Continual Learning
|
|
|
|
**Défi**: Apprendre sans oublier
|
|
|
|
**Approches**:
|
|
- LoRA adaptatif
|
|
- Elastic Weight Consolidation
|
|
- Progressive Neural Networks
|
|
|
|
### 3. Retrieval-Augmented Generation (RAG) 2.0
|
|
|
|
**Innovations**:
|
|
- RAG sur mémoire conversationnelle
|
|
- Self-RAG (auto-évaluation)
|
|
- Corrective RAG
|
|
|
|
### 4. Knowledge Graphs 2.0
|
|
|
|
**Évolutions**:
|
|
- Graphe de mémoire personnel
|
|
- Extraction automatique de faits
|
|
- Reasoning sur le graphe
|
|
|
|
### 5. Agents avec Mémoire
|
|
|
|
**Architectures**:
|
|
- Multi-agents avec mémoire partagée
|
|
- Hive mind pour tâches complexes
|
|
- Mémoire épisodique pour agents
|
|
|
|
---
|
|
|
|
## Recommandations pour Effi
|
|
|
|
### Court Terme (Maintenant)
|
|
1. **Garder mémoire manuelle** via snippets
|
|
2. **Optimiser RAG** avec Qdrant existant
|
|
3. **Structurer les prompts** pour meilleure rétention
|
|
|
|
### Moyen Terme (3-6 mois)
|
|
1. **Tester LlamaIndex** pour mémoire conversationnelle
|
|
2. **Expérimenter avec knowledge graphs** (Obsidian + plugins)
|
|
3. **Automatiser l'indexation** des documents
|
|
|
|
### Long Terme (6-12 mois)
|
|
1. **Surveiller Mem0** (peut s'améliorer)
|
|
2. **Explorer MemGPT** pour extensions de contexte
|
|
3. **Intégrer knowledge graph** personnel
|
|
|
|
### Non Recommandé
|
|
- ❌ Retour à mem0 (trop de problèmes)
|
|
- ❌ LangChain (complexité inutile)
|
|
- ❌ Solutions cloud (vie privée)
|
|
|
|
---
|
|
|
|
## Sources et Références
|
|
|
|
### Documentation
|
|
- [Mem0 Documentation](https://docs.mem0.ai)
|
|
- [LangChain Memory](https://python.langchain.com/docs/concepts/memory)
|
|
- [LlamaIndex Memory](https://docs.llamaindex.ai/en/stable/module_guides/models/llms/cookbook/memory/)
|
|
- [OpenWebUI Memories](https://docs.openwebui.com/features/chat-conversations/memory)
|
|
- [Qdrant Documentation](https://qdrant.tech/documentation/)
|
|
|
|
### Articles
|
|
- [Memory-Augmented Language Models (Stanford)](https://arxiv.org/abs/2210.14278)
|
|
- [MemGPT: Towards LLMs as Operating Systems](https://arxiv.org/abs/2312.04730)
|
|
- [RAG vs Fine-tuning vs Memories](https://www.promptlayer.com/blog/rag-vs-fine-tuning-vs-memories)
|
|
|
|
### Projets
|
|
- [Mem0](https://github.com/mem0ai/mem0)
|
|
- [LangChain](https://github.com/langchain-ai/langchain)
|
|
- [LlamaIndex](https://github.com/run-llama/llama_index)
|
|
- [MemGPT](https://github.com/MemGPT/MemGPT)
|
|
|
|
---
|
|
|
|
## Conclusion
|
|
|
|
La mémoire pour IA locale est un **problème non résolu** de manière satisfaisante. Les solutions automatiques comme mem0 ajoutent trop de latence. La solution manuelle via snippets reste le **sweet spot** entre fonctionnalité et performance.
|
|
|
|
**Pour Effi**: Garder l'approche actuelle et améliorer progressivement le RAG et les prompts plutôt que d'ajouter une couche de mémoire complexe.
|
|
|
|
---
|
|
|
|
*Document créé: Avril 2026*
|
|
*Dernière mise à jour: Avril 2026*
|