Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les hooks sont des points de contrôle personnalisés qui interceptent et contrôlent le comportement de l’agent à des moments clés. Utilisez des hooks pour appliquer des contrôles qualité sur les réponses de l’agent, auditer et contrôler l’utilisation des outils, bloquer les opérations dangereuses en appliquant des stratégies, et empêcher une fin de tâche prématurée en validant la sortie de l’agent.
Le problème que les hooks d'agent résolvent
Votre agent exécute des tâches de manière autonome en examinant les incidents, en exécutant des outils et en générant des réponses. Mais l’autonomie sans surveillance crée des risques :
- Réponses incomplètes : L’agent dit « terminé » avant de traiter tout ce que vous avez demandé.
- Utilisation des outils non vérifiés : vous n’avez aucune visibilité sur les outils que l’agent appelle ou les résultats qu’il obtient.
- Pas d'application de la politique : les opérations dangereuses (commandes destructrices, modifications non autorisées) ne sont pas contrôlées.
- Lacunes de qualité : les réponses ne manquent pas d’informations critiques, car il n’y a pas d’étape de validation.
Vous avez besoin d’un moyen d’intercepter le comportement de l’agent à des moments clés sans le ralentir ou supprimer entièrement son autonomie.
Fonctionnement des hooks d’agent
Les hooks sont des points de contrôle personnalisés que vous attachez à des événements spécifiques de l’agent. Lorsqu’un événement se déclenche, votre hook évalue la situation et décide d’autoriser ou de bloquer l’action.
Agent about to stop → Stop hook evaluates response → Allow or reject
Agent uses a tool → PostToolUse hook checks result → Allow, block, or inject context
Deux événements de hook sont actuellement pris en charge :
| Événement | Se déclenche lorsque | Ce que vous pouvez faire |
|---|---|---|
| Arrêter | L’agent est sur le point de retourner une réponse finale | Valider l’exhaustivité, rejeter et forcer l’agent à continuer |
| PostToolUse | Un outil a terminé son exécution avec succès. | Auditer l’utilisation, bloquer les résultats, injecter un contexte supplémentaire |
Deux niveaux de crochets
Les crochets fonctionnent à deux niveaux :
| Niveau | Où configurer | Étendue |
|---|---|---|
| Niveau de l’agent | Builder → Hooks dans le portail | S’applique à l’ensemble de l’agent, y compris tous les threads et tout agent personnalisé |
| Niveau d’agent personnalisé | Canevas de l’agent → agent personnalisé → Gérer les hooks ou via l’API REST v2 | S’applique uniquement lorsque cet agent personnalisé spécifique s’exécute |
Les deux niveaux peuvent coexister. Si un hook de niveau agent et un hook de niveau agent personnalisé correspondent tous deux au même événement, les deux s’exécutent. Les crochets au niveau de l’agent se déclenchent en premier.
Types d’exécutions
Vous pouvez implémenter des hooks à l’aide d’un LLM ou d’un script shell :
| Type | Fonctionnement | Idéal pour |
|---|---|---|
| Prompt | Un LLM évalue votre requête et retourne une décision JSON | Validation nuanceée (« Cette réponse est-elle terminée ? ») |
| Commande | Un script Bash ou Python s’exécute dans un environnement en bac à sable (sandbox) | Vérifications déterministes, application de stratégie, audit |
Hooks de prompt sont puissants pour une évaluation subjective, comme vérifier si une réponse traite toutes les préoccupations de l’utilisateur ou si une investigation est suffisamment approfondie. Ils utilisent l’espace réservé $ARGUMENTS pour recevoir le contexte complet du hook. S’il $ARGUMENTS n’est pas présent dans l’invite, le contexte est ajouté automatiquement. Lorsqu’une transcription de conversation est disponible, les hooks de type prompt reçoivent également les outils ReadFile et GrepSearch, ce qui permet au LLM de raisonner sur l’historique complet de la conversation.
Les crochets de commande sont préférables pour les vérifications déterministes, telles que la validation qu’une réponse contient des marqueurs requis, le blocage des commandes dangereuses ou l’utilisation de l’outil de journalisation sur un système externe.
Comportement de l’agent avec et sans crochets
Le tableau suivant compare le comportement de l’agent avec et sans hooks.
| Sans crochets | Avec des crochets |
|---|---|
| L’agent décide quand il est « terminé » | Vous définissez ce que signifie « terminé » |
| L’utilisation des outils est invisible | Chaque appel d’outil peut être audité |
| Les commandes dangereuses s'exécutent silencieusement. | L’application de la stratégie les bloque automatiquement |
| La qualité dépend de l’ingénierie rapide seule | Les portes de qualité automatisées interceptent les lacunes |
Les hooks ne remplacent pas les contrôles de sécurité du mode d'exécution. Au lieu de cela, ils les complètent. Les modes d’exécution contrôlent ce que l’agent peut faire. Les hooks contrôlent la qualité de l’exécution et ce qu’il advient des résultats.
Avant et après l'ajout de hooks d'agent
| Scénario | Avant | Après |
|---|---|---|
| Qualité de la réponse | L’agent s’arrête quand il pense qu’il est terminé | Votre crochet d’arrêt valide l’exhaustivité avant que la réponse atteigne les utilisateurs |
| Visibilité des outils | Aucune piste d’audit de l’exécution de l’outil | Les hooks PostToolUse consignent et vérifient chaque appel d’outil. |
| Mise en application de la politique | Les commandes dangereuses s’exécutent sans vérification | Les scripts bloquent automatiquement rm -rf, sudo, et d'autres modèles à risque. |
| Assurance qualité | L’ingénierie prompte est votre seul levier | Les hooks basés sur LLM évaluent les nuances ; les scripts appliquent des règles déterministes |
Configurer les hooks d’agent
Créez des hooks via l’interface utilisateur du portail :
- Crochets au niveau de l’agent : Accédez à Builder → Hooks → sélectionnez Créer un hook.
- Crochets au niveau de l’agent personnalisé : Accédez à Agent Canvas → sélectionnez un agent personnalisé → Gérer les hooks.
Pour obtenir des instructions pas à pas, consultez Créer et gérer des hooks dans le portail.
Conseil / Astuce
Vous pouvez également configurer des hooks via l’API REST v2 à l’aide PUT /api/v2/extendedAgent/agents/{agentName}de . Le format YAML dans la section suivante montre le schéma de configuration complet. Pour en savoir plus, consultez le didacticiel sur l’API.
L’onglet Agent Canvas YAML affiche le format v1 et ne montre pas les hooks. Utilisez la page Hooks sous Générateur pour afficher et gérer les crochets.
L’exemple suivant montre une configuration de hook complète :
api_version: azuresre.ai/v2
kind: ExtendedAgent
metadata:
name: my_hooked_agent
spec:
instructions: |
You are a helpful assistant.
handoffDescription: ""
enableVanillaMode: true
hooks:
Stop:
- type: prompt
prompt: |
Check if the response ends with "Task complete."
$ARGUMENTS
Respond with:
- {"ok": true} if it does
- {"ok": false, "reason": "End your response with 'Task complete.'"} if not
timeout: 30
PostToolUse:
- type: command
matcher: "Bash|ExecuteShellCommand"
timeout: 30
failMode: block
script: |
#!/usr/bin/env python3
import sys, json, re
context = json.load(sys.stdin)
command = context.get('tool_input', {}).get('command', '')
dangerous = [r'\brm\s+-rf\b', r'\bsudo\b', r'\bchmod\s+777\b']
for pattern in dangerous:
if re.search(pattern, command):
print(json.dumps({"decision": "block", "reason": f"Blocked: {pattern}"}))
sys.exit(0)
print(json.dumps({"decision": "allow"}))
Format de réponse des hooks
Les hooks doivent générer JSON. Deux formats sont pris en charge :
Format simple (recommandé pour les hooks de prompt) :
{"ok": true}
{"ok": false, "reason": "Please include more details."}
Format développé (recommandé pour les hooks de commande) :
{"decision": "allow"}
{"decision": "block", "reason": "Dangerous command detected."}
{"decision": "allow", "hookSpecificOutput": {"additionalContext": "Tool audit logged."}}
Les crochets de commande peuvent également utiliser des codes de sortie au lieu de la sortie JSON :
| Code de sortie | Comportement |
|---|---|
0 sans sortie |
Autoriser (aucune objection) |
0 avec JSON |
Analyser JSON pour la décision |
2 |
Toujours bloquer. stderr devient la raison |
| Autres | Utilise le paramètre failMode (allow ou block) |
Avertissement
Pour les crochets Stop, un rejet sans raison est traité comme une approbation, et l’agent s’arrête normalement. Fournissez toujours un reason champ lors du rejet.
Note
Vous pouvez définir plusieurs hooks pour le même événement. Pour PostToolUse, chaque crochet avec un modèle correspondant matcher s’exécute indépendamment. Si plusieurs hooks fournissent additionalContext, le contexte du dernier hook est injecté dans la conversation.
Référence de configuration
Le tableau suivant décrit toutes les options de configuration de hook disponibles.
| Choix | Type | Par défaut | Description |
|---|---|---|---|
type |
ficelle | prompt |
prompt ou command |
prompt |
ficelle | (aucun) | Texte de prompt LLM (requis pour les hooks de prompt). Utiliser $ARGUMENTS pour l’injection de contexte. |
command |
ficelle | (aucun) | Commande shell inline (pour les hooks de commande, mutuellement exclusif avec script). |
script |
ficelle | (aucun) | Script multi-lignes (pour les hooks de commande, mutuellement exclusif avec command). |
matcher |
ficelle | (aucun) | Modèle Regex pour les noms d’outils (requis pour les hooks PostToolUse).
* correspond à tous les outils. Les modèles sont ancrés comme ^(pattern)$ et sont évalués en respectant la casse. Vide ou null ne correspond à rien. |
timeout |
int | 30 |
Délai d’expiration de l’exécution en secondes (doit être positif ; les valeurs supérieures à 300 sont marquées pendant la validation CLI). |
failMode |
ficelle | allow |
Comment gérer les erreurs de hook : allow ou block. |
model |
ficelle | ReasoningFast |
Modèle pour les hooks de prompt (nom du scénario ou nom du déploiement). |
maxRejections |
int |
3 (agent par défaut) |
Nombre maximal de rejets avant l'arrêt forcé. Plage : 1 à 25. S’applique uniquement aux hooks Stop de type prompt. Les crochets d’arrêt de type commande n’ont aucune limite implicite. Lorsque plusieurs hooks d’invite spécifient des valeurs différentes, la valeur maximale est utilisée. |
Schéma de contexte de hook
Les hooks reçoivent un contexte JSON structuré sur l’événement actuel.
Hooks de prompt reçoivent le contexte via l’espace réservé $ARGUMENTS dans le texte du prompt.
Les hooks de commande reçoivent le contexte en tant que JSON sur stdin.
Pour les deux types de hooks, le champ execution_summary contient un chemin de fichier vers la transcription de la conversation (et non un contenu inline). Pour les hooks de prompt, le LLM reçoit les outils ReadFile et GrepSearch pour accéder à ce fichier. Pour les hooks de commande, le fichier est disponible à l'emplacement spécifié dans le sandbox.
Champs communs
Tous les hooks reçoivent les champs suivants :
{
"hook_event_name": "Stop",
"agent_name": "my_agent",
"current_turn": 5,
"max_turns": 50,
"execution_summary": "/path/to/transcript.txt"
}
Champs des hooks Stop
Les hooks Stop reçoivent des champs supplémentaires concernant la sortie finale de l’agent.
{
"final_output": "Here is my response...",
"stop_hook_active": false,
"stop_rejection_count": 0
}
Champs des hooks PostToolUse
Les hooks PostToolUse reçoivent des informations supplémentaires sur l'exécution de l’outil.
{
"tool_name": "ExecutePythonCode",
"tool_input": { "code": "print(2+2)" },
"tool_result": "4",
"tool_succeeded": true
}
Niveaux de modèle
Les hooks de requête utilisent un modèle d'IA pour évaluer le comportement de l'agent. Vous pouvez sélectionner le niveau de modèle que le hook utilise, équilibrer la qualité de l’évaluation par rapport aux coûts et à la latence.
| Niveau | Idéal pour | Compromis |
|---|---|---|
| Reasoning | Application complexe des politiques, validation en plusieurs étapes, vérifications de conformité nuancées | Qualité la plus élevée, coût et latence plus élevés |
| Raisonnement rapide (valeur par défaut) | La plupart des points d’ancrage, validation des réponses, vérifications d’audit, application des règles de sécurité | Bon raisonnement avec une faible latence |
| Usage général | Vérifications de format simple, validation de conformité de base | Précision équilibrée, coût et vitesse |
| Rapide | Vérifications légères, validation de présence, vérification de format | Coût le plus bas, réponse la plus rapide |
| Contexte long | Hooks qui traitent des volumes de sortie importants, analyse complète de documents, résultats d’outils détaillés | Prend en charge des volumes de données d’entrée plus importants, à un coût plus élevé |
Conseil / Astuce
Les hooks utilisent Fast Reasoning par défaut, car ils s’exécutent à chaque réponse de l’agent ou appel d’outil, donc une faible latence est importante. Utilisez Reasoning uniquement pour les hooks qui appliquent des politiques complexes lorsque la précision est essentielle.
Limites
Les limites suivantes s’appliquent aux hooks d’agent.
| Limite | Valeur |
|---|---|
| Taille du script | 64 Ko maximum |
| Expiration du délai | 1 à 300 secondes |
| Nombre maximal de rejets (hooks Stop de type prompt) | 1 à 25 (par défaut : 3) |
| Shebangs de script pris en charge |
#!/bin/bash, #!/usr/bin/env python3 |
| Environnement d’exécution de script | Interpréteur de code dans un environnement sandbox |
Exemple : Auditer toute l’utilisation de l’outil
Le hook PostToolUse suivant enregistre chaque appel d’outil et ajoute un message de contexte d’audit :
hooks:
PostToolUse:
- type: command
matcher: "*"
timeout: 30
failMode: allow
script: |
#!/usr/bin/env python3
import sys, json
context = json.load(sys.stdin)
tool_name = context.get('tool_name', 'unknown')
print(f"Tool used: {tool_name}", file=sys.stderr)
output = {
"decision": "allow",
"hookSpecificOutput": {
"additionalContext": f"[AUDIT] Tool '{tool_name}' was executed."
}
}
print(json.dumps(output))
Le additionalContext champ est ajouté en tant que message utilisateur dans la conversation, ce qui donne à l’agent une visibilité sur la piste d’audit.
Exemple : Exiger un marqueur d’achèvement
Le crochet d’arrêt suivant rejette les réponses qui ne se terminent pas par « Tâche terminée ».
hooks:
Stop:
- type: command
timeout: 30
failMode: allow
script: |
#!/bin/bash
CONTEXT=$(cat)
FINAL_OUTPUT=$(echo "$CONTEXT" | jq -r '.final_output // empty')
if [[ "$FINAL_OUTPUT" == *"Task complete."* ]]; then
exit 0
else
echo "Please end your response with 'Task complete.'" >&2
exit 2
fi
Bonnes pratiques
Lorsque vous configurez des hooks d’agent :
- Fournissez toujours une raison lors du rejet. Traitez les rejet sans motifs comme des approbations.
- Les accroches logicielles de longue durée ralentissent l'exécution de l'agent ; utilisez donc des délais d'expiration appropriés.
-
Gérer correctement les erreurs : utilisez
failMode: allowsauf si une application stricte est requise. - Soyez précis avec les matchers : des matchers PostToolUse trop larges peuvent entraîner des problèmes de performance.
-
Testez les hooks de manière approfondie : les hooks qui rejettent systématiquement peuvent provoquer des boucles (atténuées par
maxRejections). - Connectez-vous à stderr : utilisez stderr pour déboguer la sortie. Le système analyse stdout comme le résultat du hook.
Essayez vous-même les hooks d'agent
La capture d’écran suivante montre un crochet d’arrêt en action. L’agent répond initialement avec seulement « 4 », mais le crochet rejette la réponse, car le marqueur d’achèvement est manquant. L’agent continue ensuite et ajoute le marqueur.
Get started
| Ressource | Ce que vous apprenez |
|---|---|
| Créer et gérer les hooks (portail) | Créez des hooks visuellement dans l’interface utilisateur du portail, aucun appel d’API n’est nécessaire. |
| Configurer des hooks d’agent (API) | Configurez des raccordements à l’aide de l’API REST v2 et YAML. |
Contenu connexe
| Capacité | Comment il se rapporte |
|---|---|
| Modes d’exécution | Les hooks complètent les contrôles de sécurité du mode d’exécution. Les modes contrôlent ce qui s'exécute, les hooks contrôlent la façon dont cela s'exécute. |
| Outils Python | Créez des outils personnalisés que les hooks peuvent auditer et valider. |