Aller au contenu principal

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, APP_OVERVIEW.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)​

ObjectifDescriptionFaisabilité
Suggestions d’actions contextuellesSelon 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/AgentDans 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​

ObjectifDescriptionFaisabilité
Résumé et synthèseCommande 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)​

ObjectifStatut
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)​

ObjectifStatut
Prédictions et recommandationsImplé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 GlobalSearchContext et/ou à l’AgentContext (ou au hook qui alimente les suggestions).
  • Mapping route → suggestions (ex.) :
    • /contacts ou /contacts/:id → « Créer une session », « Voir les devis », « Envoyer un email » (si fiche contact), « Aller aux insights ».
    • /sessions ou /sessions/:id → « Créer un devis », « Voir le contact », « Aller aux insights ».
    • /quotes ou /quotes/:id → « Créer une facture », « Voir la session », « Aller aux insights ».
    • /invoices ou /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.
  • Frontend :
    • Gérer l’intention « résumer » (ou la commande /resume) et afficher la réponse (résumé) dans le fil de l’agent.

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.tsx ou AgentPanel.tsx). Création éventuelle d’un hook usePageContextForSearch() et d’un composant ContextualQuickActions.tsx.
  • Insights : frontend/src/client/insights/ (hooks existants) ; intégration dans le modal Global Search ou dans le panneau Agent (composant dédié InsightsSummaryBlock.tsx ou similaire).
  • Résumé : backend ai-assistant ou ai-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 : InsightsSummaryBlock avec useInsights({ limit: 3, status: "OPEN" }) ; affichage des 3 derniers insights ouverts + lien « Voir tout » vers /insights. i18n FR/EN pour search.global.quickActions.* et search.global.insightsSummary.*.
  • 2026-02-28 : Implémentation priorité moyenne – Résumé et synthèse : (1) Backend : type summary ajouté à AiWritingService et 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, appelle AiWritingService.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 : état lastAppliedView après application des filtres, refineView(refinementQuery) qui appelle refine puis apply filters, bloc « Affiner la vue » dans AiIntentDisplay (label, input, bouton, i18n search.global.refine.*) ; (3) Pour les requêtes non « create », processAiQuery appelle d’abord /search/ai/process pour 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 (RecommendationsService règles par entité, GET /recommendations?entity=&entityId=), prédiction quote conversion (stub) ; (2) Frontend : getRecommendationsContextFromPath, useRecommendations, RecommendationsBlock dans le Global Search ; (3) i18n FR/EN recommendations.*, search.global.recommendations.* ; (4) OpenAPI paths/recommendations.yaml, components/recommendations.yaml.