Suggestions

Produits et ressources

Retour à toutes les ressources

Résumé

Le modèle d'entreprise régissant la recherche a évolué et les développeurs exigent bien plus des moteurs existants. Ils créent des systèmes opérationnels capables de générer des suggestions contextuelles, de déclencher des flux de travail et d'influencer les environnements de production, tout en maîtrisant mal les conséquences potentielles de ces suggestions. Les modèles de langage peuvent suggérer une action suivante en fonction du contexte, mais ils ne permettent pas de déterminer les outils qu'un utilisateur est autorisé à utiliser, si une action proposée nécessite une vérification humaine, ni comment représenter le périmètre d'accès lors de la sélection d'un modèle d'exécution. La couche de modélisation seule ne suffit pas. Trois couches sont impliquées : le modèle de langage classe l'intention, la couche d'orchestration effectue le routage et applique les politiques, et la couche de récupération gère la génération des contraintes et des candidats en restreignant l'ensemble des options selon ces politiques, puis en classant les résultats restants. Aborder l'ensemble comme un simple problème de génération conduit à deux architectures inadaptées : des architectures rigides et peu performantes, ou des architectures souples et risquées. Aucune n'est acceptable. Il est essentiel de différencier la surface de décision de la couche d'exécution. La surface de décision est l'endroit où l'intention est classée, où les outils permettant de la satisfaire sont identifiés et où les alternatives basées sur ces outils sont évaluées. Algolia permet une récupération et une évaluation rapides et précises des options d'action possibles et de leurs contrats d'outils correspondants. La couche d'exécution est le point où un contrat déterministe est sélectionné et exécuté, soit par un appel API direct, soit par le biais du serveur MCP (Model Context Protocol Server). Tout raisonnement supplémentaire doit être effectué avant la couche d'exécution.

Trois exigences architecturales sont identifiées ici.

  • Un répertoire de capacités est nécessaire pour permettre une gouvernance rapide du protocole de contexte de modèle afin de fournir une méthode standard de communication entre le système et les applications, outils et bases de données externes.
  • Il est nécessaire que le Top 10 de l'OWASP pour les applications d'IA agentiques atténue les risques liés aux vecteurs de risque potentiels (par exemple, l'injection rapide, la mauvaise utilisation des outils), avant que l'exécution n'ait lieu pendant la couche de récupération plutôt qu'après l'exécution.
  • Les exigences en matière de gouvernance et d'intervention humaine décrites dans le cadre de gestion des risques liés à l'IA du NIST doivent refléter la fonctionnalité de la télémétrie de récupération et le classement des alternatives possibles fondé sur des politiques, et il ne peut exister de mandat de conformité distinct qui obligerait différentes équipes travaillant sur la même infrastructure partagée à développer chaque élément séparément.

La mauvaise gestion d'une couche de récupération devient flagrante lorsqu'elle tombe en panne sous une charge croissante : la latence de routage augmente et la couche de récupération n'est plus sur le chemin critique. Les utilisateurs abandonnent alors le copilote et créent leurs propres solutions de contournement non gérées. Tout système contourné par les utilisateurs est considéré comme non géré. Une « friction d'intention » réduite correspond simplement au temps nécessaire à un utilisateur pour exprimer son intention à un système et recevoir une réponse exploitable. La réduction de ce délai ne constitue pas un indicateur de performance. Elle reflète plutôt la différence entre l'environnement dans lequel la gouvernance peut être mise en œuvre et sa documentation. Comme indiqué dans ce document, chacune de ces décisions de conception (création de plans distincts ; utilisation de l'index des actions approuvées comme masque de capacité conformément aux principes du Zero Trust ; et création de la boucle de rétroaction de pertinence sécurisée) vise à garantir un environnement sans friction d'intention, en permanence et en conditions d'entreprise.

Algolia est l'un des plus grands moteurs de recherche hébergés au monde, avec plus de 1 750 milliards de requêtes annuelles pour plus de 17 000 clients dans 150 pays. Afin d'atteindre cette échelle sans latence, il rééquilibre en permanence ses structures de données pour garantir un index équilibré et une récupération rapide. Cet article décrit comment la couche de recherche et de classement d'Algolia alimente un routeur d'intention d'entreprise. La plateforme fournit le catalogue d'outils indexés, classe les candidats en fonction des contraintes de politiques et reste suffisamment rapide pour que la couche d'orchestration puisse transformer le langage naturel en actions sécurisées et auditables, sans quitter le chemin critique.

L'évolution de l'interface de recherche

Pendant des décennies, la recherche s'est résumée à une liste de liens à consulter. Ce modèle convient aux internautes lambda, mais les développeurs d'entreprise ont aujourd'hui besoin de bien plus qu'une simple liste de liens à lire pour accomplir leurs tâches. La recherche doit désormais orienter vers le travail plutôt que vers l'information. Un résultat n'est plus une page, mais un ensemble d'actions : une action optimale, classée selon sa facilité d'exécution. Ces actions, synchronisées avec des serveurs MCP distants, sont conçues pour répondre aux besoins émergents des assistants utilisateurs. La rapidité de recherche et de classement demeure la compétence essentielle ; ce qui a changé, c'est le contenu des résultats.

En pratique, Algolia alimente la couche de récupération et de classement dont dépend le routeur « intention → étape suivante ». Les copilotes de flux de travail doivent identifier à la fois l'intention de l'utilisateur et la ou les étapes suivantes appropriées pour la satisfaire. Pour ce faire, Algolia fournit à la surface de décision quatre éléments à récupérer et à classer. Le premier est le « manuel », c'est-à-dire les articles d'aide pertinents, les manuels d'exploitation et les procédures opérationnelles standard (POS) ; il s'agit de données en lecture seule. Le deuxième est la « carte » appropriée, ou les séquences d'étapes prédéfinies pour un flux de travail complexe. Vient ensuite le « sondage », ou les détails permettant de lever toute ambiguïté afin de garantir la validité des données avant que le système ne poursuive. Enfin, le « déclencheur », c'est-à-dire l'outil ou l'action suggérée appropriée, comme « redémarrer le serveur » ou « mettre à l'échelle le cluster ».

Ces éléments présentent différents risques associés. Un manuel d'exploitation se situe généralement dans la partie inférieure du spectre des risques, car l'utilisateur final détermine simplement ses propres actions. Un modèle de flux de travail, bien que moins risqué qu'un schéma de formulaire, comporte tout de même un certain risque puisqu'il décrit une séquence d'étapes possible que l'utilisateur doit approuver avant toute modification. Un schéma de formulaire présente un risque du fait de sa capacité à collecter les mêmes entrées nécessaires à l'exécution d'une action, offrant ainsi le chemin le plus direct vers cette exécution du point de vue de l'utilisateur final. Enfin, un contrat d'outil présente le risque le plus élevé car il représente le type d'impact potentiel le plus important au sein de l'index. Les moteurs de recherche traditionnels ne peuvent pas gérer cela car ils sont peu performants en multitâche. Un système devrait d'abord déterminer la pertinence, puis vérifier si l'utilisateur dispose des autorisations nécessaires, et enfin évaluer si l'action est trop risquée. Ce processus est fastidieux. Algolia propose une approche différente. Sa technologie propriétaire NeuralSearch combine le traitement du langage naturel vectoriel et la correspondance de mots-clés dans une API unique. Ainsi, au lieu de filtrages séquentiels, l'intention sémantique et les métadonnées pré-encodées sont évaluées en parallèle. Le périmètre d'autorisation, le niveau de risque et les contraintes environnementales sont encodés dans l'index lors de la configuration, et non interprétés lors de la requête. Le résultat n'est pas une liste de liens, mais un contrat d'outil strict et lisible par machine : l'outil précis à utiliser, les arguments autorisés et les contraintes d'exécution déjà associées. C'est ce qui transforme le champ de recherche, d'un outil de suggestion d'idées, en une entrée structurée pour un travail sûr et autorisé. Si une application privilégie un contrat d'outil à un manuel d'exploitation, alors que l'intention initiale de l'utilisateur était purement informative, l'application a déjà pris une décision aux conséquences potentiellement graves lors de la récupération. Par conséquent, le classement basé sur des politiques est la principale contrainte qui régit la première action de l'application. Deux problèmes structurels en découlent : les quatre types de données doivent être récupérés et classés correctement, et les contraintes de politique doivent être évaluées lors de la requête. La recherche conventionnelle peine ici, car les signaux pertinents dépassent le cadre de l'intention sémantique. L’étendue des autorisations, le niveau de risque et les conditions préalables d’exécution doivent tous être résolus en une seule étape.

{
  "signal_id": "sig_7f21c-3a09",
  "timestamp": "2026-03-09T14:32:11Z",
  "session_context": {
    "user_id": "usr_88421",
    "role": "platform_engineer",
    "department": "infrastructure",
    "permission_scope": [
      "staging",
      "read",
      "deploy"
    ]
  },
  "query": {
    "raw_text": "provision staging environment",
    "normalized": "provision staging environment",
    "detected_language": "en"
  },
  "intent_classification": {
    "category": "infrastructure_action",
    "confidence": 0.96,
    "payload_type": "mcp_tool_call"
  },
  "routing_constraints": {
    "environment": "staging",
    "risk_ceiling": "high",
    "requires_form_validation": true
  }
}

Cette conception de schéma permet de générer un signal d'intention valide lors de la planification d'itinéraire. La couche de récupération exploite tous les champs pour identifier les différentes manières d'accomplir les tâches. De nombreuses implémentations de copilote sont peu performantes car elles tentent de deviner les besoins de l'utilisateur à partir de données incomplètes ou non organisées. Il en résulte un décalage important entre ce que l'utilisateur saisit et les actions sécurisées correspondantes. Pour combler ce fossé, ce modèle indexe les entités au niveau de la tâche (définitions d'outils, étapes de flux de travail, schémas de formulaires) plutôt que les documents. Algolia n'indexe plus les pages, mais les éléments qui définissent une tâche spécifique (définitions d'outils, étapes de flux de travail, exigences des formulaires). Le système étant construit sur une infrastructure d'entreprise à partage continu (restructuration de son organisation interne), il trouvera un formulaire adapté à un environnement donné aussi rapidement qu'il aurait trouvé un mot dans un document. Bien que la technologie reste la même, les résultats obtenus constituent désormais les fondements d'un travail concret.

Modèle de système et limites de propriété

Pour comprendre le flux de travail et les actions disponibles pour l'utilisateur, un copilote doit répondre à deux questions principales : la classification (que souhaite accomplir l'utilisateur ?) et le routage (quelle action l'utilisateur doit-il effectuer ensuite ?). Le plus souvent, ces deux questions sont résolues par le même modèle de langage. Les modèles de langage sont capables de classifier avec précision l'intention de l'utilisateur à partir d'entrées en langage naturel non structurées ; cependant, ils ne peuvent pas déterminer les outils internes existants, ceux que chaque utilisateur est autorisé à invoquer, ni les chemins d'exécution présentant un niveau de risque acceptable. Ainsi, répondre à la seconde question (routage) crée un problème de recherche basé sur une source de vérité contrôlée. La principale différence entre une interface utilisateur de recherche et un copilote de flux de travail réside dans le fait que la sortie de ce dernier doit être exploitable par les machines. Par conséquent, la couche d'exécution du copilote doit produire exactement les mêmes résultats à chaque proposition d'action, au lieu de générer différents documents contenant les mêmes informations. En effet, pour orchestrer en toute sécurité l'utilisation de plusieurs outils, le système doit être lié par un contrat d'outils déterministe, comprenant quatre éléments principaux :

  • La charge utile doit inclure le nom exact de l'outil à invoquer.
  • Le contrat doit fournir des descriptions détaillées des arguments structurés nécessaires à l'exécution de l'action en toute sécurité.
  • Le contrat doit détailler les contraintes et les conditions préalables à l'utilisation de l'outil (autorisations, variables d'environnement, etc.).
  • Le contrat doit détailler le résultat attendu de l'opération

Cette approche méthodique de la structuration du contrat d'outil déterministe est similaire aux méthodes actuelles d'appel d'outils au sein d'architectures spécifiques. Ces architectures actuelles invoquent les outils via des schémas explicites. Le modèle analyse ces schémas afin de déterminer comment invoquer ou générer les appels nécessaires. Le système ne pouvant générer que des appels basés sur des schémas prédéterminés et ne pouvant générer dynamiquement de code arbitraire, le développeur peut clairement séparer les responsabilités liées au raisonnement en langage naturel de celles liées à l'exécution du système.

{
  "objectID": "wf_provision_staging_001",
  "intent_category": "infrastructure_action",
  "proposal_type": "tool_call",
  "ranking_score": 0.98,
  "action_metadata": {
    "tool_name": "terraform_deploy",
    "structured_arguments": {
      "env_name": "^staging-[a-z0-9]+$",
      "region": "us-east-1|us-west-2"
    }
  },
  "execution_constraints": {
    "requires_authentication": true,
    "allowed_roles": [
      "platform_engineer",
      "devops"
    ]
  },
  "expected_outcomes": {
    "status": "environment_created",
    "audit_trail": "enabled"
  }
}

Dans un environnement d'entreprise, la couche de recherche de ce modèle système doit être extrêmement rapide. Algolia a été conçu pour répondre à cette exigence. Grâce à la réorganisation et au repartitionnement des structures de données, la plateforme garantit un index toujours équilibré et optimisé pour une recherche rapide. Le copilote peut ainsi exécuter simultanément plusieurs aspects de NeuralSearch, tels que la correspondance sémantique, la correspondance par mots-clés et les filtres de facettes stricts. Le plan d'exécution dispose alors des informations nécessaires pour lancer l'appel d'outil sans latence pour l'utilisateur.

Contrats d'outils déterministes : transformer l'intention en propositions sûres et exécutables

Lors de la création d'un copilote de flux de travail, le choix le plus important est de définir clairement la distinction entre la couche qui détermine l'intention de l'utilisateur et celle qui exécute les commandes. Sans cette distinction, les couches NLP et d'exécution se confondent ; en cas d'erreur système, il sera impossible de déboguer efficacement, d'intervenir sur une zone précise ou de limiter l'activité de la couche NLP tout en laissant la couche d'exécution fonctionner sans entrave.

Ce concept repose sur la séparation des plans. Le plan de contrôle, qui englobe le modèle de langage et la couche d'orchestration, détermine l'intention de l'utilisateur et génère l'ordre de travail. Le plan de données, quant à lui, exécute les actions proposées via l'invocation d'outils, les appels d'API et les modifications d'état dans les systèmes en aval.

Chaque plan remplit une seule fonction. Le plan de contrôle n'exécute pas les tâches, le plan de données ne les détermine pas.

La mise en place de cette barrière est essentielle pour réduire les divers risques inhérents aux systèmes autonomes utilisant des outils, comme détaillé dans le Top 10 de l'OWASP pour les applications d'IA agentique. Plus précisément, cette barrière réduit les risques liés à une mauvaise utilisation des outils par les systèmes autonomes. Si la conception d'un système ne prévoit pas de mécanisme empêchant les invites ambiguës ou altérées d'atteindre la couche d'exécution, une action nécessitant des privilèges élevés pourrait potentiellement se produire sans contrôle suffisant. Il s'agit là d'un exemple de défaillance fondamentale du plan de contrôle.

Un autre type de défaillance repose sur l'injection de vulnérabilités, comme indiqué dans le Top 10 OWASP pour les applications LLM. Un attaquant peut amener un système à exécuter une action non prévue en le redirigeant via des entrées que celui-ci considère comme légitimes. Si le plan de contrôle envoie du langage naturel brut à la couche d'invocation d'outils sans le soumettre au préalable à une étape de récupération contrôlée, la surface d'attaque s'étend à l'ensemble des entrées. Ces deux types de défaillance utilisent exactement la même solution structurelle. Le plan de contrôle doit générer une proposition déterministe et circonscrite avant son exécution dans la couche d'exécution. L'appel d'outil ne doit pas être généré librement ; il doit être récupéré à partir d'un index d'actions approuvées.

Se baser uniquement sur la similarité vectorielle est un critère inadéquat pour évaluer les conséquences d'actions. Des requêtes telles que « supprimer tous les enregistrements » et « nettoyer les données obsolètes » peuvent se situer dans des zones similaires au sein d'un espace vectoriel ; se fier uniquement à la proximité vectorielle conduit à une inadéquation des critères d'évaluation. Déterminer si un outil est approprié pour un utilisateur donné, à un moment précis et avec des autorisations spécifiques exige un classement rigoureux fondé sur des politiques. La similarité ne répond pas à cette question. En revanche, un contrat d'utilisation structuré de l'outil, si.

Un contrat d'outil déterministe limite les risques liés à l'exécution de l'outil. Ce contrat inclut le nom de l'outil, identifiant ainsi la fonction invoquée, et des arguments structurés validés avant l'exécution. Il définit également des contraintes d'exécution, intégrant les exigences d'autorisation et les mécanismes d'authentification multifacteurs, ainsi que les résultats attendus. Ces contraintes correspondent directement aux modèles d'appel de fonctions et à la spécification du protocole MCP (Model Context Protocol), où les outils sont décrits à l'aide de schémas JSON et le système effectue sa sélection parmi un ensemble contrôlé. La couche de routage garantit que le modèle génératif ne reçoit que les schémas des outils auxquels le système est explicitement autorisé à accéder.

La fonction ci-dessous illustre le fonctionnement pratique de cette limite. La requête de recherche est exécutée sur un index géré, filtré par statut de production, rôle utilisateur et environnement. Elle renvoie une proposition d'action typée : un contrat récupéré auquel sont déjà associées ses métadonnées de gouvernance.

/**
 * Intent Routing Implementation
 * Logic for selecting the optimal execution tool based on ranked hits.
 * Maps intent to an MCP-compliant action proposal.
 */
interface ActionProposal {
  action_id: string;
  runtime_directive: "mcp_tool_call" | "form_render";
  tool_definition: object;
  suggested_parameters: object;
  governance_metadata: {
    nist_tier: string;
    requires_mfa: boolean;
  };
}

async function routeIntentToTool(userQuery: string, userContext: any): Promise<ActionProposal | null> {
  // Execute a search against the actionable registry
  const { hits } = await actionIndex.search(userQuery, {
    filters: 'status:production AND type:workflow_template',
    facetFilters: [
      `authorized_roles:${userContext.role}`,
      `environment:${userContext.env}`
    ],
    hitsPerPage: 1
  });

  if (hits.length === 0) {
    // Fallback to traditional content if no actionable intent is matched
    return null;
  }

  const selectedAction = hits[0];

  /**
   * Return a deterministic tool contract.
   * The payload follows the JSON-RPC 2.0 pattern used by MCP servers.
   */
  return {
    action_id: selectedAction.objectID,
    runtime_directive: "mcp_tool_call",
    tool_definition: selectedAction.mcp_schema,
    suggested_parameters: extractParameters(userQuery, selectedAction.parameter_map),
    governance_metadata: {
      nist_tier: selectedAction.risk_tier,
      requires_mfa: selectedAction.mfa_requirement === "true"
    }
  };
}

L'autorisation doit être requise lors de la récupération des données de l'outil. Comme aucun outil n'est présent dans les données récupérées, il est impossible de l'exécuter. Cette propriété structurelle est indépendante des invites affichées et de leur saisie, car ces dernières pourraient être utilisées pour contourner cette protection. Algolia utilise un classement basé sur des règles (les outils en lecture seule sont classés avant les outils en écriture, sauf indication contraire), et tous les outils non autorisés sont définitivement supprimés des résultats de recherche avant d'être affichés.

Cette politique est intégrée à la configuration d'index suivante. Les attributs de classement personnalisés prennent en charge une utilisation intensive et une action sécurisée. Les filtres de facettes « Rôle », « Type d'environnement » et « Département autorisé » sont appliqués lors de la requête et non après l'affichage des résultats.

/**
 * Intent-Based Ranking Configuration
 * Aligned with the separation of planes to prioritize safety and usage.
 */
{
  "searchableAttributes": [
    "intent_keywords",
    "action_name",
    "description"
  ],
  "customRanking": [
    "desc(usage_count)",
    "desc(safety_certification_score)",
    "asc(risk_latency)",
    "desc(revenue_weight)"
  ],
  "attributesForFaceting": [
    "filterOnly(user_role)",
    "filterOnly(environment_type)",
    "filterOnly(authorized_department)"
  ],
  "ranking": [
    "typo",
    "geo",
    "words",
    "filters",
    "proximity",
    "attribute",
    "exact",
    "custom"
  ]
}

Le cadre de gestion des risques liés à l'IA du NIST décrit les attentes en matière de gouvernance et de gestion des risques liés à l'IA. Ceci est réalisé grâce au mécanisme d'indexation lui-même (c'est-à-dire l'index de recherche), et non par des documents de politique statiques. La tokenisation des mots pour les recherches, ainsi que leur catégorisation (par exemple, adjectif/nom) en fonction de leur pertinence par rapport à la question de l'utilisateur (par exemple, « créer un environnement de test » et « fournir un environnement de préproduction »), aboutit à la même réponse potentielle, car le mécanisme de recherche prend en compte l'intention sémantique plutôt qu'une correspondance exacte avec les mots clés. L'ensemble d'outils utilisé pour encadrer l'utilisation de l'outil n'est pas une liste qu'un auditeur examinera a posteriori dans le cadre d'un audit. Il s'agit plutôt des limites strictes dans lesquelles le système fonctionne, une requête à la fois, en production.

MCP : son rôle et son importance

Avant MCP, il était nécessaire de créer 1 000 intégrations personnalisées pour connecter dix applications à une centaine d'outils. Le protocole MCP a réduit ce nombre de N×M à N+M en établissant la couche de connexion sous la forme de JSON-RPC 2.0. MCP comprend trois domaines de définition clés :

  • Comment les outils MCP sont définis à l'aide de schémas JSON avec des définitions de paramètres typées
  • Comment les outils MCP sont découverts grâce à l'utilisation des points de terminaison du serveur MCP
  • Comment les outils MCP sont invoqués (appelés) à l'aide d'un format standardisé pour les arguments valides

MCP ne définit pas l'outil à appeler ; celui-ci est déterminé par le modèle. La création de la norme a immédiatement nécessité la mise en place rapide d'un répertoire de capacités gouverné afin de gérer un grand nombre de nouvelles connexions.

Outre la définition de la description et de l'appel des outils MCP, la spécification MCP reconnaît que leur invocation équivaut à une exécution de code arbitraire. Des mesures de sécurité appropriées doivent être prises ; MCP exige que les hôtes demandent le consentement explicite de l'utilisateur avant d'invoquer (d'appeler) un outil. L'identification des invocations non réglementées comme une menace pour la sécurité impose la mise en place d'un répertoire de capacités réglementé. À mesure qu'une organisation développe son catalogue d'outils internes, la recherche d'outils devient un problème de recherche. La quantité d'informations que les modèles de langage peuvent stocker dans leur fenêtre de contexte est limitée. Ils ne peuvent pas stocker simultanément des centaines de définitions de serveurs ou des milliers de schémas d'outils. Cette limitation est architecturale : une fenêtre de contexte est une ressource finie. Les jetons utilisés pour les descriptions de schémas d'outils ne peuvent pas être utilisés comme jetons pour le contexte utilisateur, l'historique des conversations et le raisonnement sur les tâches. Par exemple, si une entreprise possède 200 outils internes et que la description moyenne d'un schéma d'outil utilise 500 jetons, la limite de 100 000 jetons d'une fenêtre de contexte serait atteinte avant même qu'un utilisateur n'ait saisi une seule requête. La suppression de la liste des outils entraînerait une décision de sécurité, car le choix des outils à supprimer et à conserver ne serait plus fondé sur une politique de sécurité. Un répertoire de capacités permet de résoudre ce problème en supprimant toutes les définitions d'outils de la fenêtre contextuelle, de sorte que seules les descriptions de schéma d'outils pertinentes pour l'intention actuelle de l'utilisateur et ses autorisations soient affichées.

Algolia alimente le répertoire de capacités, indexant les définitions de serveurs MCP, les schémas d'outils, les contraintes d'autorisation et les métadonnées de sécurité. Capable de traiter des enregistrements JSON natifs indépendants du schéma, il peut ingérer directement les définitions de serveurs MCP. Lorsqu'une entreprise ajoute un nouvel outil interne et expose un point de terminaison MCP pour cet outil, le schéma JSON de celui-ci est soumis à l'index Algolia via un appel API standard. Ainsi, le répertoire de capacités reste toujours synchronisé avec l'état actuel de l'infrastructure de l'entreprise.

Le moteur de recherche effectue des requêtes dynamiques dans l'annuaire avec une latence interactive. Le modèle de langage devant interrompre sa boucle d'exécution pour interroger l'annuaire, récupérer les schémas nécessaires et construire l'appel d'outil, tout délai au niveau de la couche de routage est répercuté directement sur l'utilisateur final. Algolia répond aux requêtes dynamiques dans l'annuaire à intervalles de quelques millisecondes, permettant ainsi au copilote de maintenir une réactivité optimale, même lors de la mise à jour dynamique des outils MCP. Grâce à la nature dynamique du registre, il n'est pas nécessaire de redéployer l'interface du modèle de langage à chaque ajout d'outils.

Voici la requête de registre qui illustre comment la découverte des outils MCP est rendue gérable. La couche de routage renvoie le schéma JSON-RPC 2.0 exact requis par le plan d'exécution, sans que le modèle ait à interpréter la structure de chaque outil.

/**
 * MCP Tool Discovery Implementation
 * Retrieves governed tool definitions from the action registry.
 */
interface McpToolHit {
  objectID: string;
  name: string;
  description: string;
  inputSchema: object;
  mcp_endpoint: string;
  protocol_version: string;
}

interface McpToolCall {
  method: string;
  params: {
    name: string;
    arguments: object;
    _metadata: object;
  };
}

async function getMcpToolDefinition(searchQuery: string): Promise<McpToolCall | null> {
  const { hits } = await toolRegistry.search(searchQuery, {
    filters: "protocol:mcp AND status:stable",
    attributesToRetrieve: [
      "name",
      "description",
      "inputSchema",
      "mcp_endpoint",
      "protocol_version"
    ],
    hitsPerPage: 5
  });

  if (hits.length === 0) {
    return null;
  }

  const selectedTool = hits[0] as McpToolHit;

  return {
    jsonrpc: "2.0",
    id: `${Date.now()}-${Math.random()}`,
    method: "tools/call",
    params: {
      name: selectedTool.name,
      arguments: {},
      _metadata: {
        source: "Algolia Action Registry",
        endpoint: selectedTool.mcp_endpoint,
        version: selectedTool.protocol_version
      }
    }
  };

La structure de cette échelle est maintenue par la redistribution des données de manière à optimiser les structures de données (tout en préservant l'équilibre) pour une recherche et une extraction rapides. Cette même infrastructure sert de couche d'extraction et de classement au sein de l'architecture multi-agents : elle fournit les contrats d'outils, classe les candidats selon les contraintes de politique et génère la piste d'audit requise par la gouvernance. La couche d'orchestration située au-dessus gère les décisions de routage et leur application ; Algolia reste sur le chemin critique grâce à sa rapidité.

Sécurisation de la surface d'exécution des actions

Lorsqu'un système d'entreprise commence à exécuter des actions au lieu de se contenter de fournir de la documentation, l'entreprise s'expose à un tout nouveau type de risque. Si le Top 10 de l'OWASP pour les applications d'IA agentiques met en lumière des défaillances liées à ces applications (ASI01 : Détournement d'objectif de l'agent et ASI02 : Utilisation abusive d'outils), il s'agissait d'incidents réels survenus en production, et non de vulnérabilités hypothétiques. Par exemple, une version agentique de l'Assistant d'IA d'entreprise d'Amazon, utilisé par plus d'un million de développeurs, pouvait supprimer des ressources AWS en appelant les outils de l'interface de ligne de commande AWS (AWS CLI) via cette interface. Autre exemple : « EchoLeak », qui exploitait une invite cachée jusque-là inconnue pour transformer un copilote en un moteur d'exfiltration silencieux. Ces deux incidents n'étaient pas dus à des problèmes de modèle de langage ; il s'agissait de problèmes d'architecture, car les systèmes sont autorisés à agir tant qu'ils ne sont pas limités dans l'ensemble des outils à leur disposition.

L'implémentation de filtres a posteriori sur des systèmes fonctionnant selon un modèle multi-agents constituerait également une faille de conception structurelle. Étant donné que les filtres a posteriori ne peuvent être appliqués qu'une fois que le système a déterminé ses actions souhaitées, le moteur de raisonnement est déjà initialisé. Cette faille de sécurité est ciblée par l'OWASP LLM01, l'injection d'invites, via l'insertion d'invites soigneusement conçues permettant aux attaquants de contourner les instructions de sécurité. Puisque ces instructions sont intégrées à l'invite elle-même, il existera toujours des méthodes permettant aux attaquants de contourner les garde-fous. Ces garde-fous ne doivent jamais être implémentés au niveau de l'invite, mais au niveau de la découverte.

Le processus d'intégration utilise un index d'« actions approuvées » comme masque de capacités de confiance zéro pour le système ; cet index définit les capacités exactes du système. Par conséquent, au lieu d'exclure les actions non approuvées (par exemple, la recherche sémantique) avant leur exécution, Algolia applique des facettes pour supprimer les résultats de ces recherches au moment de l'exécution de la requête.

De plus, le noyau C++ exclut les outils de l'espace vectoriel lorsqu'un utilisateur ne dispose pas des rôles authentifiés requis pour les utiliser. L'outil ne faisant jamais partie des résultats de la phase de récupération, le modèle ne peut pas l'exécuter. Cette contrainte architecturale répond également spécifiquement au problème LLM06 de l'OWASP, « Excessive Agency », dès la conception, en réduisant le nombre d'outils disponibles avant l'accès au plan d'exécution.

De plus, dans un système correctement conçu, un modèle compromis ne peut pas appeler un outil qui n'a pas été explicitement récupéré par la couche de routage, car le contrôle d'exécution s'effectue au niveau des API backend et de la couche IAM, et non au niveau du modèle lui-même. Outre la sécurité structurelle, qui constitue un facteur de classement primordial, la sécurité doit également être un signal de classement principal. Par défaut, les outils en lecture seule sont mieux classés que les outils en écriture. L'élévation de privilèges est conditionnée par une intention explicite et des permissions correspondantes, et non par la fiabilité de la requête de l'utilisateur. La couche de routage y parvient grâce à des attributs de classement personnalisés qui attribuent une priorité mathématique au score de certification de sécurité et au score de classification des risques, afin que le candidat le plus sûr pour un flux de travail soit affiché en premier.

Puisqu'Algolia peut gérer nativement la logique de départage au sein de son moteur de pertinence, le copilote ne subit pas la même pénalité de latence que celle rencontrée par d'autres moteurs d'application de politiques externes.

La structure de gouvernance basée sur l'index remplit également les trois fonctions essentielles de « gouvernance, cartographie, mesure et gestion » définies par le profil GenAI du NIST, qui étend le cadre de gestion des risques liés à l'IA pour les déploiements d'IA générative. Par conséquent, l'index de recherche lui-même, comme illustré dans l'exemple précédent, satisfait ces besoins sans recourir à des documents de politique statiques ni à d'autres ressources similaires. De plus, l'index inclut tous les attributs de sécurité précis (tels que les niveaux de risque) et les préconditions d'exécution de chaque outil qui y est défini, garantissant ainsi que la découverte des outils sera toujours encadrée. En conséquence, la piste d'audit ainsi générée servira à la fois de document de conformité et d'enregistrement opérationnel pour permettre une gestion continue des risques.

Vous trouverez ci-dessous un schéma décrivant la structure des attributs de sécurité inclus dans l'index.

{
  "objectID": "action_refund_process_001",
  "name": "Process Customer Refund",
  "risk_metadata": {
    "nist_tier": "critical",
    "owasp_impact": "high_financial_risk",
    "auth_requirement": "mfa_verified",
    "human_in_loop": true,
    "risk_score": 0.92
  },
  "governance": {
    "last_audit_date": "2026-02-15",
    "policy_version": "v2.1",
    "owner_group": "finance_ops",
    "certification": "compliance_verified"
  },
  "execution_payload": {
    "mcp_endpoint": "https://api.internal.finance/v1/mcp",
    "protocol": "2025-11-25",
    "schema_hash": "sha256:7f83b1..."
  }
}

Interface utilisateur générative : les formulaires comme passerelle sécurisée

Un système qui accepte du langage naturel non vérifié et le transmet à l'infrastructure d'entreprise sans étape de validation structurée constitue un risque pour la sécurité plutôt qu'un agent déterministe. Le processus d'inférence effectuera une étape de compilation, l'interface utilisateur générative convertissant le langage naturel non fiable en une entrée typée valide à soumettre au plan d'exécution de l'outil. La conversion d'une entrée non fiable en une sortie de contrat fiable est une propriété de sécurité courante (et non une simple amélioration de l'expérience utilisateur).

Les copilotes de flux de travail ont besoin d'interfaces structurées pour prendre en charge trois cas d'utilisation différents :

  • Ils lèveront les ambiguïtés d'une manière que le LLM ne peut pas présumer. Par exemple, ils aideront à trouver le nom exact des environnements et l'étendue des autorisations demandées.
  • Ils joueront le rôle d’« humain dans la boucle » pour confirmer les requêtes destructives ou à fort impact avant leur exécution. Cela permettra aux humains d’exercer leur pouvoir d’action (intervenir si nécessaire) conformément au cadre de gestion des risques liés à l’IA du NIST.
  • Ils valideront la conformité en vérifiant les champs obligatoires et la plage de valeurs valides de la charge utile par rapport à un schéma avant que le plan d'exécution ne reçoive la charge utile.

Le moteur de recherche d'Algolia compare la requête de l'utilisateur (paramètres du schéma) au catalogue d'outils. Simultanément, les algorithmes de recherche neuronale et de correspondance sémantique associent la requête à la catégorie de contrat d'outil correspondante et extraient les entités pertinentes. Le système n'effectue pas d'inférence de haut niveau sur les entités extraites, sauf si elles répondent aux exigences du contrat d'outil. En revanche, le moteur de classement dynamique ajuste la pondération de chaque élément du formulaire afin de privilégier les variables manquantes. Par exemple, si une demande de déploiement est effectuée sans spécifier de région cible, la couche de recherche fournit un schéma de formulaire dynamique plaçant le champ de sélection de la région en haut du formulaire. Ainsi, grâce à une logique déterministe, les données manquantes sont identifiées.

L'architecture fournit au plan d'exécution la charge utile compilée complète nécessaire à l'exécution sécurisée de la tâche en une seule récupération.

Vous trouverez ci-dessous un exemple de schéma pour un formulaire dynamique pouvant être utilisé pour traiter une demande de provisionnement. Ce schéma sert de contrat de désambiguïsation et de validation et est renvoyé sous forme de résultat de recherche classé, et non comme un modèle statique.

{
  "objectID": "form_env_provision_001",
  "intent_match": "provision environment",
  "form_type": "disambiguation_and_validation",
  "fields": [
    {
      "id": "env_name",
      "label": "Environment name",
      "type": "string",
      "required": true,
      "validation": "^staging-[a-z0-9]+$",
      "ranked_position": 1,
      "disambiguation_purpose": "Prevent collision with existing environments"
    },
    {
      "id": "region",
      "label": "Deployment region",
      "type": "enum",
      "options": ["us-east-1", "us-west-2", "eu-west-1"],
      "required": true,
      "ranked_position": 2
    },
    {
      "id": "instance_type",
      "label": "Instance type",
      "type": "enum",
      "options": ["t3.medium", "t3.large", "m5.xlarge"],
      "required": true,
      "ranked_position": 3
    }
  ],
  "step_up_authorization": {
    "required": true,
    "trigger": "environment_type:production",
    "method": "mfa",
    "confirmation_prompt": "You are provisioning a production environment. Confirm to proceed.",
    "nist_human_agency": true
  },
  "on_complete": {
    "runtime_directive": "mcp_tool_call",
    "tool_name": "terraform_deploy",
    "pass_fields": ["env_name", "region", "instance_type"]
  }
}

Le bloc `step_up_authorization` du schéma concrétise les exigences d'intervention humaine du NIST AI RMF. Le profil GenAI du framework étend explicitement cette exigence aux déploiements génératifs, en précisant que les actions ayant des conséquences nécessitent une confirmation humaine avant leur exécution. Cette demande de confirmation n'est pas un simple détail UX ; il s'agit du mécanisme par lequel le système transfère la responsabilité de la couche de routage automatisée à l'opérateur humain. Le système d'authentification multifacteur (MFA) encode ce transfert sous forme d'événement cryptographique dans le journal d'audit. Les données saisies par l'utilisateur doivent être validées afin de vérifier que chaque champ d'un formulaire est rempli avant toute action. Du point de vue de l'expérience utilisateur (UX) et de la sécurité, il est essentiel de vérifier que les utilisateurs ont bien rempli tous les champs obligatoires d'un formulaire avant de soumettre une requête au système. Afficher la liste des champs manquants à l'utilisateur après qu'il a rempli le formulaire et fourni les données nécessaires est une méthode de validation, mais pas la plus optimale. Une fois que l'utilisateur a rempli les champs obligatoires du formulaire et saisi les informations nécessaires pour permettre au système d'exécuter l'action demandée, l'ARL transfère ses responsabilités au HO.

Le transfert de responsabilité est consigné dans le journal d'audit comme un événement spécifique déclenché par le système d'authentification multifacteur (MFA). Lorsqu'une équipe de sécurité enquête sur un incident, l'autorisation de l'utilisateur est enregistrée indépendamment du contexte des autres événements de la chronologie. Il s'agit d'un fait précis, horodaté.

Comme mentionné précédemment, l'exemple précédent satisfait également au critère OWASP LLM06 (Excès d'influence) en limitant les actions du système à celles voulues par l'utilisateur et justifiées par la situation. Cette limitation est obtenue en définissant le modèle avec un nombre restreint de paramètres grâce à un outil basé sur un schéma JSON, en appelant les fonctions conformément à la spécification d'appel de fonctions d'OpenAI et au protocole MCP. Bien que le schéma limite la capacité du système à effectuer une inférence en langage naturel non contrainte pour le compléter, la couche de récupération de formulaires pallie cette limitation.

En ne présentant que les champs explicitement demandés par le contrat de l'outil et en imposant une validation typée des données d'entrée par rapport aux valeurs autorisées avant d'autoriser la charge utile à atteindre la couche d'exécution, l'architecture garantit que le modèle ne peut pas étendre son propre périmètre en identifiant des paramètres plausibles mais non approuvés pour l'opération.

Outre le risque lié à une intention trop affirmée, il en existe un autre, moins évident, que la couche formulaire peut gérer : l’intention partielle. Un utilisateur qui saisit « déployer en production » a clairement indiqué vouloir déployer une application ; cependant, il a omis plusieurs paramètres dans sa requête, paramètres qui auraient précisé le mode de déploiement (environnement, région, etc.). Si le système devait déduire les valeurs manquantes et déployer l’application, il aurait automatiquement évalué un risque sans l’autorisation de l’utilisateur. Le processus de levée d’ambiguïté considère l’incomplétude comme un obstacle insurmontable, et non comme une opportunité d’interprétation.

Lorsque le moteur de récupération détecte une intention incomplète, il fournit une liste hiérarchisée des définitions de champs pour le schéma du formulaire. L'utilisateur saisit alors les informations complémentaires nécessaires pour compléter la requête. Le système déploie ensuite l'application. L'écart entre les données communiquées et les données attendues est ainsi entièrement éliminé au niveau de l'infrastructure.

Le modèle de validation décrit ci-dessus est conforme aux recommandations de la Cloud Native Computing Foundation concernant l'orchestration des flux de travail. Cette organisation considère que l'utilisation de limites de tâches explicites et de validations humaines est une caractéristique architecturale des systèmes distribués fiables, et non une simple mesure de sécurité optionnelle. Un formulaire n'est pas une solution de repli lorsque le modèle est incertain de l'intention de l'utilisateur ; il constitue l'interface intentionnelle entre la compréhension probabiliste du langage et l'exécution déterministe de l'infrastructure, et doit être intégré au chemin critique de toutes les actions conséquentes proposées par le copilote.

Exécution contrainte par schéma : la couche de validation des formulaires

Le conflit entre la génération probabiliste d'un modèle de langage (ML) et le fonctionnement déterministe de l'infrastructure d'entreprise peut être résolu par la couche de recherche (qui joue le rôle d'un point d'entrée) définissant une frontière typée entre l'utilisateur et l'infrastructure. Autrement dit, la couche de recherche n'autorise pas le ML à générer directement un appel d'outil, mais récupère un schéma de formulaire à partir du point d'entrée. Le ML est ensuite chargé de faire correspondre l'intention de l'utilisateur, exprimée en langage naturel, aux champs prédéfinis du schéma récupéré. Ainsi, par contrainte architecturale, le modèle peut être utilisé comme extracteur de données structurées (c'est-à-dire en associant le langage naturel à des éléments de données structurées) et non comme un modèle génératif.

Afin de prévenir les hallucinations de paramètres inhérentes à tous les modèles de langage, cette contrainte architecturale empêche la création de régions de déploiement fictives et d'identifiants de base de données malformés, etc. Le schéma récupéré contenant des informations sur les valeurs valides, les types de données requis et les modèles autorisés, le modèle ne peut générer ce type d'erreurs. Si le modèle reçoit une entrée dont le mappage avec le schéma récupéré est incomplet, il signale l'inadéquation de l'intention et déclenche un processus de désambiguïsation. La possibilité de suspendre la collecte de données structurées supplémentaires est un élément de conception permettant de gérer le langage naturel insuffisamment spécifié.

En contraignant le gestionnaire de langage à associer les sorties à un schéma déterministe avant leur transfert vers l'exécution, le système réduit considérablement les vulnérabilités des agents à la limite d'exécution. Plus précisément, il diminue les risques de détournement d'objectifs d'agents et d'utilisation abusive d'outils, tels que définis par l'OWASP. Les serveurs d'indexation d'Algolia constituent la ressource unique et faisant autorité permettant de déterminer les actions autorisées pour chaque élément de la charge utile de recherche. Outre sa conception permettant de stocker le schéma sous forme de documents JSON fortement typés, le réseau de recherche distribué d'Algolia offre une prise en charge native de cette fonctionnalité. Grâce à la couche de traitement du langage naturel, le moteur principal détermine l'intention d'exécution en moins de 100 millisecondes après réception des définitions de schéma exactes issues de la charge utile d'indexation (qui inclut le schéma), éliminant ainsi le besoin d'une base de données secondaire pour récupérer le schéma. Les résultats de recherche n'affichent que les versions d'outils autorisées ; les versions ne disposant pas de l'autorisation requise sont exclues.

La couche de récupération renvoie des résultats en fonction de l'état actuel du système ; le couplage faible évite toute ambiguïté grâce à un alignement strict. Les métadonnées déterminent l'ordre des outils, des environnements et des ensembles d'autorisations lors d'une recherche en direct. Pour répondre aux exigences de la validation de schéma interactive en temps réel, Algolia assure une mise à l'échelle horizontale de ses récupérations de schéma, garantissant ainsi des performances optimales même en cas de forte charge. Cette nécessité opérationnelle explicite permet de gérer le volume élevé de requêtes générées par la validation de schéma en temps réel, intégré au chemin critique de l'interaction. Plutôt que d'utiliser des valeurs codées en dur pour déterminer les détails des outils à utiliser dans le jeu d'instructions, la plateforme récupère le schéma de l'outil à la demande, minimisant ainsi le contexte nécessaire à l'exécution de la fonction, tout en conservant le contrôle programmatique du modèle. L'exemple suivant illustre comment une occurrence de la requête crée une limite typée pour une requête utilisateur.

/**
 * Schema-Constrained Extraction Implementation
 * Algolia provides the deterministic typed boundary for the model.
 * Aligned with NIST AI RMF Manage and Measure functions.
 */
async function validateIntent(userQuery: string) {
  // 1. Retrieve the deterministic tool definition from AI Search
  const { hits } = await schemaRegistry.search(userQuery, {
    filters: "status:active AND type:infrastructure_tool",
    facetFilters: ["environment:production"], // Ensure policy compliance
    hitsPerPage: 1
  });

  if (hits.length === 0) {
    throw new Error("No authorized tool schema found for this intent.");
  }

  // Retrieve the exact JSON schema required for the action
  const toolSchema = hits[0].input_schema; // example: { "env": "string", "cpu": "number" }

  // 2. Use the retrieved schema to prime the model for extraction
  // This constrains the probabilistic output into a deterministic contract
  const extractionPrompt = `
    Extract parameters from: "${userQuery}"
    Strictly adhere to this JSON schema: ${JSON.stringify(toolSchema)}
    Return ONLY valid JSON.
  `;

  const rawAction = await llm.generate(extractionPrompt);

  // 3. Final deterministic validation before the handoff to the runtime
  // This ensures zero tolerance for hallucinated or almost correct inputs
  const validatedAction = validateAgainstSchema(rawAction, toolSchema);

  return {
    action: validatedAction,
    metadata: {
      schema_id: hits[0].objectID,
      retrieval_latency: "100 ms", // Critical metric for ROI
      policy_checked: true
    }
  }; }

Gouvernance, gestion des risques et RMF IA

L'incapacité d'une structure de gouvernance à fonctionner correctement en situation de forte charge signifie qu'elle cesse de remplir sa fonction de gouvernance et devient un obstacle pour les utilisateurs finaux, qui trouveront un moyen de la contourner. Pour garantir la sécurité totale d'une couche de récupération, celle-ci doit rester sur le chemin critique de chaque transaction et communication, indépendamment du volume de trafic lors des pics d'activité, et doit continuer à fonctionner en toutes circonstances. La performance est le seul indicateur de succès permettant de déterminer si la gouvernance fonctionne correctement en production. Les exigences métier imposent que chaque tranche de 100 ms de latence supplémentaire entraîne une perte d'environ 1 % du chiffre d'affaires généré par les transactions converties. Par conséquent, si la couche de récupération tombe en panne lors d'un pic d'activité (comme le Black Friday), il ne s'agit pas seulement d'un problème de performance, mais aussi d'une perte de revenus due à une défaillance de la structure de gouvernance. Les volumes de trafic élevés créent une « friction d'intention », définie comme le délai entre le moment où un utilisateur souhaite effectuer une action et le moment où le système y répond par une réponse conforme à la gouvernance. Les utilisateurs confrontés à ce problème contournent généralement le système et trouvent manuellement une solution de contournement pour accomplir l'action souhaitée. Un système d'entreprise délibérément contourné par ses utilisateurs ne peut jamais être considéré comme un système gouverné en pratique, même si sa documentation peut le présenter comme bien architecturé.

Maintenir le chemin critique nécessaire pour répondre aux besoins des grandes entreprises exige une infrastructure particulière. La gestion des accès aux données à l'échelle de l'entreprise est désormais une problématique d'infrastructure résolue. Un réseau de recherche distribué hautement optimisé fournit l'architecture permettant de gérer ces accès à grande échelle. Contrairement à l'utilisation d'une base de données centralisée unique comme référentiel pour un index géré, où des millions de requêtes simultanées d'accès aux outils sont adressées à la couche de routage et où la base de données devient un goulot d'étranglement, le réseau de recherche distribué réplique l'index géré en périphérie. En cas de forte charge système, des algorithmes de repartitionnement propriétaires redistribuent la charge de calcul sur le cluster tout en maintenant l'index verrouillé. Par conséquent, l'ajout de millions de définitions d'outils, de schémas complexes et d'un contrôle d'accès granulaire basé sur les rôles à l'index n'a aucun impact sur la latence des requêtes. Chaque règle de gouvernance est résolue par le répertoire de capacités en moins de 10 ms.

{
  "ranking": [
    "typo",
    "geo",
    "words",
    "filters",
    "proximity",
    "attribute",
    "exact",
    "custom"
  ],
  "customRanking": [
    "desc(popularity_score)",
    "desc(revenue_weight)"
  ],
  "attributesToRetrieve": [
    "action_id",
    "mcp_schema_short",
    "latency_tier"
  ],
  "renderingContent": {
    "facetOrdering": {
      "facets": {
        "order": ["environment", "user_permission_level"]
      }
    }
  }
}

Analyse de l'exécution : au-delà du clic

La plupart des systèmes d'entreprise fonctionnent selon deux axes : l'un enregistre toutes les décisions de récupération de données prises par le système ; l'autre, tous les résultats d'exécution générés. Ce stockage séparé ne nous offre que deux visions partielles de la transaction. Sans ces deux visions, un auditeur ne peut établir le lien entre l'intention initiale de l'utilisateur et les actions du système. La fonction de mesure du cadre de gestion des risques liés à l'IA du NIST exige précisément cela : la capacité de déterminer a posteriori la décision prise par le système et sur quels critères.

Un copilote de flux de travail qui ne contient aucune télémétrie auditable est ingouvernable.

Pour satisfaire aux exigences d'audit décrites ci-dessus, le système doit conserver un enregistrement explicite des six éléments suivants de la piste d'audit :

  • Éléments récupérés et classés (décision de récupération)
  • Quel outil a été sélectionné (résultat du routage)
  • Quels arguments ont été proposés comme paramètres structurés (en tant qu'entrée du système de recherche) ?
  • Qui a autorisé l'action (enregistrement d'autorisation)
  • Que s'est-il passé lorsque l'outil a été invoqué (quelle commande a été exécutée) ?
  • Qu'est-ce qui a changé dans l'état du système (delta) ? (la différence entre l'état du système avant et après la récupération)

Ce sont des éléments obligatoires d'un registre comptable opérationnel permettant à une équipe de sécurité d'effectuer une analyse post-incident.

Grâce à la création d'un ensemble unique de données de télémétrie, une nouvelle boucle de rétroaction, appelée « pertinence sécurisée », est mise en place. Lorsqu'une exécution échoue (par exemple, refus d'appel d'outil, échec de validation de paramètre, etc.), l'échec lui-même est exploité comme donnée. Cette donnée est ensuite réinjectée dans la couche de recherche sous forme de signal de classement, garantissant ainsi des recherches ultérieures plus sûres, sans nécessiter d'ajustements manuels. Les flux de travail présentant un risque d'exécution élevé verront leur classement diminuer lors des requêtes suivantes. Dès que le risque d'exécution est manifeste, le système adopte une approche plus prudente. La pertinence sécurisée est un signal de pertinence calibré par le résultat de l'exécution plutôt que par les performances de la recherche.

Lorsque la couche de récupération résout le chemin de requête à l'aide de l'identifiant généré par le moteur et de la fonctionnalité de recherche native de la plateforme, elle fait le lien entre l'intention probabiliste de l'utilisateur et le résultat déterministe de l'appel. L'environnement d'exécution fournit à l'appel l'identifiant de requête créé par le moteur de récupération et l'identifiant de l'objet cible du contrat d'outil lors de l'appel. En cas de succès, l'exécution génère un événement de conversion ; en cas d'échec, un événement d'échec est généré, l'appel ayant échoué soit en raison d'un blocage de stratégie, soit en raison d'une erreur d'exécution. Les modifications apportées à la pertinence et aux stratégies de sécurité sont effectuées dans une seule trace, ce qui évite de devoir mettre à jour plusieurs journaux.

La CNCF définit les caractéristiques structurelles (sémantique de nouvelle tentative, isolation des tâches et traçage d'exécution) nécessaires au bon fonctionnement d'un système distribué. Il ne s'agit pas de simples fonctionnalités d'« observabilité » ajoutées a posteriori, mais de décisions architecturales fondamentales concernant le comportement du système en cas de défaillance de certains composants et la manière de limiter l'impact de ces défaillances. Ces caractéristiques fournissent également un enregistrement de tous les événements du système, permettant ainsi la création d'un rapport d'incident précis. Un copilote de flux de travail dépourvu de ces propriétés est ingouvernable : il est impossible de savoir avec certitude ce qui s'est passé, pourquoi, ni si cela risque de se reproduire.

Pour que la sémantique de nouvelle tentative fonctionne correctement pour l'agent, il est essentiel de traiter avec précaution les nouvelles tentatives d'un appel d'outil ayant échoué dans un système distribué. En effet, si un appel d'outil échoue dans un tel système, il n'est pas possible de le relancer en toute sécurité s'il avait déjà commencé à s'exécuter avant l'échec – comme ce serait le cas, par exemple, si l'échec survenait lors d'un déploiement Terraform et provisionnait partiellement l'infrastructure du système. Dans notre architecture, nous gérons ce cas en utilisant le contrat MCP comme limite idempotente pour l'exécution. L'identifiant d'exécution est inclus dans la charge utile d'exécution afin de permettre au serveur MCP de détecter et de rejeter les appels dupliqués. Pour fournir l'historique d'exécution, chaque nouvelle tentative est enregistrée comme un événement distinct dans l'API Insights, associé à l'identifiant de la requête d'origine.

La caractéristique d'isolation des tâches correspond directement à la séparation des plans décrite précédemment dans ce document. Chaque invocation d'outil s'exécute conformément au contrat initial récupéré lors de son lancement, et à aucun autre. Le plan d'exécution ne peut étendre ses propres privilèges pendant l'exécution de l'invocation. Si une invocation d'outil nécessite une élévation de privilèges à un niveau supérieur à celui déterminé lors de la décision de récupération initiale, l'environnement d'exécution refusera la demande d'élévation et consignera ce refus comme une violation de politique. Cette caractéristique d'isolation satisfait à la spécification OWASP ASI02 (Utilisation abusive d'outils) au niveau de la limite d'exécution, sans dépendre d'instructions de la couche supérieure, qui peuvent être contournées par une manipulation adéquate des entrées.

Les fonctions « Mesurer » et « Gérer » du NIST AI RMF sont unifiées par la création d'une trace d'exécution. La gestion est indissociable de la mesure, et la mesure ne peut se faire sans une forme de gestion ; autrement, il ne s'agit que de documentation. La gestion aura toujours une interprétation des données, mais la pertinence de cette interprétation dépend de la précision des données générées par le processus de mesure. L'enregistrement de trace de l'API Insights permet d'activer les fonctions « Mesurer » et « Gérer ». Si un signal de pertinence sûre indique une augmentation du taux d'échec pour une catégorie de flux de travail, la configuration de l'index peut être modifiée afin d'exiger un seuil de risque plus élevé avant que ce flux de travail ne soit présenté comme candidat prioritaire. Une fois la modification de la configuration de l'index effectuée, elle est immédiatement disponible pour tous les nœuds du réseau de recherche distribuée et ne nécessite ni le redéploiement d'un modèle ni la révision des invites. Une opération d'index est une réponse de gouvernance rapide, auditable et réversible.

Cette boucle d'exécution est conforme aux principes de flux de travail de la CNCF ; par conséquent, elle établit que la sémantique de nouvelle tentative, l'isolation des tâches et le traçage de l'exécution sont des propriétés structurelles de l'architecture et non des détails d'implémentation propres à chaque équipe d'ingénierie. La fonction de mesure continue du NIST AI RMF est utilisée comme pratique opérationnelle et non comme simple exercice de documentation.

/**
 * Orchestration runtime execution loop — ILLUSTRATIVE EXAMPLE
 * Demonstrates the handoff flow from routing layer to execution plane.
 * In a production Algolia environment, field names and API calls align with
 * the actual ActionProposal interface and Insights API schema.
 * Enforces policy gates and records auditable traces using the Insights API.
 */
async function processActionProposal(proposal: ActionProposal, userSession: Session) {
  // 1. Policy and permission gate
  // Enforces OWASP ASI02 (Tool Misuse) at the execution boundary
  const isAuthorized = await policyEngine.check(userSession.user, proposal.action_id);
  if (!isAuthorized) {
    throw new Error("Unauthorized: Action exceeds user permission scope.");
  }

  // 2. Step-up authorization for critical-tier actions
  // Aligned with NIST AI RMF human-in-the-loop expectations
  if (proposal.risk_metadata.nist_tier === "critical") {
    await requestMfaVerification(userSession);
  }

  // 3. Execution within deterministic MCP contract
  // Prevents OWASP ASI01 (Agent Goal Hijack) at the execution layer
  try {
    const result = await mcpClient.execute(proposal.execution_payload);

    // 4. Record unified retrieval and execution telemetry
    // Binds the execution outcome to the Algolia query ID for Safe Relevance
    await insightsClient.clickedObjectIDsAfterSearch({
      eventName: "Tool Executed Safely",
      indexName: "actionable_registry",
      queryID: proposal.query_id,
      objectIDs: [proposal.objectID],
      positions: [1],
      userToken: userSession.user.id
    });

    return result;
  } catch (error) {
    // Log failure as a Safe Relevance signal for ranking adjustment
    return handleExecutionFailure(error, proposal);
  }
}

Conclusion : la recherche est en pleine mutation

Le format de sortie d'un moteur de recherche évolue : d'une liste de liens vers des ressources, il passe à une liste d'actions permettant d'accomplir des tâches. Ce changement de paradigme marque une transition de l'indexation de documents à l'exécution de tâches. Cette transition s'inscrit dans le cadre de l'architecture globale du système et ne constitue pas une simple amélioration d'un modèle de recherche existant.

Par exemple, si la couche de récupération d'un moteur de recherche est structurée pour produire une liste de propositions concrètes conformes aux normes de gouvernance d'entreprise et aux normes d'audit pour la ou les applications proposées, cette couche devrait indexer les outils contractuels disponibles ; classer la liste des outils disponibles en fonction du cas d'utilisation souhaité et de la politique de sécurité associée ; et fournir ces outils dans les délais de latence requis par la plupart des systèmes d'entreprise à grande échelle.

Outre le format des résultats du moteur de recherche, les compétences techniques fondamentales nécessaires pour garantir l'exécution rapide des requêtes, le classement des résultats et le contrôle d'accès restent inchangées. Les différences essentielles résident dans le contenu indexé et la méthode d'alimentation de l'index. Par exemple, l'index de la plupart des systèmes de recherche d'entreprise est constitué de documents statiques. En revanche, dans un moteur de recherche fonctionnant comme un copilote de flux de travail en environnement de production, l'index est alimenté par des contrats d'outils, des modèles de flux de travail, des schémas de formulaires et des définitions de serveurs MCP. Le mode de classement des résultats a également évolué : il prend désormais en compte les niveaux de sécurité, les étendues d'autorisation et le risque d'exécution, en plus de la pertinence par rapport à la requête initiale de l'utilisateur.

Un réseau de recherche distribué capable de fonctionner nativement sur des enregistrements JSON indépendants du schéma permet à l'architecture de prendre en compte simultanément toutes les contraintes multidimensionnelles (intention, portée, etc.) et de fournir des informations supplémentaires sur l'ensemble du processus de flux de travail (de l'intention de l'utilisateur au résultat final), contrairement à un simple enregistrement des requêtes de recherche et du comportement de clic de l'utilisateur.

Une trace d'audit terminal valide l'architecture, tandis qu'une trace d'audit terminal démontre la chaîne de prise de décision dans la relation entre les intentions d'un utilisateur et la réponse du système ; par conséquent, la trace d'audit terminal représente la dernière preuve nécessaire pour prouver que l'architecture a fonctionné comme prévu.

Bien que MCP présente l'avantage d'établir une méthode standardisée de communication entre les outils et un système, il ne s'agit en fin de compte que d'une manière mieux organisée d'accroître la surface d'attaque d'un système complexe et de réduire la gouvernance. Avec un répertoire de capacités récupérant les contrats d'outils à partir des données saisies par l'utilisateur, le protocole passe d'une méthodologie utile pour l'intégration de services à une méthodologie de sécurité.

Outre sa capacité d'auto-amélioration, ce qui rend cette architecture bien plus qu'une simple « correcte », c'est le concept de « pertinence sécurisée ». Chaque résultat d'exécution (qu'il s'agisse d'un appel d'outil réussi, d'un blocage par une politique, d'un échec de validation de paramètre ou d'un abandon au niveau d'une barrière d'authentification multifacteur) est renvoyé à la couche de récupération sous forme de signal de classement. Aucun paramétrage humain n'est nécessaire pour évaluer qu'un flux de travail particulier comporte des risques d'exécution supplémentaires par rapport à d'autres. La couche d'indexation apprend ces informations à partir des enregistrements des exécutions précédentes et réagit en conséquence. Les flux de travail qui échouent à la limite de l'exécution se voient attribuer un classement inférieur pour toutes les exécutions ultérieures similaires. Ainsi, le copilote fonctionne de manière plus prudente dans les contextes à haut risque. Les fonctions de mesure et de gestion du NIST continuent de fonctionner en boucle automatisée, et non périodiquement sous forme d'audit ; il s'agit là de l'attribut le plus distinctif qui différencie un système véritablement gouverné d'un système qui semble l'être uniquement sur la base de sa documentation.

{
  "trace_id": "audit_88321_exec",
  "intent_routing": {
    "query": "provision staging",
    "retrieval_id": "alg_992x",
    "selected_candidate": "wf_provision_staging_001",
    "ranking_score": 0.98,
    "latency_ms": 102
  },
  "execution_plane": {
    "tool_invoked": "terraform_deploy",
    "mcp_server": "mcp.internal.infra",
    "status": "success",
    "runtime_id": "rt_7721"
  },
  "safety_compliance": {
    "nist_tier": "critical",
    "mfa_verified": true,
    "owasp_mitigation": ["ASI01", "ASI02"],
    "policy_version": "v2.1"
  }
}

L'architecture éprouvée d'Algolia (plus de 17 000 clients, plus de 150 pays, 1,75 billion de recherches par an) constitue la couche de récupération et de classement sur laquelle s'appuient les architectures d'intention à l'action à l'échelle de l'entreprise.

La véritable question est de savoir si cette couche peut rester suffisamment rapide pour demeurer sur le chemin critique tout en hiérarchisant les actions importantes et en conservant une trace écrite complète de chaque décision. C'est la norme à laquelle un système gouvernemental doit se conformer.

Planifiez une démonstration

Permettre à tous de créer d'excellents outils de recherche et de découverte