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, 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)

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.