← Phase 2 Overview / Agents IA & Jumeau v2
🧠
Module 11 — Phase 2

Agents IA & Jumeau Digital v2

Agents IA dans la messagerie privée, mémoire longue via vector database, copilote v2 avec outils réels et jumeau digital enrichi.

Backlog

User Stories

US11.1
En tant qu'utilisateur, je peux activer un "Agent IA" dans mes conversations privées
must 8pts
US11.2
En tant qu'utilisateur, l'IA répond en mon nom quand je suis indisponible (mode agent actif)
must 10pts
US11.3
En tant qu'utilisateur, mon interlocuteur voit un badge clair "IA répond au nom de @X"
must 3pts
US11.4
En tant qu'utilisateur, je peux reprendre la main sur le chat en 1 tap à tout moment
must 3pts
US11.5
En tant qu'utilisateur, je peux lire un résumé de ce que l'IA a répondu pour moi
must 5pts
US11.6
En tant qu'utilisateur, le copilote se souvient de conversations passées (mémoire longue)
must 10pts
US11.7
En tant qu'utilisateur, le copilote peut faire une vraie recherche de vols pour moi en temps réel
must 8pts
US11.8
En tant qu'utilisateur, le copilote peut consulter la météo d'une destination en temps réel
must 5pts
US11.9
En tant qu'utilisateur, le copilote peut traduire un message ou un post en 1 clic (DeepL)
should 4pts
US11.10
En tant qu'utilisateur, mon jumeau digital affiche mes destinations favorites, style, budget type
must 5pts
US11.11
En tant qu'utilisateur, je peux voir et corriger les informations que l'IA a apprises sur moi
must 4pts
US11.12
En tant que système, les conversations sont vectorisées pour enrichir la mémoire IA
must 8pts
/ai (v2)

Endpoints API

POST /ai/agent/enable Activer agent IA dans une conversation (body: conversation_id) 🔒 auth
POST /ai/agent/disable Désactiver agent IA 🔒 auth
GET /ai/agent/status Statut agent (actif/inactif + dernière action) 🔒 auth
GET /ai/agent/summary/:conversationId Résumé de ce que l'IA a dit en mon nom 🔒 auth
POST /ai/agent/takeover/:conversationId Reprendre la main (désactive agent pour ce chat) 🔒 auth
POST /ai/chat/v2 Chat copilote v2 (avec outils : flights, weather, translate) 🔒 auth
GET /ai/memory Mémoire longue : résumé structuré du profil IA 🔒 auth
PATCH /ai/memory Corriger un élément du profil IA (body: key, value) 🔒 auth
DELETE /ai/memory/:key Effacer un souvenir spécifique 🔒 auth
POST /ai/tools/translate Traduction DeepL via copilote 🔒 auth
POST /ai/tools/weather Météo temps réel pour une destination 🔒 auth
POST /ai/tools/flights-search Recherche vols via Amadeus (outil agent) 🔒 auth
Architecture IA v2

LangGraph + Vector Memory

🔧 Outils disponibles pour l'agent

✈️
flight_search(from, to, date)
Amadeus API — résultats formatés
get_weather(city, days)
OpenWeatherMap — météo 7j
🌍
translate(text, target_lang)
DeepL API — 29 langues
🛡️
get_safety_briefing(city)
Safety Service NOMIIQ
🗺️
search_places(query, lat, lng)
Places Service NOMIIQ
🍜
get_food_reco(place_id, diet)
Food Service NOMIIQ
💱
convert_currency(amount, from, to)
Open Exchange Rates
📅
check_itinerary(user_id)
Itinéraires sauvegardés user

🧠 Architecture Mémoire Longue

// Flux de mémorisation Message user → 1. Embed (OpenAI text-embedding-3-small) 2. Store vector → pgvector (user_id + embedding + text) 3. À chaque nouvelle question : - Similarity search (top 5 souvenirs pertinents) - Injecté dans le context window 4. ai_profile JSONB mis à jour (faits clés) // Structure ai_profile v2 { travel_style: "backpacker/confort/luxury", budget_range: "low/mid/high", trip_pace: "slow/moderate/fast", food_prefs: ["street_food","vegan"], avoid: ["cruise","resort"], fav_regions: ["southeast_asia","latam"], languages: ["fr","en","es"], health_notes:"vegetarian, no gluten" }
TABLE ai_memories
id UUID PRIMARY KEY user_id UUID REFERENCES users(id) content TEXT NOT NULL -- texte original embedding vector(1536) -- pgvector source ENUM('chat','post','itinerary','explicit') created_at TIMESTAMPTZ DEFAULT NOW() INDEX USING ivfflat (embedding vector_cosine_ops)
Business Logic

Règles Métier

🤖
Agent IA messagerie — règles de comportement
L'agent ne répond jamais à des demandes financières, médicales urgentes, ou émotionnelles critiques. Si détecté → désactive automatiquement et notifie l'humain. Ton adapté au jumeau digital.
🔏
Transparence absolue
Chaque message envoyé par l'agent est stocké avec is_ai_generated=true. L'interlocuteur voit un bandeau orange "Ce message a été envoyé par l'IA de @X". Non masquable.
🧮
Limite tokens agent
Agent IA limité à 50 messages/jour par défaut (Premium : illimité). Compteur Redis par user+jour. Après 50 messages → notification à l'utilisateur.
🔍
Similarity search pgvector
Requête : SELECT content FROM ai_memories WHERE user_id=? ORDER BY embedding <=> $query_embedding LIMIT 5. Index IVFFlat pour performance (< 20ms sur 100k vecteurs).
🗑️
Droit à l'oubli
DELETE /ai/memory/:key → supprime le vecteur + met à jour ai_profile. RGPD : export complet possible (/ai/memory/export). Purge complète sur suppression compte.
Critères d'acceptation
Agent IA : premier message en < 2s (streaming)
Badge "IA répond" visible avant même que l'utilisateur lise le message
Reprendre la main : transition en < 500ms, aucun message perdu
Similarity search mémoire : < 50ms sur 100k vecteurs par user
Outil flight_search : résultats en < 4s (avec cache)