← Phase 1 Overview / Copilote IA
🤖
Module 4 — Phase 1 MVP

Copilote IA NOMIIQ

Chat IA accessible partout, génération d'itinéraires personnalisés, recommandations contextuelles et jumeau digital qui apprend vos préférences.

Backlog

User Stories

US4.1
En tant qu'utilisateur, un bouton flottant teal est visible sur tous les écrans et ouvre le copilote
must 3 pts
US4.2
En tant qu'utilisateur, je peux discuter en français ou anglais avec le copilote
must 3 pts
US4.3
En tant qu'utilisateur, je peux demander "Propose un voyage 7j au Maroc, budget 1500€"
must 13 pts
US4.4
En tant qu'utilisateur, l'itinéraire généré s'affiche en timeline visuelle + carte avec tracé
must 8 pts
US4.5
En tant qu'utilisateur, je peux modifier l'itinéraire (changer jour, remplacer activité, ajuster budget)
must 8 pts
US4.6
En tant qu'utilisateur, je peux demander "Où manger ce soir proche de moi ?"
must 5 pts
US4.7
En tant qu'utilisateur, je peux demander "Est-ce safe d'aller à Medina la nuit ?"
must 5 pts
US4.8
En tant qu'utilisateur, je peux demander "Montre-moi les meilleurs deals vols depuis Paris"
should 5 pts
US4.9
En tant qu'utilisateur, le copilote utilise mon profil IA (jumeau digital) pour personnaliser les réponses
must 8 pts
US4.10
En tant qu'utilisateur, l'historique de mes conversations IA est accessible
should 3 pts
US4.11
En tant qu'utilisateur, je sais toujours clairement que je parle à une IA (badge visible)
must 2 pts
US4.12
En tant qu'utilisateur, je peux sauvegarder un itinéraire généré sur mon profil
must 3 pts
US4.13
En tant que système, les requêtes IA sont traitées de façon asynchrone (pas de timeout UI)
must 5 pts
REST API /ai

Endpoints API

POST /ai/chat Message texte → réponse copilote (stream SSE) 🔒 auth
POST /ai/itinerary Génération itinéraire complet (body: destinations, days, budget, style) 🔒 auth
POST /ai/itinerary/:id/modify Modifier un jour ou une activité de l'itinéraire 🔒 auth
POST /ai/itinerary/:id/save Sauvegarder l'itinéraire sur le profil 🔒 auth
GET /ai/conversations Liste des conversations IA (paginé) 🔒 auth
GET /ai/conversations/:id Historique d'une conversation 🔒 auth
DELETE /ai/conversations/:id Supprimer une conversation 🔒 auth
GET /ai/profile Voir le jumeau digital (ai_profile) 🔒 auth
PATCH /ai/profile Modifier manuellement le jumeau digital 🔒 auth
POST /ai/food-reco Recommandations food contextuelles (lat/lng + préférences) 🔒 auth
POST /ai/safety-briefing Résumé sécurité IA d'une destination 🔒 auth
Architecture IA

Orchestration LLM & Données

System Prompt NOMIIQ

Tu es NOMIIQ, un copilote de voyage IA. // Ton rôle - Expert voyage : destins, sécu, food, budget - Empathique, concis, jamais condescendant - Toujours en langue de l'utilisateur // Contexte injecté automatiquement - Profil jumeau digital : {ai_profile} - Localisation actuelle : {user_location} - Alertes actives : {safety_alerts} - Taux de change : {exchange_rates} // Règles - Cite TOUJOURS les sources sécu - Indique si une info peut être obsolète - Propose TOUJOURS une alternative si danger - Ne génère PAS de contenu trompeur // Format réponses - Chat : max 3 paragraphes - Itinéraire : JSON structuré (voir schema)

Schema Itinéraire JSON

TABLE itinerary_response
{ "title": "7j au Maroc — Backpacker", "total_budget_usd": 1480, "avg_safety_score": 72, "days": [{ "day": 1, "date_offset": 0, "city": "Marrakech", "activities": [{ "time": "09:00", "title": "Médina de Marrakech", "type": "attraction", "place_id": "uuid...", "duration_min": 180, "cost_usd": 5, "safety_note": "Restez vigilant...", "tip": "Évitez les guides non officiels" }] }], "transport_summary": [...], "safety_warnings": [...] }
Business Logic

Règles Métier & Jumeau Digital

📡
Streaming SSE (Server-Sent Events)
La réponse IA est streamée token par token pour éviter les timeouts. Le mobile affiche le texte au fur et à mesure. Fallback: polling /ai/jobs/:id si SSE indisponible.
🧠
Jumeau digital — enrichissement continu
Après chaque action : post créé → enrichit "destinations_visited", like food post → enrichit "food_preferences", itinéraire sauvé → enrichit "travel_style". Stocké en JSONB, max 4KB.
💰
Gestion des coûts OpenAI
GPT-4o utilisé pour itinéraires et briefings sécu. GPT-4o-mini pour le chat simple et les recommandations food. Cache Redis 24h pour les réponses identiques (même destination/dates).
⏱️
BullMQ pour jobs lourds
Génération itinéraire → job BullMQ avec status polling. L'utilisateur voit un écran "Génération en cours..." avec animation. Timeout 45s max, puis erreur explicite.
🔢
Context window management
Historique chat tronqué à 20 messages (LangChain Memory). Résumé automatique des conversations > 30 messages pour économiser les tokens.
🤖
Badge IA obligatoire
Tout contenu généré par IA dans l'UI est marqué d'un badge teal "IA" visible. Dans les chats, un bandeau "Vous parlez au Copilote IA NOMIIQ" est toujours présent.
Critères d'acceptation
Premier token de réponse affiché en < 1.5s (streaming)
Génération itinéraire 7j complète en < 20s (job async)
Le copilote répond en français si l'utilisateur écrit en français
Le jumeau digital est consulté à chaque requête (contexte injecté)
Badge "IA" visible en permanence pendant le chat
Cache hit : réponse identique en < 200ms sans appel OpenAI