- Structure complète du projet - Docker compose de production - Documentation organisée par thèmes - Guides d'installation et configuration - Section dépannage détaillée - Journal historique
7.7 KiB
Vue d'ensemble
Effi est une assistante IA personnelle 100% locale, auto-hébergée, avec mémoire persistante entre les sessions. Elle tourne sur un serveur Ubuntu avec Docker, utilise Ollama sur un PC de jeu séparé comme moteur LLM, et stocke les souvenirs automatiquement.
Architecture
text
[PC Gamer - 192.168.1.X] [Serveur - 192.168.1.27] Ollama :3011 ←→ Docker Compose qwen2.5:14b ├── open-webui :3000 RX 7800 XT 16GB VRAM ├── qdrant :6333 ├── mcpo :8000 └── wol-proxy :9999
Prérequis
-
Serveur : Ubuntu Server, Docker + Docker Compose installés
-
PC Gamer : Ollama installé, accessible sur le réseau local via
:3011 -
Modèles Ollama :
qwen2.5:14b(principal),qwen2.5:3b(mémoire)
Structure des fichiers
bash
~/effi/ ├── docker-compose.yml ├── .env └── mcpo-config/ └── config.json
Fichier .env
text
WEBUI_SECRET_KEY=une_cle_secrete_longue_et_aleatoire
docker-compose.yml complet
text
services: open-webui: image: ghcr.io/open-webui/open-webui:main container_name: open-webui restart: unless-stopped extra_hosts: - "host.docker.internal:host-gateway" ports: - "3000:8080" environment: - OLLAMA_BASE_URL=http://192.168.1.X:3011 - WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY} - VECTOR_DB=qdrant - QDRANT_URI=http://qdrant:6333 - DEFAULT_LOCALE=fr-FR - ENABLE_MEMORIES=true volumes: - open-webui-data:/app/backend/data depends_on: - qdrant - wol-proxy networks: - effi-net qdrant: image: qdrant/qdrant:latest container_name: qdrant restart: unless-stopped ports: - "6333:6333" volumes: - qdrant-data:/qdrant/storage networks: - effi-net mcpo: image: ghcr.io/open-webui/mcpo:main container_name: mcpo restart: unless-stopped ports: - "8000:8000" volumes: - ./mcpo-config:/app/config command: ["--config", "/app/config/config.json"] networks: - effi-net wol-proxy: image: alpine:latest container_name: wol-proxy restart: unless-stopped networks: - effi-net volumes: open-webui-data: qdrant-data: networks: effi-net: driver: bridge
Démarrage
bash
cd ~/effi docker compose up -d
Configuration Open WebUI
1. Créer le compte admin
Accède à http://192.168.1.27:3000 → crée le compte Folzo.
2. Connecter Ollama
Admin Panel → Settings → Connections → Ollama
→ URL : http://192.168.1.X:3011
3. Créer le modèle Effi
Admin Panel → Models → + New Model
-
Nom :
Effi -
Modèle de base :
qwen2.5:14b -
System prompt : voir section dédiée ci-dessous
4. Activer la mémoire
Admin Panel → Settings → General → Memory → toggle ON
System prompt d'Effi
text
Tu es Effi, l'assistante IA locale de Folzo (Open WebUI + Ollama). ## Langue Réponds UNIQUEMENT en français, quelle que soit la langue utilisée. ## Personnalité - Chaleureuse, efficace, orientée solutions — une amie geek de confiance. - Humour fin : 0 à 1 vanne max par réponse, jamais forcée. - Ton conversationnel IRL, phrases courtes, pas de pavés. ## Priorités 1. Répondre à la demande directement et clairement. 2. Ajouter un conseil ou alternative si pertinent. 3. Si ambigu → 1 à 3 questions courtes avant de proposer une solution. ## Règles strictes - Question simple → réponse courte (2–6 phrases) + 1 suggestion finale. - Action risquée (rm, format, firewall, suppression) → demande confirmation avant. - Ne sur-parle pas, pas de répétitions inutiles. ## Spécialités - Linux/Docker : commandes prêtes à copier + explication simple du "pourquoi". - Débogage : étape par étape, checks rapides d'abord. - Écriture : corrige en gardant le style de Folzo. ## Prise de notes Folzo utilise Obsidian. Si une note doit être créée, fournis le contenu formaté en Markdown prêt à copier. ## Mémoire N'invente pas de souvenirs. Les infos sur Folzo sont injectées automatiquement ci-dessous. <memory_user_context></memory_user_context>
Installation du filtre Auto Memory
Installer le filtre
Admin Panel → Functions → Discover → cherche "Auto Memory" par nokodo → Installer
Configurer les Valves
Admin Panel → Functions → Auto Memory → ⚙️
| Valve | Valeur |
|---|---|
| Openai Api Url | http://192.168.1.X:3011/v1 |
| Model | qwen2.5:3b |
| Api Key | toto (valeur quelconque) |
| Messages To Consider | 10 |
| Related Memories N | 5 |
| Minimum Memory Similarity | 0.7 |
| Override Memory Context | OFF |
| Debug Mode | OFF (ON pour diagnostic) |
Activer globalement
Admin Panel → Functions → Auto Memory → ⋯ → Toggle Global → ON
Patch du code (correction JSON markdown)
Admin Panel → Functions → Auto Memory → ⋯ → Edit
Cherche avec Ctrl+F : text_response = response.choices[0].message.content
Remplace le bloc if response_model: par :
python
if response_model: try: cleaned = re.sub(r'```(?:json)?\s*', '', text_response) cleaned = re.sub(r'```\s*', '', cleaned).strip() match = re.search(r'\{.*\}', cleaned, re.DOTALL) if match: cleaned = match.group(0) return response_model.model_validate_json(cleaned) except ValidationError as e: self.log(f"response model validation error: {e}", level="warning") raise return text_response
Cherche aussi UNIFIED_SYSTEM_PROMPT et ajoute au tout début de la chaîne :
python
UNIFIED_SYSTEM_PROMPT = """IMPORTANT: Respond with ONLY valid JSON. No markdown formatting, no code blocks, no explanation text. Start your response directly with { and end with }. """ + UNIFIED_SYSTEM_PROMPT
Installation du filtre Memory Injection
Installer le filtre
Admin Panel → Functions → Discover → cherche "Memory Injection Filter" par Raphael → Installer
Configurer les Valves
-
PREPENDING_TEXT :
Voici les souvenirs à long terme de l'utilisateur : -
SHOW_MEMORY_COUNT_EMITTER :
ON
Activer globalement
Admin Panel → Functions → Memory Injection Filter → ⋯ → Toggle Global → ON
Vérification du bon fonctionnement
1. Test d'enregistrement mémoire
Dans un chat avec Effi :
text
Je collectionne les vinyles des années 80
Dans le terminal :
bash
sudo docker cp open-webui:/app/backend/data/webui.db /tmp/webui.db sqlite3 /tmp/webui.db "SELECT content, datetime(created_at, 'unixepoch') FROM memory ORDER BY created_at DESC LIMIT 5;"
→ Le souvenir doit apparaître.
2. Test de restitution entre sessions
Ouvre un nouveau chat :
text
Qu'est-ce que tu sais sur mes hobbies ?
→ Effi doit mentionner les vinyles sans que tu l'aies redit.
3. Vérification des logs
bash
docker logs open-webui --tail 50 | grep -iE "memory|saved|added"
Gestion de la mémoire
Voir tous les souvenirs
Profil → Settings → Personalization → Memory
Supprimer un souvenir
Via l'UI : icône 🗑️ dans la liste des souvenirs.
Via SQLite :
bash
sudo docker cp open-webui:/app/backend/data/webui.db /tmp/webui.db sqlite3 /tmp/webui.db "DELETE FROM memory WHERE content LIKE '%mot_clé%';" sudo docker cp /tmp/webui.db open-webui:/app/backend/data/webui.db
Bonnes pratiques
-
Garder les souvenirs courts et factuels (< 15 mots)
-
Viser 30-50 souvenirs max pour ne pas surcharger le contexte
-
Nettoyage manuel trimestriel via l'UI