## 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. ` --- ## 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