Files
nav-carte/V2-cadrage/I-prompt-session-3-ia-deploy.md
2026-04-28 14:00:05 +02:00

10 KiB
Raw Permalink Blame History

I — Prompt Session 3 : IA + Deploy NAV V2

Session dédiée Claude Code, modèle Opus pilote avec délégation sous-agents Sonnet autorisée.
Prérequis : Sessions 1 et 2 terminées (front navigable, fiches visibles, formulaire OK).
Durée estimée : 6-8h.
Autonomie : 6/10 (checkpoints : test pipeline IA sur 3 fiches + deploy final).

Mission

Brancher la couche IA et déployer la V2 :

  1. Worker IA async qui enrichit les soumissions (Mistral Nemo)
  2. Chatbot recherche sémantique (Mistral Small)
  3. Bandeau bas stats (coût IA + dons + activité)
  4. Page /a-propos (souveraineté, gouvernance, transparence Liberapay)
  5. Deploy production nav.trans-former.fr
  6. Test pipeline IA sur les 3 fiches réservées

Fichiers de référence (à LIRE en premier)

Tous dans C:\Users\jules\Dropbox\ATIS - IPCJRA\0 INBOX\NAV-V2-recherches\ :

  • G-prompt-dev-final.md (vision V2, étapes 4, 5, 7, 8, 9)
  • B-provider-ia-souverain.md (Mistral Nemo + Small, circuit breaker 20€/mois)
  • C-systeme-dons.md (Liberapay widget)
  • F-spec-pipe-collaboration.md (§3 prompts IA exacts, §4 endpoints)
  • VPS-check.md (deploy process)
  • palette-nav-v2.md (palette bandeau + /a-propos)
  • seed-test-pipe-ia.json (3 fiches CNOA/Archireport/Collectif Fil réservées pour test worker)

Journal projet : 1 PROJETS\TECH - infra VPS, website pro, RAG\nav-carte\JOURNAL-V2.md
Code en cours : 1 PROJETS\TECH - infra VPS, website pro, RAG\nav-carte\

Décisions tranchées (Sessions 1 + 2 + pilote S3)

  • Circuit breaker 20€/mois dépassé → bandeau "manque de fonds" + CTA Liberapay + pédagogie "1€ = N requêtes" + transparence origine Liberapay
  • Transparence Liberapay (origine belge, asso non-lucrative, hébergement FR/UE éthique) → section dédiée dans /a-propos
  • From email modération : contact@trans-former.fr
  • Liberapay URL : liberapay.com/trans-former.fr (widgets fournis dans C-systeme-dons.md)
  • Seuil email modération : 5 fiches pending → envoi mail Jules via Resend
  • Facteur CO2eq : 0.052 kg CO2/kWh (RTE FR) pour calcul bandeau carbone
  • Scraping : crawl4ai seul, pas de fallback httpx+BS4 (diag VPS pilote : crawl4ai occupe 4.3 MB, ms-playwright absent donc crawl4ai tourne en mode statique léger — un seul chemin de code, plus simple à maintenir)
  • Rate limit chatbot : 10 req/IP/jour (F §8, fichier JSON /tmp/nav-ratelimit/{IP_hash}.json, cron reset journalier)
  • Prompts Mistral Nemo + Small : copier-coller exact depuis F §3 et §4, ne pas reformuler
  • Stack deploy : systemd + Caddy sur nav.trans-former.fr (même domaine que V1, pas de sous-domaine API)
  • Endpoint soumission : /api/organisations (POST JSON standard, déjà existant — S2 a utilisé organisations.post.ts)

État S1 et S2 — à lire AVANT de coder

Lecture obligatoire en premier : 1 PROJETS/TECH - infra VPS, website pro, RAG/nav-carte/JOURNAL-V2.md

Points d'attention :

  • 96 fiches importées NocoDB, 3 réservées test pipe IA (CNOA, Archireport, Collectif Fil)
  • 8 anciens records V1 (IDs 1-8, moderation_status null) à purger avant deploy prod
  • Divergence taxonomie moderation_status tranchée : approved/rejected partout, pending = absence de validation
  • Endpoint NocoDB correct : /api/v1/db/meta/tables/{id}/columns (v0.301.5)
  • Disque VPS 76% (21/04) — surveiller pendant scraping, alerter si > 85%
  • Conflit lib Python rich résolu avec --ignore-installed — vérifier au passage que lightrag tourne toujours (TODO S1)

Préflight avant tout code (obligatoire)

  1. Lire JOURNAL-V2.md en entier
  2. Lire F-spec-pipe-collaboration.md §3, §4, §6 (circuit breaker), §7 (endpoints), §9 (worker)
  3. ssh vps-hetzner "cat /opt/nav-carte/.env | grep -E 'MISTRAL|NOCODB|RESEND'" → vérifier toutes les clés présentes
  4. ssh vps-hetzner "df -h /" → confirmer disque < 85%
  5. Si une clé manque ou disque > 85% → STOP, remonter au pilote Jules

Test coût AVANT de scaler (règle sacrée)

Étape 5 (test pipe IA) :

  1. Lancer le worker sur 1 seule fiche (CNOA)
  2. Vérifier stats_usage : tokens_in, tokens_out, cout_eur
  3. Extrapoler coût pour 96 fiches → si > 1€ pour le batch test, STOP + ping Jules
  4. Si OK, lancer sur les 2 fiches restantes (Archireport, Collectif Fil)

Credentials

VPS : ssh vps-hetzner (port 4422)
NocoDB : localhost:8070
Token nav-v2-worker : dans /opt/nav-carte/.env
Mistral API key : dans /opt/nav-carte/.env (MISTRAL_API_KEY)
Resend SMTP : /opt/vps-kit/.env
Deploy : /opt/nav-carte/ (systemd nav-carte.service)
Domaine : nav.trans-former.fr (Caddy config existante)

Étapes

Étape 4 — Worker IA enrichissement (4-5h)

  • Script worker/enrich.js (Node.js, lancé via systemd timer toutes les 5 min)
  • Pipeline :
    1. Fetch organisations WHERE moderation_status=pending AND ai_processed=false (LIMIT 5 par run)
    2. Pour chaque fiche :
      • Scrape URL via crawl4ai (timeout 3 min, mode statique) — si échec : flag scrape_status=failed, pas de fallback httpx+BS4
      • Truncate contenu scrapé à 4k tokens
      • Appel Mistral Nemo avec prompt F §3 (copier-coller exact)
      • Parser réponse → update description_enrichie, points_cles, tags_fonction (si IA propose), ai_raw_output, ai_processed=true, scrape_status
      • Log dans stats_usage (model, tokens_in, tokens_out, cout_eur, timestamp, orga_id)
    3. Si circuit breaker 20€/mois dépassé : skip enrich, log, trigger bandeau "manque de fonds"
    4. Si 5 fiches en attente modération : email Jules via Resend (from contact@trans-former.fr)
    5. Si scrape échoué : flag scrape_status=failed, review manuel
  • Gestion erreurs : retry 2x, puis flag scrape_status=failed

Étape 5 — Test pipeline IA sur 3 fiches (1-2h)

Utiliser seed-test-pipe-ia.json (3 entrées : CNOA, Archireport, Collectif Fil) :

  • Injecter manuellement dans NocoDB avec moderation_status=pending, ai_processed=false
  • Déclencher worker manuellement (pas attendre cron)
  • Observer les 3 runs, documenter :
    • Temps d'exécution par fiche
    • Qualité description_enrichie et points_cles
    • Fonctions détectées par l'IA vs fonctions Jules
    • Coût Mistral (stats_usage)
  • Produire 1 PROJETS/TECH - infra VPS.../nav-carte/PIPE-IA-DOC.md : documentation précise du pipeline, input, output, prompts, paramètres — servira de base pour le futur skill /mistral-nemo-vps

Étape 5bis — Chatbot recherche (3-4h)

  • Composant ChatbotSheet.vue (bottom-sheet Headless UI, mobile + desktop)
  • Message onboarding : texte exact E §6
  • Template requête : champs besoin / thématique / lieu → prompt structuré
  • API POST /api/chatbot :
    • Input : question utilisateur + contexte JSON des fiches (top N matchs par taxonomie)
    • Appel Mistral Small (prompt F §3)
    • Output : fiches recommandées + explication 1-2 lignes par fiche
  • Rate limit : 10 req/IP/jour, fichier JSON /tmp/nav-ratelimit/{IP_hash}.json (F §8, aligné avec S2)

Étape 7 — Bandeau bas + Liberapay (1-2h)

  • Composant BandeauBas.vue, fond --nav-primary 60%
  • Gauche : stats live depuis stats_usage
    • Coût mois en cours / 20€
    • Nombre tokens utilisés
    • Carbone estimé : kWh × 0.052 kg CO2eq/kWh (RTE FR) — valeur tranchée
  • Milieu : CTA "Soutenir NAV" → Liberapay widget (snippet C-systeme-dons.md)
  • Droite : compteurs semaine (nouveaux dons, fiches ajoutées, requêtes chatbot)
  • Mode "manque de fonds" (si circuit breaker dépassé) : bandeau bascule en mode "NAV a épuisé son budget IA ce mois — aide-nous à continuer" + pédagogie "1€ permet ~X requêtes" (calcul depuis prix Mistral)

Étape 8 — Page /a-propos (1-2h)

  • Sections :
    • NAV — mission, esprit collaboratif, pour qui
    • Souveraineté — IA française (Mistral), hébergement FR (Hetzner), zéro cookie US
    • Gouvernance — qui tient le projet, transparence code (GitHub si public)
    • Transparence Liberapay — origine (asso belge Liberapay Recurrent Donations ASBL), non lucrative, pas de cut par défaut, hébergement FR/UE éthique, modèle de dons récurrents
    • Transparence IA — modèles utilisés, circuit breaker, coût mensuel visible sur bandeau
  • Badges : "IA souveraine", "Hébergé en France", "Zéro cookie US"
  • Lien vers formulaire + widget Liberapay

Étape 9 — Deploy + tests (2-3h)

  • Build production (npm run build)
  • Avant deploy : purger les 8 anciens records V1 (IDs 1-8, moderation_status null) dans NocoDB
  • Deploy via git pull && systemctl restart nav-carte.service
  • Vérifier DNS nav.trans-former.fr, HTTPS Caddy (config V1 déjà présente — vérifier si routes V2 nécessitent ajustement)
  • Checkpoint Jules : test manuel
    • Soumettre une fiche test via /contribuer
    • Vérifier passage dans worker (cron 5 min)
    • Jules valide en NocoDB manuellement
    • Vérifier apparition sur la carte
  • Tester chatbot avec 2-3 requêtes réelles
  • Tester mobile iOS Safari + Android Chrome

Checkpoints Jules

  1. Avant étape 5 : valider texte onboarding chatbot + prompt recherche
  2. Étape 5 test pipe : valider qualité enrichissement sur 3 fiches
  3. Étape 8 : review texte /a-propos (ton Jules appliqué)
  4. Étape 9 : checkpoint deploy final + submit test

Délégation (Opus pilote)

  • Sonnet 1 : worker IA + test pipe 3 fiches + PIPE-IA-DOC (étapes 4-5)
  • Sonnet 2 : chatbot (étape 5bis)
  • Sonnet 3 : bandeau + /a-propos (étapes 7-8)
  • Opus : deploy + checkpoint finaux + debug

Règles

  • Tester pipeline IA sur 1 fiche AVANT de scaler aux 3
  • Circuit breaker 20€ = sacré, jamais dépasser
  • Secrets via .env, jamais dans le code
  • Si blocage > 30 min → reporter au pilote
  • À la fin : mettre à jour JOURNAL-V2 avec backlog V3 détaillé

Output attendu

  1. V2 déployée sur nav.trans-former.fr
  2. ~103 fiches sur la carte + 3 fiches enrichies par IA
  3. Worker cron 5 min opérationnel
  4. Chatbot fonctionnel
  5. Bandeau live avec stats
  6. Liberapay relié + page /a-propos complète
  7. PIPE-IA-DOC.md produit (base skill /mistral-nemo-vps)
  8. JOURNAL-V2.md final avec backlog V3