Files
Effi/archive/notes-originales/Projet Effi — Documentation d_installation complèt.md
T
Folzo d1e12cff60 Initial commit: Documentation Effi v1.0
- 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
2026-04-04 08:45:59 +02:00

214 lines
7.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 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