Global Search & IA – Phase 3 : Plan révisé
Contexte : Phase 1 et 2 sont complétées. Ce document revoit les objectifs initiaux de la Phase 3 à la lumière des évolutions (insights proactifs LOT A, refonte agent, messagerie, etc.) et propose un périmètre pertinent et faisable.
Références : PLAN_AMELIORATIONS_CRM.md (État du Global Search, Phase 3), AI_SEARCH_ARCHITECTURE.md, INSIGHTS_IMPLEMENTATION_PLAN.md.
1. Ce qui était prévu (Phase 3 initiale)
- Analyse et insights automatiques
- Suggestions d’actions contextuelles
- Recherche conversationnelle
- Prédictions et recommandations
- Résumé et synthèse
2. Réconciliation avec l’existant
2.1 Analyse et insights automatiques
- Déjà en place : système IA Proactive Insights (LOT A) – règles déterministes, génération automatique, notifications, centre d’insights, actions suggérées.
- En Phase 3 : ne pas refaire un système d’insights, mais faire le lien avec le Global Search / Agent :
- Dans le modal Global Search (Cmd+K) ou au démarrage du panneau Agent : afficher une courte liste d’insights récents ou critiques avec lien vers l’Insights Center (ou action rapide).
- Optionnel : une commande ou une intention du type « Montre-moi mes insights » qui renvoie vers la page insights ou en affiche un résumé.
→ Pertinent : exposition des insights dans le parcours recherche/agent. Faisable : réutilisation de l’API insights existante + un bloc UI dans Global Search ou dans l’Agent.
2.2 Suggestions d’actions contextuelles
- Déjà en place : l’agent gère des context tokens (contact, session, devis, facture) et des action tokens (création d’entités, commandes
/). - Manquant : suggestions qui dépendent de la page actuelle (route) ou de l’entité sélectionnée. Ex. sur une fiche contact : à l’ouverture du Search ou de l’Agent, proposer « Envoyer un email », « Créer une session », « Voir les devis en attente ».
→ Pertinent : oui, améliore l’usage quotidien. Faisable : passer la route courante (et si possible l’id d’entité) au Global Search / Agent, et afficher 3–5 actions suggérées selon le contexte (mapping route → suggestions).
2.3 Recherche conversationnelle
- Déjà en place : requêtes en langage naturel, traitement par l’IA (intent, filtres), construction de vues, création d’entités.
- Extension possible : affinage multi-tour – ex. « contacts inactifs depuis 6 mois » puis « et qui ont un devis envoyé dans les 30 derniers jours ». Nécessite de garder le contexte de la requête précédente et de renvoyer une requête « raffinée » au backend.
→ Pertinent : utile pour des requêtes complexes. Faisable : moyennant gestion du contexte de conversation (déjà partiellement là) + côté backend une entrée du type « appliquer en plus ces filtres à la vue précédente ». À traiter en Phase 3.1 si priorité moindre.
2.4 Prédictions et recommandations
- Ex. probabilité de conversion d’un devis, recommandations d’actions pour la relation client.
- État : non implémenté, nécessite modèles ou règles métier dédiées (LLM ou scoring).
→ Pertinent à long terme. Faisable seulement avec un chantier dédié (données, métriques, API). À garder pour une Phase 3.2 ou roadmap ultérieure.
2.5 Résumé et synthèse
- Ex. « Résume les points clés de la dernière session avec le client X ».
- Déjà en place : service de rédaction IA (
AiWritingService), contexte (sessions, contacts, etc.). - Manquant : une intention / action « résumer » explicite (session, conversation, note) avec un prompt dédié et un affichage du résumé dans l’agent.
→ Pertinent et faisable : ajout d’un type d’action ou d’une commande « résumer » + appel au service d’écriture avec le bon contexte.
3. Périmètre proposé pour la Phase 3
3.1 Priorité haute (à faire en premier)
| Objectif | Description | Faisabilité |
|---|---|---|
| Suggestions d’actions contextuelles | Selon la route (et l’entité si disponible), afficher dans le Global Search ou en tête du panneau Agent des actions rapides (ex. « Créer une session », « Voir les devis », « Aller aux insights »). | Élevée |
| Lien Insights ↔ Search/Agent | Dans le modal Global Search (ou au démarrage de l’Agent) : bloc « Insights récents » (titre + 2–3 insights critiques ou non lus) avec lien vers /insights. | Élevée |
3.2 Priorité moyenne
| Objectif | Description | Faisabilité |
|---|---|---|
| Résumé et synthèse | Commande ou intention « Résumer [session / contact / conversation] » : appel au service d’écriture IA avec contexte, affichage du résumé dans la réponse de l’agent. | Élevée |
3.3 Phase 3.1 – Affinage multi-tour ✅ (2026-02-28)
| Objectif | Statut |
|---|---|
| Recherche conversationnelle (affinage multi-tour) | Implémenté : backend POST /search/refine, prompt buildRefineFiltersPrompt, generateRefinedFilters ; frontend lastAppliedView + champ « Affiner la vue » dans AiIntentDisplay ; requêtes « vue » passent par /search/ai/process pour obtenir create_view. |
3.4 Phase 3.2 – Prédictions et recommandations ✅ (2026-02-28)
| Objectif | Statut |
|---|---|
| Prédictions et recommandations | Implémenté : backend RecommendationsModule (règles métier par entité : contact/session/quote/invoice/dashboard), GET /recommendations?entity=&entityId=, prédiction « quote conversion » (stub value: null, labelKey pour i18n) ; frontend RecommendationsBlock + useRecommendations + getRecommendationsContextFromPath(pathname), affichage dans le Global Search (Cmd+K) ; i18n recommendations.* et search.global.recommendations.*. Extensible ensuite par un modèle ML. |
4. Plan d’implémentation (priorité haute + moyenne)
4.1 Contexte route pour le Global Search et l’Agent
- Frontend :
- Utiliser la route actuelle (ex.
useRouterState()ou équivalent TanStack Router) et, si disponible, l’id d’entité (contact, session, devis, facture). - Exposer ce « page context » au
GlobalSearchContextet/ou à l’AgentContext(ou au hook qui alimente les suggestions).
- Utiliser la route actuelle (ex.
- Mapping route → suggestions (ex.) :
/contactsou/contacts/:id→ « Créer une session », « Voir les devis », « Envoyer un email » (si fiche contact), « Aller aux insights »./sessionsou/sessions/:id→ « Créer un devis », « Voir le contact », « Aller aux insights »./quotesou/quotes/:id→ « Créer une facture », « Voir la session », « Aller aux insights »./invoicesou/invoices/:id→ « Voir la session », « Voir le contact », « Aller aux insights ».- Route par défaut → « Créer un contact », « Créer une session », « Voir les insights ».
- UI : dans le modal Global Search (en haut, sous la barre de recherche) ou en tête du panneau Agent : liste de boutons/liens « Actions rapides » basée sur ce mapping.
4.2 Bloc « Insights récents » dans le Search ou l’Agent
- Backend : réutiliser l’API existante des insights (ex. liste des insights non lus ou récents, limitée à 5).
- Frontend :
- Appel à cette API lorsque le modal Global Search s’ouvre (ou lorsque le panneau Agent s’affiche).
- Afficher un bloc « Insights récents » (titre + 2–3 lignes par insight, lien vers la page ou action).
- Lien « Voir tout » vers
/insights.
4.3 Résumé / synthèse par l’agent
- Backend :
- S’appuyer sur
AiWritingService(ou équivalent) avec un prompt « résumé » (session, contact, conversation, etc.). - Définir une intention ou une action dédiée (ex.
summarize_session,summarize_contact) et l’intégrer au flux existant de traitement des requêtes agent.
- S’appuyer sur
- Frontend :
- Gérer l’intention « résumer » (ou la commande
/resume) et afficher la réponse (résumé) dans le fil de l’agent.
- Gérer l’intention « résumer » (ou la commande
5. Fichiers et composants à toucher (indicatif)
- Contexte route / suggestions :
GlobalSearchContext.tsx,useGlobalSearch.ts, ou équivalent ; composant d’ouverture du Global Search et de l’Agent (ex.GlobalSearch.tsx,AgentPanelContent.tsxouAgentPanel.tsx). Création éventuelle d’un hookusePageContextForSearch()et d’un composantContextualQuickActions.tsx. - Insights :
frontend/src/client/insights/(hooks existants) ; intégration dans le modal Global Search ou dans le panneau Agent (composant dédiéInsightsSummaryBlock.tsxou similaire). - Résumé : backend
ai-assistantouai-search(nouvelle intention/action) ; frontend agent (gestion de la réponse « résumé »).
6. Critères de succès
- À l’ouverture du Global Search (Cmd+K) ou de l’Agent, l’utilisateur voit des actions rapides adaptées à la page (et à l’entité si applicable).
- Il voit aussi un aperçu des insights récents avec accès rapide à la page insights.
- Il peut demander à l’agent de résumer une session (ou un contact, etc.) et obtenir un résumé cohérent dans le fil.
7. Changelog
- 2026-02-28 : Création du document ; réconciliation avec LOT A (insights), refonte agent et messagerie ; périmètre Phase 3 restreint à suggestions contextuelles, lien insights, résumé/synthèse ; affinage conversationnel et prédictions reportés.
- 2026-02-28 : Implémentation priorité haute – Suggestions d’actions contextuelles :
ContextualQuickActions+getContextualQuickActions(pathname); affichage dans le modal Global Search (Cmd+K) lorsque la recherche est vide. Lien Insights :InsightsSummaryBlockavecuseInsights({ limit: 3, status: "OPEN" }); affichage des 3 derniers insights ouverts + lien « Voir tout » vers/insights. i18n FR/EN poursearch.global.quickActions.*etsearch.global.insightsSummary.*. - 2026-02-28 : Implémentation priorité moyenne – Résumé et synthèse : (1) Backend : type
summaryajouté àAiWritingServiceet schéma du controller ; (2) Commande slash /resume (EN: /summarize, FR: /résume) dans le registre et i18n ; (3)AgentChatHandlerService.handleSummarizeCommand(): récupère le contexte (contextTokens), charge la session ou le contact, appelleAiWritingService.generateContent(..., "summary", { entityType, entityData }), renvoie le résumé dans le fil du chat ; (4) Si aucun contexte : message invitant à épingler une session ou un contact puis à utiliser /résume. Commande visible dans /aide. - 2026-02-28 : Phase 3.1 – Affinage multi-tour : (1) Backend :
AiSearchPromptsService.buildRefineFiltersPrompt,AiSearchOpenaiService.generateRefinedFilters,AiSearchService.generateRefinedFilters(cache 5 min),POST /search/refine(rate limit 20/min) ; (2) Frontend : étatlastAppliedViewaprès application des filtres,refineView(refinementQuery)qui appelle refine puis apply filters, bloc « Affiner la vue » dansAiIntentDisplay(label, input, bouton, i18nsearch.global.refine.*) ; (3) Pour les requêtes non « create »,processAiQueryappelle d’abord/search/ai/processpour obtenir create_view + filtres et afficher « Appliquer les filtres », puis après application l’utilisateur peut affiner. - 2026-02-28 : Phase 3.2 – Prédictions et recommandations : (1) Backend : module
recommendations(RecommendationsServicerègles par entité,GET /recommendations?entity=&entityId=), prédiction quote conversion (stub) ; (2) Frontend :getRecommendationsContextFromPath,useRecommendations,RecommendationsBlockdans le Global Search ; (3) i18n FR/ENrecommendations.*,search.global.recommendations.*; (4) OpenAPIpaths/recommendations.yaml,components/recommendations.yaml.