Un bon RAG ne retrouve jamais le document interdit

Le 11 mars, OpenAI a lancé la Responses API, des outils intégrés et un SDK pour bâtir des agents. Ajouter une recherche de fichiers demande moins de plomberie. Dans une entreprise, le pipeline reste responsable de deux conditions simultanées : trouver le bon passage et prouver que cette personne peut le voir.

À l’ingestion, le connecteur lit le document et son identité stable, extrait le texte, crée des blocs et calcule leurs embeddings. Chaque bloc transporte source_id, version, owner, classification et une référence de permission. L’index ne doit pas perdre cette filiation.

source + ACL -> connecteur -> blocs + métadonnées -> index
utilisateur  -> identité -> filtre d'autorisation -> recherche hybride
             -> passages permis -> modèle -> réponse + citations

Deux stratégies d’autorisation existent. Le préfiltrage ajoute les groupes permis à la requête d’index. C’est rapide, mais les ACL doivent être fraîches. Le contrôle à la source reprend les meilleurs candidats et demande au service d’autorisation actuel avant d’envoyer le texte au modèle. C’est plus coûteux, mais limite les décisions basées sur une copie vieille. Un système sensible peut combiner les deux.

Une batterie de cas négatifs

Je testerais autant le refus que la pertinence :

  1. un contrat visible au groupe A, recherché par A et B;
  2. un employé retiré du groupe depuis cinq minutes;
  3. un document déplacé vers un site confidentiel;
  4. une version publique remplacée par une version restreinte;
  5. un fichier supprimé dont les blocs existent encore;
  6. un administrateur de l’index qui n’est pas lecteur métier;
  7. une question qui tente de faire résumer « tout ce qui est caché ».

Le test réussit seulement si le passage interdit n’entre jamais dans le contexte. Filtrer la citation après génération est trop tard. Le modèle peut paraphraser ou être influencé par le texte sans le citer.

La synchronisation utilise des événements de création, modification, déplacement, permission et suppression. Un marqueur de suppression retire les blocs. Un travail de réconciliation compare périodiquement index et source, parce qu’un événement peut se perdre. Je mesurerais le délai maximal de révocation et suspendrais la recherche sur une source si sa synchronisation dépasse ce seuil.

La recherche hybride garde les mots-clés pour numéros, codes et noms propres, puis ajoute la proximité sémantique. Un reclassement peut combiner les candidats. Les citations pointent vers source_id et version; si la source a changé depuis l’indexation, l’interface avertit ou recharge avant d’afficher.

Les logs contiennent identité, groupes évalués, identifiants des candidats, décisions d’autorisation, scores et version du pipeline. Ils évitent de recopier le contenu complet. Une alerte cherche surtout accès refusés en rafale, blocs sans propriétaire et documents dont l’ACL n’a pas été rafraîchie.

La panne doit être sûre. Si le service d’autorisation ne répond pas, un document restreint n’est pas envoyé « pour aider quand même ». L’application revient à la recherche source ou explique l’indisponibilité. Si l’index tombe, le document original demeure intact.

En 2025, le fournisseur peut gérer davantage d’indexation et de récupération. Il ne connaît pas automatiquement la raison de nos groupes ni notre délai de révocation. Un bon RAG trouve vite ce que cette personne peut voir, cite la version, et produit zéro indice sur le reste. Cette dernière mesure est une fonction centrale, pas un test de sécurité ajouté à la fin.