foundry-agent-sync

Par github · awesome-copilot

Créez et synchronisez des agents IA basés sur des prompts directement dans Azure AI Foundry via l'API REST, à partir d'un manifeste JSON local. Contrairement aux skills de scaffolding qui génèrent uniquement du code local, ce skill enregistre les agents dans le service Foundry lui-même — les rendant immédiatement disponibles pour l'invocation. À utiliser lorsque l'utilisateur souhaite créer des agents dans Foundry, synchroniser, déployer, enregistrer ou pousser des agents vers Foundry, mettre à jour les instructions d'un agent, ou générer le manifeste et le script de synchronisation pour un nouveau repository. Déclencheurs : 'create agent in foundry', 'sync foundry agents', 'deploy agents to foundry', 'register agents in foundry', 'push agents', 'create foundry agent manifest', 'scaffold agent sync'.

npx skills add https://github.com/github/awesome-copilot --skill foundry-agent-sync

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 create de la compétence microsoft-foundry.

Prérequis

L'utilisateur doit disposer de :

  1. Un projet Azure AI Foundry avec un modèle déployé (par ex. gpt-5-4)
  2. Azure CLI (az) authentifiée avec accès au projet Foundry
  3. 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 :

  1. S'authentifie avec une identité managée : az login --identity --username "$CLIENT_ID"
  2. Acquiert un token Foundry : az account get-access-token --resource https://ai.azure.com/
  3. Itère les définitions à partir de la variable d'environnement FOUNDRY_AGENT_DEFINITIONS (chaîne JSON)
  4. 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 :

  1. Chargez le manifeste au moment de la compilation :

    var agentDefinitions = loadJsonContent('foundry-agents.json')
  2. Créez une identité managée affectée par l'utilisateur avec le rôle Azure AI User sur le projet Foundry.

  3. Créez une ressource Microsoft.Resources/deploymentScripts (type AzureCLI) 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 :

  • $AgentNamePrefix pour correspondre au nom du projet
  • $ModelName au 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

Skills similaires