Foundry Agent Sync
Vue d'ensemble
Créez et synchronisez des agents IA basés sur des prompts directement dans Azure AI Foundry via l'API REST du service Agent. Cette compétence enregistre les agents dans le service Foundry lui-même — les rendant immédiatement disponibles pour l'invocation, l'évaluation et la gestion via le portail Foundry ou l'API. Chaque agent est créé ou mis à jour de manière idempotente via un appel POST nommé, en utilisant des définitions provenant d'un fichier manifeste JSON local.
Distinction clé : Cette compétence crée des agents dans AI Foundry (côté serveur). Elle ne génère pas de code agent local ni d'images de conteneur — pour cela, utilisez la sous-compétence
createde la compétencemicrosoft-foundry.
Prérequis
L'utilisateur doit disposer de :
- Un projet Azure AI Foundry avec un modèle déployé (par ex.
gpt-5-4) - Azure CLI (
az) authentifiée avec accès au projet Foundry - Le rôle Azure AI User (ou supérieur) sur la ressource du projet Foundry
Rassemblez ces valeurs avant de continuer :
| Valeur | Comment l'obtenir |
|---|---|
| Endpoint du projet Foundry | Portail Azure → Projet AI Foundry → Vue d'ensemble → Endpoint, ou az resource show |
| ID d'abonnement | az account show --query id -o tsv |
| Nom du déploiement du modèle | Le nom du modèle déployé dans le projet Foundry (par ex. gpt-5-4) |
Format du manifeste
Le manifeste est un tableau JSON où chaque entrée définit un agent. Cherchez-le aux chemins courants : infra/foundry-agents.json, foundry-agents.json, ou .foundry/agents.json. S'il n'existe pas, générez-en un.
[
{
"useCaseId": "alert-triage",
"description": "Short description of what this agent does.",
"baseInstruction": "You are an assistant that... <system prompt for the agent>"
}
]
Référence des champs
| Champ | Requis | Description |
|---|---|---|
useCaseId |
Oui | Identifiant en kebab-case ; utilisé pour construire le nom de l'agent ({prefix}-{useCaseId}) |
description |
Oui | Description lisible stockée en tant que métadonnée de l'agent |
baseInstruction |
Oui | Prompt système / instructions de base pour l'agent |
Script de synchronisation
PowerShell (interactif / CI)
Créez ou localisez le script de synchronisation. Le chemin canonique est infra/scripts/sync-foundry-agents.ps1 mais adaptez à la disposition du repo.
param(
[Parameter(Mandatory)]
[string]$SubscriptionId,
[Parameter(Mandatory)]
[string]$ProjectEndpoint,
[string]$ManifestPath = (Join-Path $PSScriptRoot '..\foundry-agents.json'),
[string]$ModelName = 'gpt-5-4',
[string]$AgentNamePrefix = 'myproject',
[string]$ApiVersion = '2025-11-15-preview'
)
$ErrorActionPreference = 'Stop'
# Optional: append a common instruction suffix to every agent
$commonSuffix = ''
az account set --subscription $SubscriptionId | Out-Null
$accessToken = az account get-access-token --resource https://ai.azure.com/ --query accessToken -o tsv
if (-not $accessToken) { throw 'Failed to acquire Foundry access token.' }
$definitions = Get-Content -Raw -Path $ManifestPath | ConvertFrom-Json
$headers = @{ Authorization = "Bearer $accessToken" }
$results = @()
foreach ($def in $definitions) {
$agentName = "$AgentNamePrefix-$($def.useCaseId)"
$instructions = if ($commonSuffix) { "$($def.baseInstruction)`n`n$commonSuffix" } else { $def.baseInstruction }
$body = @{
definition = @{ kind = 'prompt'; model = $ModelName; instructions = $instructions }
description = $def.description
metadata = @{ useCaseId = $def.useCaseId; managedBy = 'foundry-agent-sync' }
} | ConvertTo-Json -Depth 8
$uri = "$($ProjectEndpoint.TrimEnd('/'))/agents/$agentName`?api-version=$ApiVersion"
$resp = Invoke-RestMethod -Method Post -Uri $uri -Headers $headers -ContentType 'application/json' -Body $body
$version = $resp.version ?? $resp.latest_version ?? $resp.id ?? 'unknown'
Write-Host "Synced $agentName ($version)"
$results += [pscustomobject]@{ name = $agentName; version = $version }
}
$results | Format-Table -AutoSize
Bash (script de déploiement Bicep / CI)
Pour un déploiement automatisé via Microsoft.Resources/deploymentScripts, utilisez un script bash qui :
- S'authentifie avec une identité managée :
az login --identity --username "$CLIENT_ID" - Acquiert un token Foundry :
az account get-access-token --resource https://ai.azure.com/ - Itère les définitions à partir de la variable d'environnement
FOUNDRY_AGENT_DEFINITIONS(chaîne JSON) - Effectue un POST de chaque agent vers
{endpoint}/agents/{name}?api-version=2025-11-15-preview
Intégration Bicep (optionnel)
Pour exécuter la synchronisation automatiquement lors du déploiement de l'infrastructure :
-
Chargez le manifeste au moment de la compilation :
var agentDefinitions = loadJsonContent('foundry-agents.json') -
Créez une identité managée affectée par l'utilisateur avec le rôle Azure AI User sur le projet Foundry.
-
Créez une ressource
Microsoft.Resources/deploymentScripts(typeAzureCLI) qui :- Utilise l'identité managée
- Charge le script bash de synchronisation via
loadTextContent - Transmet l'endpoint du projet, les définitions et le modèle en tant que variables d'environnement
Contrôlez l'accès via un paramètre deployFoundryAgents pour que les équipes puissent accepter ou refuser.
Flux de travail
Étape 1 — Localisez ou générez le manifeste
Recherchez foundry-agents.json dans le repo. S'il n'existe pas, demandez à l'utilisateur quels agents il a besoin et créez le manifeste.
Étape 2 — Localisez ou générez le script de synchronisation
Recherchez sync-foundry-agents.ps1 ou foundry-agent-sync.sh. S'il manque, créez le script PowerShell à l'aide du modèle ci-dessus, en adaptant :
$AgentNamePrefixpour correspondre au nom du projet$ModelNameau modèle déployé de l'utilisateur$ManifestPathà la localisation réelle du manifeste
Étape 3 — Rassemblez les paramètres
Demandez à l'utilisateur :
- Endpoint du projet Foundry
- ID de l'abonnement
- Nom du déploiement du modèle (par défaut :
gpt-5-4) - Préfixe du nom d'agent (par défaut : nom du repo en kebab-case)
Étape 4 — Exécutez la synchronisation
Exécutez le script PowerShell avec les paramètres rassemblés :
.\infra\scripts\sync-foundry-agents.ps1 `
-SubscriptionId '<sub-id>' `
-ProjectEndpoint '<endpoint>' `
-ModelName '<model>' `
-AgentNamePrefix '<prefix>'
Étape 5 — Vérifiez
Confirmez les agents synchronisés en les listant :
$token = az account get-access-token --resource https://ai.azure.com/ --query accessToken -o tsv
$endpoint = '<project-endpoint>'
Invoke-RestMethod -Uri "$endpoint/agents?api-version=2025-11-15-preview" `
-Headers @{ Authorization = "Bearer $token" }
Référence de l'API REST
| Opération | Méthode | URL |
|---|---|---|
| Créer/mettre à jour un agent | POST | {projectEndpoint}/agents/{agentName}?api-version=2025-11-15-preview |
| Lister les agents | GET | {projectEndpoint}/agents?api-version=2025-11-15-preview |
| Obtenir un agent | GET | {projectEndpoint}/agents/{agentName}?api-version=2025-11-15-preview |
| Supprimer un agent | DELETE | {projectEndpoint}/agents/{agentName}?api-version=2025-11-15-preview |
Charge utile de création/mise à jour
{
"definition": {
"kind": "prompt",
"model": "<deployed-model-name>",
"instructions": "<system prompt>"
},
"description": "<agent description>",
"metadata": {
"useCaseId": "<use-case-id>",
"managedBy": "foundry-agent-sync"
}
}
Dépannage
| Symptôme | Cause | Correctif |
|---|---|---|
401 Unauthorized |
Token expiré ou audience incorrect | Relancez az account get-access-token --resource https://ai.azure.com/ |
403 Forbidden |
Rôle Azure AI User manquant | Attribuez le rôle sur la portée du projet Foundry |
404 Not Found |
Endpoint du projet incorrect | Vérifiez que l'endpoint inclut /api/projects/{projectName} |
| Modèle non trouvé | Modèle non déployé dans le projet | Déployez d'abord le modèle dans le portail AI Foundry |
| Définitions vides | Chemin du manifeste incorrect | Vérifiez que -ManifestPath pointe vers le fichier JSON |