Accueil / Articles

Questions fréquentes en PDF sur Azure AI Search et les agents Foundry

Indexer les PDFs des cours privés avec des embeddings, connecter un agent Foundry à l’index vectoriel, et diagnostiquer les problèmes d’autorisation ainsi que les lacunes dans les instructions qui font apparaître RAG comme défectueux.

Éditeur : REACTAPP.TOP9 min de lecture2147 mots

Sources: Building a Grounded RAG Agent on Azure AI Search and Azure AI Foundry

Introduction

Une organisation de formation en forensique numérique dispose de cours PDF accumulés au fil des ans : diapositives, exercices pratiques, chapitres de référence. Les analystes ont besoin d’un concept présent dans des dizaines de fichiers distincts. La recherche par mots-clés à travers ces fichiers dispersés est lente et peu fiable. Le produit souhaité sont des questions-réponses rédigées en langage simple, répondues à partir de cet ensemble de documents, et non une paraphrase de manuel générique.

C’est là l’approche RAG : récupérer des extraits pertinents à partir d’un ensemble de documents privés et s’appuyer sur eux pour générer des réponses. Cette solution met en œuvre ce modèle de bout en bout sur Azure : Azure AI Search indexe les PDF réels à l’aide d’embeddings, et un agent Azure AI Foundry répond à partir de cet index plutôt que sur des connaissances générales.

Cela est également devenu un récit de débogage. Presque rien n’a échoué à cause d’une idée fausse ; les échecs provenaient de petites incohérences entre les ressources, les modèles d’authentification et le comportement par défaut des agents. Ces points de friction sont documentés plutôt que résolus.

Comprendre l’architecture

Quatre services Azure s’occupent de quatre tâches.

Blob Storage stocke les documents sources — ici, des PDFs forensiques ; tout corpus provenant d’un domaine privé suit la même structure.

Azure AI Search indexe et récupère les données. Un ensemble de compétences divise les documents en fragments, appelle un modèle d’incorporation et stocke le texte ainsi que les vecteurs. Lors d’une requête, Search renvoie des fragments sémantiquement similaires, et non seulement des résultats correspondant à des mots-clés.

Azure AI Foundry héberge les modèles ainsi que l’agent : une implémentation d’embedding pour la vectorisation des index et des requêtes, et une implémentation de chat pour fournir des réponses. L’agent enveloppe le modèle de chat avec une source de connaissances et des instructions.

Identité gérée et RBAC déterminent qui peut effectuer quelles requêtes. Les connexions (Recherche→Blob, Recherche→embeddings, agent→index) devraient privilégier des rôles ciblés plutôt que des clés intégrées. Cette version n’a pas atteint une chaîne entièrement dépourvue de clés ; cette lacune est indiquée ci-dessous.

Étape un : documents sources

knowledge-docs) a reçu les PDF du cours. L’accès est resté privé — aucune lecture anonyme — ce qui correspond au traitement des documents comme étant sensibles.

Étape deux : déploiement des modèles dans Azure AI Foundry

  • Chat (chat-deploy) pour les réponses
  • Embeddings (embed-deploy, text-embedding-3-small) pour les vecteurs de documents et de requêtes
  • Vérifiez que ces éléments existent bien avant de connecter des skillsets ou des agents de recherche ; l’absence de déploiement entraîne ultérieurement des erreurs d’indexation difficiles à diagnostiquer.

    Étape trois : Azure AI Search et l’index vectorisé

    Créez un service de recherche, puis un index dont les champs contiennent du texte par blocs, des vecteurs et des métadonnées de document. Associez un skillset qui :

    1. Récupère les blobs depuis knowledge-docs
    2. Les divise en blocs chevauchants
    3. Appelle le déploiement d’embedding
    4. Écrit les vecteurs dans l’index

    Les indexateurs ont besoin des permissions nécessaires pour lire les blobs et appeler l’endpoint d’embedding. Même les attributions de rôles qui semblent « presque correctes » échouent en temps de exécution — vérifiez les IDs des ressources avec précision.

    Web Api response status: 'NotFound'
    DeploymentNotFound: The API deployment for this resource does not exist.
    
    Web Api response status: 'Unauthorized' (401)
    Access denied due to invalid subscription key or wrong API endpoint.
    
    Access denied when connecting to the MCP server ... HTTP 403 Forbidden
    
    You are an assistant that answers questions about digital forensics course material.
    For every user question, you MUST first search the connected knowledge base before answering.
    Only answer using information retrieved from the knowledge base.
    If the knowledge base returns no relevant results, say so explicitly rather than answering from general knowledge.
    

    Étape quatre : échecs d’indexation et leur signification

    L’indexation échoue rarement à cause d’une seule phrase claire. Formes courantes dans ce cas :

    • Le ensemble de compétences ne parvient pas à être déployé (authentification insuffisante ou mauvais point de terminaison)
    • Le plan d’exécution de l’indexeur fonctionne, mais les documents restent au nombre zéro (problème avec le chemin du conteneur ou la référence à l’ensemble de compétences)
    • Les vecteurs sont écrits avec des dimensions incorrectes (incompatibilité entre le schéma de l’index et la version déployée du modèle)

    Tenez chaque cas pour un bug de configuration, et non un échec lié au concept RAG. Enregistrez l’historique d’exécution de l’indexeur avant de modifier trois paramètres en même temps.

    Étape cinq : connexion de l’index à un agent

    Dans Foundry, attachez l’index de recherche en tant que source de connaissances pour l’agent. Les instructions doivent exiger la citation des passages récupérés et refuser de répondre lorsque l’index ne renvoie rien d’ pertinent. Testez avec une question dont la réponse n’existe que sur une seule page PDF : un succès signifie une citation fondée, et non une simple supposition.

    Étape six : deux écarts comportementaux

    En dehors de la configuration, deux problèmes comportementaux sont apparus :

    1. Réponses trop aidantes en cas d’échec — le modèle de chat répondait à partir de connaissances préexistantes lorsque aucune information n’était retrouvée. Renforcez les instructions et, le cas échéant, les vérifications de fondement afin que l’absence de résultats renvoie « pas dans le corpus ».
    2. Incohérence d’authentification — certains liens utilisaient encore des clés, tandis que d’autres employaient une identité gérée. Une authentification mixte rend les rotations complexes et cache quel principal a réellement réussi.

    Aucun des deux n’est une case à cocher de type portail ; ce sont toutes deux des décisions relatives aux produits, codées dans les instructions et la conception de l’identité.

    Que se passe-t-il réellement en coulisses

    Une question de l’utilisateur est intégrée, la recherche renvoie les extraits principaux, le prompt de l’agent reçoit ces extraits ainsi que des instructions, et le modèle de chat génère une réponse restreinte (idéalement) à ce contexte. Le stockage de fichiers ne communique jamais directement avec l’agent ; la recherche constitue la limite de récupération. Foundry sert à l’orchestration et héberge les modèles.

    Défis et leçons apprises

    • Il faut vérifier la disponibilité de la région et du modèle avant de créer des ressources.
    • La dimension de l’embedding dans le schéma d’index doit correspondre exactement au modèle d’embedding choisi.
    • Les erreurs RBAC ressemblent à des index vides tant que l’on ne consulte pas les détails de l’indexeur.
    • Les instructions destinées à l’agent font partie de la correction, et non d’une simple décoration.
  • Dokumentez le modèle d’authentification que vous avez réellement déployé, y compris les clés temporaires.
  • Points clés

    Azure RAG est une série de petits contrats : confidentialité des blobs, permissions pour skillset→embed, schéma d’index↔dimensions du modèle, attachement des connaissances de l’agent, et politique de réponse ancrée. Si vous respectez bien ces éléments, l’architecture devient simple — et c’est positif. En omettant l’un d’eux, vous passerez des jours à déboguer en pensant que « RAG ne fonctionne pas ».

    Conseil opérationnel : conservez un guide d’une page listant les noms exacts des ressources, les noms de déploiement (pas les noms des modèles de base), le nom de l’index, le nom du skillset, ainsi que les identités gérées ou clés utilisées à chaque étape. Lorsqu’un indexeur échoue à 02:00, cette page est bien plus utile que des captures d’écran tirées du portail. Ajoutez une tâche hebdomadaire qui pose trois questions essentielles dont les réponses se trouvent sur des pages connues, et qui empêche la compilation si le niveau d’ancrage diminue.

    Conseil opérationnel : conservez un guide de fonctionnement d’une page seule qui indique les noms exacts des ressources, les noms des déploiements (et non les noms des modèles de base), le nom de l’index, le nom du jeu de compétences, ainsi que les identités gérées ou clés utilisées à chaque étape. Lorsqu’un indexeur échoue à 02:00, cette page permet de retrouver rapidement les informations nécessaires grâce aux captures d’écran du portail. Ajoutez une tâche hebdomadaire qui pose trois questions essentielles dont les réponses se trouvent sur des pages connues, et qui fait échouer la compilation si le niveau de fiabilité diminue.

    Conseil opérationnel : conservez un guide de fonctionnement d’une page seule qui indique les noms exacts des ressources, les noms des déploiements (et non les noms des modèles de base), le nom de l’index, le nom du jeu de compétences, ainsi que les identités gérées ou clés utilisées à chaque étape. Lorsqu’un indexeur échoue à 02:00, cette page permet de retrouver rapidement les informations nécessaires grâce aux captures d’écran du portail. Ajoutez une tâche hebdomadaire qui pose trois questions essentielles dont les réponses se trouvent sur des pages connues, et qui fait échouer la compilation si le niveau de fiabilité diminue.

    Conseil opérationnel : conservez un guide de fonctionnement d’une page seule qui indique les noms exacts des ressources, les noms des déploiements (et non les noms des modèles de base), le nom de l’index, le nom du jeu de compétences, ainsi que les identités gérées ou clés utilisées à chaque étape. Lorsqu’un indexeur échoue à 02:00, cette page permet de retrouver rapidement les informations nécessaires grâce aux captures d’écran du portail. Ajoutez une tâche hebdomadaire qui pose trois questions essentielles dont les réponses se trouvent sur des pages connues, et qui fait échouer la compilation si le niveau de fiabilité diminue.

    Conseil opérationnel : conservez un guide de fonctionnement d’une page seule qui indique les noms exacts des ressources, les noms des déploiements (et non les noms des modèles de base), le nom de l’index, le nom du jeu de compétences, ainsi que les identités gérées ou clés utilisées à chaque étape. Lorsqu’un indexeur échoue à 02:00, cette page permet de retrouver rapidement les informations nécessaires grâce aux captures d’écran du portail. Ajoutez une tâche hebdomadaire qui pose trois questions essentielles dont les réponses se trouvent sur des pages connues, et qui fait échouer la compilation si le niveau de fiabilité diminue.

    Conseil opérationnel : conservez un guide de fonctionnement d’une page seule qui indique les noms exacts des ressources, les noms des déploiements (et non les noms des modèles de base), le nom de l’index, le nom du jeu de compétences, ainsi que les identités gérées ou clés utilisées à chaque étape. Lorsqu’un indexeur échoue à 02:00, cette page permet de retrouver rapidement les informations nécessaires grâce aux captures d’écran du portail. Ajoutez une tâche hebdomadaire qui pose trois questions essentielles dont les réponses se trouvent sur des pages connues, et qui fait échouer la compilation si le niveau de fiabilité diminue.

    Conseil opérationnel : conservez un guide de fonctionnement d’une page seule qui indique les noms exacts des ressources, les noms des déploiements (et non les noms des modèles de base), le nom de l’index, le nom du jeu de compétences, ainsi que les identités gérées ou clés utilisées à chaque étape. Lorsqu’un indexeur échoue à 02:00, cette page permet de retrouver rapidement les informations nécessaires grâce aux captures d’écran du portail. Ajoutez une tâche hebdomadaire qui pose trois questions essentielles dont les réponses se trouvent sur des pages connues, et qui fait échouer la compilation si le niveau de fiabilité diminue.

    Conseil opérationnel : conservez un guide de fonctionnement d’une page seule qui indique les noms exacts des ressources, les noms des déploiements (et non les noms des modèles de base), le nom de l’index, le nom du jeu de compétences, ainsi que les identités gérées ou clés utilisées à chaque étape. Lorsqu’un indexeur échoue à 02:00, cette page permet de retrouver rapidement les informations nécessaires grâce aux captures d’écran du portail. Ajoutez une tâche hebdomadaire qui pose trois questions essentielles dont les réponses se trouvent sur des pages connues, et qui fait échouer la compilation si le niveau de fiabilité diminue.

    Conseil opérationnel : conservez un guide de fonctionnement d’une page seule qui indique les noms exacts des ressources, les noms des déploiements (et non les noms des modèles de base), le nom de l’index, le nom du jeu de compétences, ainsi que les identités gérées ou clés utilisées à chaque étape. Lorsqu’un indexeur échoue à 02:00, cette page permet de retrouver rapidement les informations nécessaires grâce aux captures d’écran du portail. Ajoutez une tâche hebdomadaire qui pose trois questions essentielles dont les réponses se trouvent sur des pages connues, et qui fait échouer la compilation si le niveau de fiabilité diminue.

    Conseil opérationnel : conservez un guide de fonctionnement d’une page seule qui indique les noms exacts des ressources, les noms des déploiements (et non les noms des modèles de base), le nom de l’index, le nom du jeu de compétences, ainsi que les identités gérées ou clés utilisées à chaque étape. Lorsqu’un indexeur échoue à 02:00, cette page permet de retrouver rapidement les informations nécessaires grâce aux captures d’écran du portail. Ajoutez une tâche hebdomadaire qui pose trois questions essentielles dont les réponses se trouvent sur des pages connues, et qui fait échouer la compilation si le niveau de fiabilité diminue.

    Conseil opérationnel : conservez un guide de fonctionnement d’une page seule qui indique les noms exacts des ressources, les noms des déploiements (et non les noms des modèles de base), le nom de l’index, le nom du jeu de compétences, ainsi que les identités gérées ou clés utilisées à chaque étape. Lorsqu’un indexeur échoue à 02:00, cette page permet de retrouver rapidement les informations nécessaires grâce aux captures d’écran du portail. Ajoutez une tâche hebdomadaire qui pose trois questions essentielles dont les réponses se trouvent sur des pages connues, et qui fait échouer la compilation si le niveau de fiabilité diminue.

    Conseil opérationnel : conservez un guide de fonctionnement d’une page seule qui indique les noms exacts des ressources, les noms des déploiements (et non les noms des modèles de base), le nom de l’index, le nom du jeu de compétences, ainsi que les identités gérées ou clés utilisées à chaque étape. Lorsqu’un indexeur échoue à 02:00, cette page permet de retrouver rapidement les informations nécessaires grâce aux captures d’écran du portail. Ajoutez une tâche hebdomadaire qui pose trois questions essentielles dont les réponses se trouvent sur des pages connues, et qui fait échouer la compilation si le niveau de fiabilité diminue.

    Conseil opérationnel : conservez un guide de fonctionnement d’une page seule qui indique les noms exacts des ressources, les noms des déploiements (et non les noms des modèles de base), le nom de l’index, le nom du jeu de compétences, ainsi que les identités gérées ou clés utilisées à chaque étape. Lorsqu’un indexeur échoue à 02:00, cette page permet de retrouver rapidement les informations nécessaires grâce aux captures d’écran du portail. Ajoutez une tâche hebdomadaire qui pose trois questions essentielles dont les réponses se trouvent sur des pages connues, et qui fait échouer la compilation si le niveau de fiabilité diminue.

    Conseil opérationnel : conservez un guide de une page qui indique les noms exacts des ressources, les noms des déploiements (et non les noms des modèles de base), le nom de l’index, le nom du jeu de compétences, ainsi que les identités gérées ou clés utilisées à chaque étape. Lorsqu’un indexeur échoue à 02:00, cette page permet de retrouver rapidement les informations nécessaires grâce aux captures d’écran du portail. Ajoutez une tâche hebdomadaire qui pose trois questions essentielles dont les réponses se trouvent sur des pages connues, et qui fait échouer la compilation si le niveau de fiabilité diminue.

    Conseil opérationnel : conservez un guide de une page qui indique les noms exacts des ressources, les noms des déploiements (et non les noms des modèles de base), le nom de l’index, le nom du jeu de compétences, ainsi que les identités gérées ou clés utilisées à chaque étape. Lorsqu’un indexeur échoue à 02:00, cette page permet de retrouver rapidement les informations nécessaires grâce aux captures d’écran du portail. Ajoutez une tâche hebdomadaire qui pose trois questions essentielles dont les réponses se trouvent sur des pages connues, et qui fait échouer la compilation si le niveau de fiabilité diminue.