Pourquoi le grounding n'est pas un simple interrupteur
Deux employés interrogent le même agent RH à quelques minutes d'intervalle. Le premier demande combien d'heures de congés il accumule par mois. Le second cherche où trouver le code de conduite officiel. Ces deux questions semblent identiques. Elles ne le sont pas. L'un a besoin d'une réponse synthétisée et fiable. L'autre veut un lien direct vers le bon document, sans interprétation.
Concevoir pour l'un des deux scénarios rend l'autre insatisfaisant. C'est précisément là que les projets d'agents documentaires deviennent complexes. En pratique, le grounding est un spectre : de la recherche classique sans code agent, jusqu'à un agent à ancrage forcé qui synthétise des réponses lorsque la situation l'exige.
Cet article décrit cinq patterns de récupération opérationnels pour un agent "Ask HR" construit sur Copilot Studio, Azure AI Search et Foundry IQ. Chaque pattern est accompagné de son code dans le dépôt de démonstration foundry-copilot-hr-policy-knowledge. Les cinq patterns partagent le même index sous-jacent : aucune réindexation n'est nécessaire pour passer de l'un à l'autre.
Périmètre du dépôt
Ce dépôt est un support d'apprentissage et d'expérimentation. Il n'est pas conçu pour un déploiement en production. Consultez l'Azure Well-Architected Framework avant toute mise en production (fiabilité, sécurité, coûts, opérations).
Un index, cinq points d'entrée
Le corpus de démonstration regroupe des documents de politique RH internes : accrual de congés, règles de recrutement, code de conduite, procédures sanitaires, et bien d'autres. La fondation commune est un index Azure AI Search nommé hr-policy-index, alimenté par un indexeur et un skillset qui découpent et vectorisent les documents.
Les patterns A, C et l'Hosted Agent interrogent cet index directement. Les patterns A2 et B ajoutent une knowledge base Foundry IQ nommée hr-knowledge-base par-dessus ce même index. Cette superposition est la clé d'architecture : les assets de récupération restent découplés de la couche d'orchestration. Il est donc possible de démarrer avec le pattern le plus simple, de valider la valeur métier, puis de progresser vers un pattern plus élaboré sans toucher au pipeline d'indexation.

L'arbre de décision en trois questions
Avant de choisir un pattern, il convient de clarifier deux concepts de récupération utilisés tout au long de cet article :
- Recherche classique (index-first) : une requête hybride (mots-clés + vecteurs) contre l'index Azure AI Search, classée et retournée. Rapide et prévisible.
- Récupération agentique : la knowledge base planifie plusieurs sous-requêtes en parallèle depuis la question de l'utilisateur, réordonne les résultats et les fusionne avant que l'agent compose sa réponse. Qualité supérieure sur les questions complexes et multi-parties.
Une fois ces définitions posées, le choix d'un pattern se ramène à trois questions pratiques :
Q1 — L'utilisateur cherche-t-il une réponse ou un document ? S'il a besoin du document, orientez vers un localisateur. S'il a besoin que la politique soit expliquée ou résumée, optez pour la synthèse.
Q2 — Un agent LLM est-il réellement nécessaire ? Si non, restez sur la recherche classique (Pattern A) ou la récupération agentique via la knowledge base (Pattern A2). Si oui, passez à la couche agent.
Q3 — L'agent doit-il tourner dans Foundry ou dans votre propre infrastructure ? Foundry gère le runtime → Pattern B. Vous gérez le runtime → Hosted Agent.
Lecture de l'arbre
Q1 détermine le type d'expérience (localisation vs synthèse). Q2 décide si un agent LLM est justifié. Q3 porte uniquement sur l'hébergement du runtime, pas sur l'interface utilisateur : Copilot Studio peut rester le point d'entrée dans les deux cas.
Pattern A — Recherche classique directe, sans code agent
C'est le point de départ recommandé. Copilot Studio interroge hr-policy-index directement via son action Knowledge native. Aucun code agent ne s'exécute dans le chemin de réponse. Le projet ne possède que l'index, le skillset et le pipeline d'indexation.
Pour peupler l'index, exécutez le script suivant (l'indexeur côté serveur gère le découpage et la vectorisation) :
1uv run python scripts/index_knowledge_base_integrated_vectorization.py2# Construit hr-policy-index ; une alternative côté client existe pour le développement/testAvantages : latence très faible (environ 1-2 secondes dans le dépôt de démonstration), aucun coût LLM dans le chemin de récupération, et cartes de citation natives. Lorsque les documents sources portent un champ blob_url ou metadata_storage_path, Copilot Studio peut afficher une carte cliquable vers le document. Pour de nombreuses questions du type "où est la politique ?", cela suffit.
Limite à connaître : le Pattern A reste de la recherche classique. Il ne force pas la synthèse. Si Copilot Studio paraphrase une politique à partir des fragments récupérés, le résultat peut être proche mais pas suffisamment précis. Pour des politiques RH, la formulation exacte peut avoir des implications juridiques. Si la précision du libellé est critique, passez au Pattern B.
Pattern A2 — Copilot Studio connecté à Foundry IQ (récupération agentique, sans agent de prompt)
Ce pattern s'adresse aux équipes qui souhaitent une meilleure qualité de récupération sans assumer la charge opérationnelle d'un agent de prompt complet. Dans la préversion de la nouvelle expérience agent de Copilot Studio, un agent se connecte directement à une knowledge base Foundry IQ via Microsoft IQ, sans agent de prompt Foundry intermédiaire.
La même hr-knowledge-base est réutilisée par-dessus hr-policy-index (une seule commande : python -m src.agents.create_foundry_agent). La récupération devient agentique : la knowledge base planifie des sous-requêtes, récupère en parallèle, re-classe et transmet les résultats fusionnés à l'agent.
La connexion dans Copilot Studio se réalise en quelques clics (procédure détaillée sur Microsoft Learn) :
Ouvrir la connexion Foundry IQ
Dans Copilot Studio, accédez à Build → Microsoft IQ → Foundry IQ → Create new connection.
Configurer l'authentification
Choisissez Microsoft Entra ID Integrated comme méthode d'authentification. Ce choix permet un filtrage des résultats par ACL : chaque utilisateur ne voit que le contenu auquel il a accès.
Sélectionner la knowledge base
Sélectionnez hr-knowledge-base dans la liste des sources disponibles.
Ajouter à l'agent
Cliquez sur Add to agent pour finaliser la connexion.
Pourquoi passer de A à A2 ? D'abord, la qualité agentique est obtenue sans déployer ni maintenir un agent de prompt. La knowledge base devient l'actif réutilisable que vous améliorez dans Microsoft Foundry, indépendamment de chaque agent Copilot Studio. Ensuite, avec l'authentification Microsoft Entra ID Integrated, les résultats sont filtrés par ACL par utilisateur.
Enterprise-readiness
Les knowledge bases Foundry IQ peuvent hériter de contrôles entreprise : clés gérées par le client, isolation réseau, et Microsoft Entra ID. Une seule knowledge base peut fédérer plusieurs sources de données en parallèle.
Pattern B — Foundry Agent Service avec ancrage forcé
Lorsque les réponses doivent être synthétisées et ancrées, publiez un agent de prompt dans Microsoft Foundry via Foundry Agent Service. Dans le dépôt de démonstration, l'agent utilise un MCPTool pointant vers l'endpoint de la knowledge base, avec tool_choice="required" pour obliger le modèle à récupérer des fragments de politique avant de répondre.
1# src/agents/hr_policy_agent.py (extrait)2agent = PromptAgentDefinition(3 model=model_deployment_name, # ex. gpt-5-mini4 instructions=HR_POLICY_INSTRUCTIONS,5 tools=[mcp_tool], # endpoint MCP de la KB6 tool_choice="required", # récupération obligatoire avant réponse7)L'invocation s'effectue via le client OpenAI fourni par le projet :
1client = project.get_openai_client()2response = client.responses.create(3 input="How does PTO accrue for a new hire?",4 extra_body={"agent_reference": {"name": agent_name}},5)Ce que vous obtenez : des réponses synthétisées avec ancrage et citations inline au format [Policy XXXX - Title], le tout depuis un seul appel SDK sur un runtime managé.
Le compromis à accepter : la synthèse prend plus de temps. Dans le dépôt de démonstration, les réponses prennent environ 10-14 secondes contre 1-2 secondes pour la recherche classique. Pour des explications de politique, ce délai peut se justifier : l'utilisateur reçoit une réponse composée et ancrée plutôt qu'une liste de fragments.
Pattern C — Routage dual-tool pour les localisateurs déterministes
Certaines questions ne requièrent pas de synthèse : elles nécessitent simplement la bonne URL, rapidement. Le Pattern C permet à Copilot Studio de router chaque requête en fonction de son intent :
- "Où est la politique de congés ?" →
POST /api/lookup, un endpoint déterministe sans LLM (environ 1-2 secondes), qui retourne l'URL du document verbatim dans le corps de la réponse. - "Combien d'heures de congés est-ce que j'accumule ?" → délégation au Pattern A ou B pour une réponse synthétisée.
1POST /api/lookup2{ "query": "PTO policy" }3→ 200 OK4{ "policy_id": "12345", "title": "Types of Leave: Paid Time Off (PTO)",5 "blob_url": "https://.../12345-pto.pdf" }Recourez au Pattern C lorsque les citations natives de Copilot Studio sont insuffisantes : URL imprimée directement dans le corps de la réponse, output déterministe et auditable, ou source documentaire non compatible avec le mécanisme de citation natif. L'endpoint est défini dans src/backend/main.py:/api/lookup, avec son contrat OpenAPI dans copilot/openapi-lookup-v2.json.
Hosted Agent — Le même agent sur votre propre runtime
Si votre organisation exige de contrôler la boucle de traitement des requêtes, d'intégrer une authentification personnalisée, des services satellites, ou de maintenir l'infrastructure dans son propre périmètre de sécurité, le Hosted Agent est la réponse. Il s'agit de la version auto-hébergée du même concept : un conteneur construit sur Microsoft Agent Framework avec FoundryChatClient.
Il supporte les deux modes de récupération via une seule variable d'environnement RETRIEVAL_MODE :
| RETRIEVAL_MODE | Stratégie | Type de récupération |
|---|---|---|
| tool (défaut) | Custom @tool search_hr_policies (hybride + sémantique) | Recherche classique |
| context-semantic | AzureAISearchContextProvider avant chaque tour | Recherche classique |
| context-agentic | AzureAISearchContextProvider sur hr-knowledge-base | Récupération agentique |
Les modes context-* utilisent le fournisseur de contexte RAG intégré à Agent Framework. La récupération s'exécute automatiquement avant chaque appel modèle, avec des prompts de contexte et de citation standardisés. L'agent n'a pas besoin d'appeler explicitement un outil de recherche. Copilot Studio peut rester le point d'entrée utilisateur : Q3 porte uniquement sur l'emplacement de la boucle de requêtes, pas sur l'interface.
Choisir son pattern : tableau de synthèse
| Pattern | Orchestrateur | Récupération | Latence (démonstration) | Idéal pour |
|---|---|---|---|---|
| A | Copilot Studio | Classique | ~1-2 s | Démarrage, citations natives, sans code agent |
| A2 | Copilot Studio → Foundry IQ | Agentique | ~2-4 s | Qualité agentique sans agent à maintenir |
| B | Foundry Agent Service | Classique/agentique via MCP | ~10-14 s | Synthèse avec ancrage forcé dans Foundry |
| C | Copilot Studio (routeur) | Aucune pour le lookup | ~1-2 s | Localisateurs déterministes et verbatim |
| Hosted | Conteneur Agent Framework | Classique + agentique | ~10-14 s | Runtime auto-hébergé, auth personnalisée |
La lecture de ce tableau suit une logique de progression : commencez par A, montez vers A2 pour la qualité agentique sans opérer un agent, choisissez B quand chaque réponse doit être synthétisée et ancrée dans Foundry, ajoutez C pour le trafic de localisation à fort volume, et optez pour le Hosted Agent si le runtime doit rester dans votre propre infrastructure.
Les patterns sont cumulables
Un agent mature route souvent les requêtes de localisation vers C et les questions de contenu vers A2 ou B. Ces patterns ne sont pas mutuellement exclusifs.
Références et ressources
Copilot Studio et Foundry IQ
- Connecter Foundry IQ à un agent Copilot Studio
- FAQ Foundry IQ
- Qu'est-ce que Foundry IQ ?
- Connecter une knowledge base Foundry IQ à Foundry Agent Service
Azure AI Search et récupération
- Vue d'ensemble de la récupération agentique
- RAG et IA générative dans Azure AI Search
- Recherche hybride
- Classement sémantique
- Démarrage rapide : récupération agentique
- Tutoriel : pipeline de récupération agentique de bout en bout
- Créer une knowledge base
Foundry Agent Service et Agent Framework
- Vue d'ensemble de Foundry Agent Service
- Vue d'ensemble de Microsoft Agent Framework
- Outils MCP hébergés
Gouvernance
Dépôt de démonstration



