Copilot Studio
Construire un agent IT Helpdesk IA avec Copilot Studio + Dataverse
Guide pas à pas pour construire un agent IT helpdesk zéro-code et zéro-flow avec Microsoft Copilot Studio, Dataverse et GPT-4.1 - du data model au support ancré dans les connaissances.
Soixante-dix pour cent des tickets de support IT de niveau 1 ont une solution documentée quelque part dans la knowledge base. Le problème n'est pas un manque de réponses : c'est que les employés ne les trouvent pas assez vite, et les équipes helpdesk passent des heures à répéter les mêmes étapes de troubleshooting.
Et si un agent IA pouvait gérer cette première ligne de support ? Pas un chatbot avec des arbres de décision rigides, mais un agent ancré dans les connaissances qui comprend le langage naturel, recherche une knowledge base structurée, et guide les utilisateurs pas à pas vers la solution.
Cet article détaille la construction d'un tel agent, avec Microsoft Copilot Studio, Dataverse, et GPT-4.1 comme modèle d'orchestration. Aucun Power Automate flow. Aucun code custom. Uniquement de la configuration et un data model bien conçu.
Voyez le résultat
Avant de plonger dans les détails techniques, voici le résultat final. Le diagramme animé ci-dessous montre le flux de conversation complet, de la question à la résolution :
Le workflow complet de l'agent : question utilisateur, recherche KB en 1.87s, 5 étapes de dépannage, et création automatique de ticket si non résolu.
Et voici le vrai POC en action dans le test pane de Copilot Studio :
Capture non reproduite : elle contient un libellé d’environnement privé. Demo VPN troubleshooting Une requête VPN retourne une réponse ancrée, étape par étape, en moins de 2 secondes : zéro code, zéro flow.
Convaincu ? Voyons comment construire tout cela.
Vue d'ensemble de l'architecture
L'architecture suit un pattern simple mais puissant :
- Copilot Studio sert de couche IA conversationnelle : il reçoit les requêtes utilisateur, raisonne sur l'intention, et orchestre les appels d'outils
- Dataverse fournit le backend de données structurées : articles de knowledge base, enregistrements de tickets, et metadata de catégories
- GPT-4.1 alimente le moteur de raisonnement : comprend les requêtes, recherche les articles pertinents, et génère des instructions étape par étape
Question utilisateur
|
v
Copilot Studio (GPT-4.1)
|
+---> Dataverse : Recherche articles KB
| |
| v
| Retourne les articles correspondants
|
+---> Dataverse : Creer/Mettre a jour tickets
|
v
Reponse ancree + Citations sources
Architecture de bout en bout : la requête utilisateur transite par Copilot Studio (GPT-4.1), qui orchestre la recherche dans la knowledge base et les opérations tickets via les connecteurs Dataverse natifs.
La décision architecturale clé : zéro flow. Chaque opération de données passe par les actions native du connecteur Dataverse de Copilot Studio (List rows, Add row, Get row, Update row). Cela élimine la complexité de gestion des Power Automate flows, des connection references, et du solution layering.
Étape 1 : Le Data Model
Les trois tables Dataverse et leurs relations : Categories alimentent les KB Articles et les Tickets via des champs lookup.
Trois tables Dataverse forment l'ossature du système.
Table Categories (pblab_category)
Une table de lookup simple qui organise les connaissances et tickets par domaine.
| Colonne | Type | Usage |
|---|---|---|
pblab_name | Text (Primary) | Nom de la catégorie |
pblab_description | Text | Ce que couvre la catégorie |
pblab_icon | Text | Icône emoji pour l'affichage |
Catégories alimentées : Network & VPN, Account & Password, Hardware & Printing, Email & Calendar, Security & Compliance, Software & Licensing, Onboarding.
Table Knowledge Base Articles (pblab_kbarticle)
C'est ici que réside l'intelligence de l'agent : des articles structurés avec des solutions étape par étape.
| Colonne | Type | Usage |
|---|---|---|
pblab_title | Text (Primary) | Titre de l'article |
pblab_content | Multiline Text | Contenu complet (Markdown) |
pblab_symptoms | Multiline Text | Mots-clés de symptômes recherchables |
pblab_category | Lookup | Lien vers la catégorie |
pblab_difficulty | Choice | Easy / Medium / Hard |
pblab_platform | Choice | Windows / macOS / Both / Mobile |
pblab_estimatedtime | Text | Estimation du temps de résolution |
Le champ pblab_symptoms est l'arme secrète. En le remplissant avec des variations en langage naturel de la façon dont les utilisateurs décrivent leurs problèmes ("VPN won't connect", "can't reach internal sites", "network timeout"), la recherche de l'agent devient considérablement plus précise.
Table Tickets (pblab_ticket)
Pour suivre les incidents qui nécessitent une intervention humaine ou ne peuvent pas être résolus par la knowledge base seule.
| Colonne | Type | Usage |
|---|---|---|
pblab_title | Text (Primary) | Résumé du ticket |
pblab_description | Multiline Text | Description complète du problème |
pblab_status | Choice | New / In Progress / Waiting / Resolved / Closed |
pblab_priority | Choice | Low / Medium / High / Critical |
pblab_category | Lookup | Lien vers la catégorie |
pblab_resolution | Multiline Text | Comment le problème a été résolu |
Étape 2 : Alimentation des données avec Python + Dataverse Web API
Une knowledge base vide est inutile. Alimenter des données réalistes dès le départ est essentiel pour tester et démontrer l'agent.
L'approche : des scripts Python qui s'authentifient via des tokens Azure CLI et poussent les enregistrements à travers la Dataverse Web API. Pas de dépendance SDK, pas de configuration de service principal : juste des appels HTTP avec un bearer token.
Pattern d'authentification
import subprocess
import json
import requests
def get_dataverse_token(org_url):
"""Obtenir un access token Dataverse via Azure CLI."""
result = subprocess.run(
["az", "account", "get-access-token",
"--resource", org_url,
"--query", "accessToken", "-o", "tsv"],
capture_output=True, text=True
)
return result.stdout.strip()
ORG_URL = "https://your-org.crm.dynamics.com"
token = get_dataverse_token(ORG_URL)
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json",
"OData-MaxVersion": "4.0",
"OData-Version": "4.0",
"Prefer": "return=representation"
}
Alimentation des articles Knowledge Base
articles = [
{
"pblab_title": "VPN Connection Troubleshooting",
"pblab_content": """## VPN Connection Issues
### Quick Fix Steps
1. Disconnect and reconnect the VPN client
2. Check your internet connection is stable
3. Restart the VPN application
4. Verify your credentials have not expired
5. Try connecting to a different VPN server
### Advanced Troubleshooting
- Clear DNS cache: `ipconfig /flushdns`
- Reset network adapter: Settings > Network > Advanced
- Check if split tunneling is configured correctly
- Verify the VPN gateway is reachable: `ping vpn.company.com`
### Common Error Codes
- **Error 800**: VPN server unreachable — check firewall
- **Error 691**: Invalid credentials — reset password
- **Error 812**: Authentication method mismatch — contact IT""",
"pblab_symptoms": "VPN not connecting, can't reach internal sites, "
"network timeout, remote access broken, tunnel failed",
"pblab_difficulty": yourorg_difficulty_easy, # Valeur choice
"pblab_platform": yourorg_platform_windows,
"pblab_estimatedtime": "5-10 minutes",
"pblab_Category@odata.bind": f"/pblab_categories({network_category_id})"
},
# ... 11 articles supplementaires couvrant passwords, printers,
# Outlook, MFA, onboarding, etc.
]
for article in articles:
response = requests.post(
f"{ORG_URL}/api/data/v9.2/pblab_kbarticles",
headers=headers,
json=article
)
print(f"Cree: {article['pblab_title']} — {response.status_code}")
Au total, 12 articles de knowledge base ont été alimentés couvrant les scénarios de support IT les plus courants : troubleshooting VPN, password resets, configuration d'imprimantes, configuration Outlook, MFA enrollment, installation de logiciels, onboarding des nouveaux employés, et plus encore.
Étape 3 : Configuration de l'agent
Création de l'agent dans Copilot Studio
L'agent est créé dans Copilot Studio avec GPT-4.1 comme modèle d'orchestration : le dernier modèle disponible, offrant un meilleur suivi des instructions et une utilisation des outils améliorée par rapport à GPT-4o.
Capture non reproduite : elle contient un libellé d’environnement privé. Vue d'ensemble de l'agent dans Copilot Studio L'IT Help Desk Assistant dans Copilot Studio, avec les instructions personnalisées et la sélection du modèle GPT-4.1.
L'élément critique est les system instructions, le prompt qui façonne le comportement de l'agent. Voici la structure qui fonctionne bien :
You are the IT Help Desk Assistant, an AI-powered support agent.
ROLE: Provide first-line IT support by searching the knowledge base
and guiding users through solutions step by step.
BEHAVIOR:
1. When a user describes a problem, search the knowledge base first
2. If a matching article is found, present the solution step by step
3. Always cite the source article title
4. If no article matches, offer to create a support ticket
5. Ask clarifying questions when the problem is ambiguous
TONE: Professional, patient, helpful. Use numbered steps for
instructions. Avoid jargon when possible.
KNOWLEDGE SOURCES:
- Dataverse table: pblab_kbarticle (search by symptoms and title)
- Dataverse table: pblab_category (for categorization)
- Dataverse table: pblab_ticket (for ticket creation)
Mise à jour des instructions via API
Pour les mises à jour programmatiques des instructions de l'agent (utile pendant le développement itératif), la Dataverse Web API expose l'entité botcomponent. Les instructions GPT se trouvent dans un composant de type 15 :
# Recuperer le composant GPT
filter_url = (
f"{ORG_URL}/api/data/v9.2/botcomponents"
f"?$filter=_parentbotid_value eq '{bot_id}'"
f" and componenttype eq 15"
f"&$select=botcomponentid,content"
)
response = requests.get(filter_url, headers=headers)
component = response.json()["value"][0]
# Mettre a jour les instructions
import json
content = json.loads(component["content"])
content["instructions"] = new_instructions
requests.patch(
f"{ORG_URL}/api/data/v9.2/botcomponents({component['botcomponentid']})",
headers=headers,
json={"content": json.dumps(content)}
)
Ajout des Knowledge Sources
Dans Copilot Studio, naviguer vers Knowledge et ajouter les tables Dataverse comme sources de connaissances. L'agent les utilisera pour ancrer ses réponses :
- Ajouter
pblab_kbarticle: c'est la source de connaissances principale - Configurer les colonnes recherchables :
pblab_title,pblab_content,pblab_symptoms - L'agent recherchera automatiquement dans ces colonnes lors des réponses aux questions
Capture non reproduite : elle contient un libellé d’environnement privé. Sources de recherche knowledge base Le panneau Knowledge search sources affichant les résultats ITKnowledgeBase retournés depuis Dataverse.
Étape 4 : Dataverse Tools et configuration DLP
Ajout des Connector Actions
Copilot Studio peut appeler Dataverse directement à travers les connector actions. Dans la configuration de l'agent, ajouter les actions suivantes depuis le connecteur Microsoft Dataverse :
- List rows : rechercher et filtrer les articles knowledge base
- Get a row by ID : récupérer les détails complets d'un article
- Add a new row : créer des tickets de support
- Update a row : mettre à jour le statut des tickets
Ces actions donnent à l'agent une capacité CRUD complète sur les tables Dataverse sans un seul Power Automate flow.
Capture non reproduite : elle contient un libellé d’environnement privé. Page Tools de Copilot Studio La page Tools listant les cinq connector actions Dataverse configurées pour l'agent.
Capture non reproduite : elle contient un libellé d’environnement privé. Sélecteur d'actions du connecteur Dataverse Le sélecteur d'actions du connecteur Dataverse : sélection de List rows, Get row, Add row et Update row pour les opérations zéro-flow.
L'obstacle DLP
Dans de nombreux environnements, les DLP policies catégorisent les connecteurs en groupes Business et Non-Business. Quand un agent Copilot Studio essaie d'utiliser des connecteurs des deux groupes simultanément, la DLP policy bloque la requête.
La correction implique de vérifier la configuration DLP de l'environnement. En utilisant la Power Platform BAP (Business Application Platform) API :
# Verifier les DLP policies actuelles
policy_url = (
"https://api.bap.microsoft.com/providers/"
"Microsoft.BusinessAppPlatform/scopes/admin/"
"apiPolicies?api-version=2016-11-01"
)
# Chercher le parametre defaultApiGroup
# Si le connecteur HTTP de Copilot Studio est en "lbi" (Non-Business)
# mais que Dataverse est en "hbi" (Business), ils ne peuvent pas
# etre utilises ensemble
# Solution : Deplacer les connecteurs requis dans le meme groupe
# ou ajuster le defaultApiGroup pour les nouveaux connecteurs
L'insight clé : quand defaultApiGroup est défini sur lbi (Non-Business), tout nouveau connecteur non classifié atterrit automatiquement dans le groupe Non-Business, ce qui entre en conflit avec Dataverse dans le groupe Business. Changer defaultApiGroup en hbi résout le conflit.
Synthèse
Avec tout configuré, l'agent trouve l'article pertinent en matchant les symptômes, extrait les étapes applicables, et propose une escalade, le tout sans aucune orchestration de flow. La démo complète est visible en début d'article.
Prochaines étapes
Ce proof of concept valide l'architecture. Plusieurs améliorations sont dans la roadmap :
- Debugging CRUD : les connector actions Dataverse retournent actuellement des erreurs 400 sur certaines opérations. La cause probable est le field mapping ou la syntaxe de filtre OData qui nécessite un ajustement dans la configuration des connector actions
- Déploiement Teams : publier l'agent dans Microsoft Teams comme personal app, le rendant accessible depuis la sidebar Teams
- Adaptive Cards : remplacer les réponses en texte brut par des layouts Adaptive Card enrichis montrant les metadata d'article, des badges de difficulté, et des formulaires de ticket interactifs
- Boucle de feedback : permettre aux utilisateurs de noter l'utilité des articles, alimentant les données en retour dans un scoring de qualité des articles
- Auto-catégorisation : utiliser GPT-4.1 pour catégoriser et prioriser automatiquement les tickets en fonction du contexte de la conversation
Points clés à retenir
-
Copilot Studio + Dataverse est une combinaison puissante pour construire des agents ancrés dans les connaissances. Les connector actions native éliminent entièrement le besoin de Power Automate flows.
-
Le data model design compte plus que le prompt engineering. Un champ symptoms bien structuré avec des variations en langage naturel fait plus pour la précision de recherche que des system prompts élaborés.
-
Alimenter des données réalistes tôt. Les scripts Python avec authentification Azure CLI facilitent le remplissage programmatique des tables Dataverse, plus rapide que la saisie manuelle et reproductible entre environnements.
-
Les DLP policies sont le bloqueur caché. Dans les environnements enterprise, toujours vérifier la configuration DLP avant de construire des agents qui utilisent plusieurs connecteurs. Le paramètre
defaultApiGroupest le coupable le plus fréquent. -
L'architecture zéro-flow simplifie tout. Pas de connection references à gérer, pas de flow failures à débugger, pas de solution layering headaches. L'agent gère toutes les opérations de données directement.
Le pattern d'agent IT helpdesk est réplicable dans tout domaine avec des connaissances structurées : politiques RH, procédures financières, gestion des installations. La seule exigence est un data model bien conçu et du contenu de qualité dans la knowledge base.