Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los hooks son puntos de control personalizados que interceptan y controlan el comportamiento del agente en momentos clave. Use enlaces para aplicar puertas de calidad en las respuestas del agente, auditar y controlar el uso de herramientas, bloquear operaciones peligrosas con la aplicación de directivas y evitar la finalización temprana de tareas mediante la validación de la salida del agente.
El problema.
El agente ejecuta tareas de forma autónoma, investigando incidentes, ejecutando herramientas y generando respuestas. Pero la autonomía sin supervisión crea riesgos:
- Respuestas incompletas: el agente dice "listo" antes de abordar todo lo que solicitó.
- Uso de herramientas no estudiados: no tiene visibilidad sobre qué herramientas llama el agente o qué resultados obtiene.
- Sin aplicación de directivas: las operaciones peligrosas (comandos destructivos, cambios no autorizados) continúan sin control.
- Brechas de calidad: las respuestas pierden información crítica porque no hay ningún paso de validación.
Necesita una manera de interceptar el comportamiento del agente en momentos clave sin ralentizarlo ni quitar completamente su autonomía.
Funcionamiento de los enlaces de agente
Los enlaces son puntos de control personalizados que se adjuntan a eventos específicos de un agente. Cuando se desencadena un evento, el enlace evalúa la situación y decide si se debe permitir o bloquear la acción.
Agent about to stop → Stop hook evaluates response → Allow or reject
Agent uses a tool → PostToolUse hook checks result → Allow, block, or inject context
Actualmente se admiten dos eventos de enlace:
| Event | Se activa cuando | Qué puede hacer |
|---|---|---|
| Parar | El agente está a punto de devolver una respuesta final | Validar la completitud, rechazar y obligar al agente a continuar |
| PostToolUse | Una herramienta termina de ejecutarse correctamente | Auditar el uso, bloquear los resultados, insertar contexto adicional |
Dos niveles de ganchos
Los ganchos operan en dos niveles:
| Level | Dónde configurar | Ámbito |
|---|---|---|
| Nivel de agente | Generador → enlaces en el portal | Se aplica a todo el agente, incluidos todos los subprocesos y todos los agentes personalizados. |
| Nivel de agente personalizado | Agent Canvas → Agente personalizado → Administrar enlaces o a través de la API REST v2 | Solo se aplica cuando se ejecuta ese agente personalizado específico. |
Ambos niveles pueden coexistir. Si un enlace de nivel de agente y un enlace de nivel de agente personalizado coinciden con el mismo evento, ambos se ejecutan. Los enlaces de nivel de agente se activan primero.
Tipos de ejecución
Puede implementar ganchos mediante un LLM o un script de shell.
| Tipo | Cómo funciona | Más adecuado para |
|---|---|---|
| Aviso | Un LLM evalúa el mensaje y devuelve una decisión JSON. | Validación matizada ("¿Está completa esta respuesta?") |
| Comando | Un script de Bash o Python se ejecuta en un entorno de espacio aislado | Comprobaciones deterministas, aplicación de directivas, auditoría |
Los enlaces de solicitud son eficaces para la evaluación subjetiva, como comprobar si una respuesta aborda todos los problemas del usuario o comprueba que una investigación era lo suficientemente exhaustiva. Usan el marcador de posición $ARGUMENTS para recibir el contexto completo del hook. Si $ARGUMENTS no está presente en la indicación, el contexto se anexa automáticamente. Cuando hay una transcripción de la conversación disponible, los enlaces de solicitud también reciben herramientas ReadFile y GrepSearch, lo que permite al LLM razonar acerca del historial completo de la conversación.
Los enlaces de comandos son mejores para las comprobaciones deterministas, como validar que una respuesta contiene marcadores necesarios, bloquear comandos peligrosos o usar herramientas de registro en un sistema externo.
Lo que hace que este enfoque sea diferente
En la siguiente tabla se compara el comportamiento del agente con y sin ganchos.
| Sin ganchos | Con ganchos |
|---|---|
| El agente decide cuándo está "terminado" | Tú defines lo que significa "hecho" |
| El uso de herramientas es invisible | Todas las llamadas a herramientas se pueden auditar |
| Los comandos peligrosos continúan silenciosamente | La aplicación de directivas las bloquea automáticamente |
| La calidad depende de la ingeniería de solicitudes por sí sola | Puertas de calidad automatizadas detectan huecos |
Los ganchos no reemplazan los controles de seguridad del modo de ejecución. Ellos los complementan. Los modos de ejecución controlan lo que el agente puede hacer. Los hooks controlan qué tan bien lo hace y lo que sucede con los resultados.
Antes y después
| Escenario | antes de | después de |
|---|---|---|
| Calidad de respuesta | El agente se detiene cuando cree que ha terminado | El gancho Stop valida la completitud antes de que la respuesta llegue a los usuarios. |
| Visibilidad de herramientas | No hay registro de auditoría de la ejecución de herramientas | Los enlaces PostToolUse registran y verifican cada llamada a una herramienta |
| Aplicación de directivas | Los comandos peligrosos se ejecutan sin supervisión | Los scripts bloquean rm -rf, sudoy otros patrones de riesgo automáticamente |
| Control de calidad | La ingeniería de solicitudes es su única herramienta | Los ganchos basados en LLM evalúan matices; los scripts imponen reglas deterministas |
Configuración de enlaces
La manera más fácil de crear enlaces es a través de la interfaz de usuario del portal:
- Enlaces de nivel de agente: Vaya a Generador → Enlaces → seleccione Crear enlace.
- Ganchos de nivel de agente personalizados: Ir a Lienzo del agente → seleccione un agente personalizado → Administrar ganchos.
Sugerencia
También puede configurar enlaces a través de la API REST v2 mediante PUT /api/v2/extendedAgent/agents/{agentName}. El formato YAML de la sección siguiente muestra el esquema de configuración completo. Para más información, consulte el tutorial de API.
La pestaña YAML del Lienzo del agente muestra el formato v1 y no incluye enlaces. Use la página Enlaces en Generador para ver y administrar enlaces.
En el ejemplo siguiente se muestra una configuración de enlace completa:
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"}))
Formato de respuesta del enlace
Los enlaces deben generar JSON. Se admiten dos formatos.
Formato simple (recomendado para enlaces de solicitud):
{"ok": true}
{"ok": false, "reason": "Please include more details."}
Formato expandido (recomendado para enlaces de comandos):
{"decision": "allow"}
{"decision": "block", "reason": "Dangerous command detected."}
{"decision": "allow", "hookSpecificOutput": {"additionalContext": "Tool audit logged."}}
Los enlaces de comandos también pueden usar códigos de salida en lugar de la salida JSON:
| Código de salida | Comportamiento |
|---|---|
0 sin salida |
Permitir (sin objeción) |
0 con JSON |
Análisis de JSON para la decisión |
2 |
Bloquea siempre. stderr se convierte en la causa |
| Otros | Usa la configuración failMode (allow o block) |
Precaución
En el caso de los enlaces de detención, un rechazo sin motivo se trata como aprobación y el agente se detiene normalmente. Proporcione siempre un reason campo al rechazar.
Nota:
Puede definir varios ganchos para el mismo evento. Para PostToolUse, cada gancho con un patrón coincidente matcher se ejecuta de manera independiente. Si varios hooks proporcionan additionalContext, el contexto del último hook se inserta en la conversación.
Referencia de configuración
En la tabla siguiente se describen todas las opciones de configuración de enlace disponibles.
| Opción | Tipo | Predeterminado | Descripción |
|---|---|---|---|
type |
cuerda / cadena | prompt |
prompt o command |
prompt |
cuerda / cadena | — | Texto de la solicitud del LLM (necesario para los enlaces de solicitud). Se usa $ARGUMENTS para la inyección de contexto. |
command |
cuerda / cadena | — | Comando de shell insertado (para enlaces de comandos, mutuamente excluyente con script). |
script |
cuerda / cadena | — | Script de varias líneas (para enlaces de comandos, mutuamente excluyente con command). |
matcher |
cuerda / cadena | — | Patrón regex para los nombres de herramientas (necesario para los ganchos de PostToolUse).
* es compatible con todas las herramientas. Los patrones se anclan como ^(pattern)$ y coinciden teniendo en cuenta las mayúsculas y minúsculas. Vacío o nulo no coincide con nada. |
timeout |
int | 30 |
Tiempo de espera de ejecución en segundos (debe ser positivo; los valores superiores a 300 se marcan durante la validación de la CLI). |
failMode |
cuerda / cadena | allow |
Cómo controlar errores de enlace: allow o block. |
model |
cuerda / cadena | ReasoningFast |
Modelo para enlaces de solicitud (nombre de escenario o nombre de implementación). |
maxRejections |
int |
3 (valor predeterminado del agente) |
Número máximo de rechazos antes de forzar la detención. Intervalo: 1–25. Se aplica únicamente a los enlaces de detención de tipo de solicitud. Los enlaces de detención de tipo de comando no tienen límite implícito. Cuando varios enlaces de solicitud especifican valores diferentes, se usa el máximo. |
Esquema de contexto del enlace
Los enlaces reciben contexto JSON estructurado sobre el evento actual. Los enlaces de solicitud reciben contexto a través del marcador de posición $ARGUMENTS en el texto de la solicitud.
Los enlaces de comandos reciben contexto como JSON en stdin.
Para ambos tipos de enlace, el campo execution_summary contiene una ruta de acceso de archivo a la transcripción de conversación (no contenido insertado). Para los enlaces de solicitud, el LLM obtiene las herramientas ReadFile y GrepSearch para acceder a este archivo. Para los enlaces de comandos, el archivo está disponible en la ruta de acceso especificada en el espacio aislado.
Campos comunes
Todos los ganchos reciben los siguientes campos:
{
"hook_event_name": "Stop",
"agent_name": "my_agent",
"current_turn": 5,
"max_turns": 50,
"execution_summary": "/path/to/transcript.txt"
}
Campos de enlace de detención
Los enlaces de detención reciben campos adicionales referentes a la salida final del agente.
{
"final_output": "Here is my response...",
"stop_hook_active": false,
"stop_rejection_count": 0
}
Campos de enlace PostToolUse
Los ganchos de PostToolUse reciben campos adicionales sobre la ejecución de la herramienta.
{
"tool_name": "ExecutePythonCode",
"tool_input": { "code": "print(2+2)" },
"tool_result": "4",
"tool_succeeded": true
}
Límites
Los siguientes límites se aplican a los enlaces del agente.
| Limit | Importancia |
|---|---|
| Tamaño del script | Máximo de 64 KB |
| Tiempo de espera | De 1 a 300 segundos |
| Máximo de rechazos (enlaces de detención de solicitud) | 1–25 (valor predeterminado: 3) |
| Shebangs de script admitidos |
#!/bin/bash, #!/usr/bin/env python3 |
| Entorno de ejecución de scripts | Intérprete de código aislado |
Ejemplo: Auditar todo el uso de herramientas
El siguiente enlace PostToolUse registra cada llamada de herramienta y agrega un mensaje de contexto de auditoría:
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))
El additionalContext campo se agrega como mensaje de usuario a la conversación, lo que proporciona al agente visibilidad de la pista de auditoría.
Ejemplo: Requerir un marcador de finalización
El siguiente gancho Stop rechaza las respuestas que no terminan con "Task complete."
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
procedimientos recomendados
Siga estas instrucciones al configurar enlaces de agente:
- Proporcione siempre un motivo al rechazar. Trate los rechazos sin razones como aprobaciones.
- Usar tiempos de espera adecuados: los enlaces de larga duración ralentizan la ejecución del agente.
-
Controlar los errores de manera correcta: use
failMode: allowa menos que se requiera una aplicación estricta. - Ser específico con los emparejadores: los emparejadores de postToolUse demasiado amplios pueden causar problemas de rendimiento.
-
Probar los enlaces exhaustivamente: los enlaces que siempre rechazan pueden provocar bucles (mitigados por
maxRejections). - Registrar en stderr: use stderr para la salida de depuración. El sistema analiza sintácticamente stdout como el resultado del enlace.
Pruebe por sí mismo
En la captura de pantalla siguiente se muestra un gancho de detención en acción. El agente responde inicialmente con solo "4", pero el enlace rechaza la respuesta porque falta el marcador de finalización. A continuación, el agente continúa y agrega el marcador.
Empieza ahora
| Recurso | Qué aprenderá: |
|---|---|
| Configuración de enlaces de agente (API) | Configuración de enlaces mediante la API REST v2 y YAML |
Contenido relacionado
| Capacidad | Cómo se relaciona |
|---|---|
| Modos de ejecución | Los enlaces complementan los controles de seguridad del modo de ejecución. Los modos controlan qué se ejecuta, los enlaces controlan cómo se ejecuta. |
| Herramientas de Python | ** Cree herramientas personalizadas que los hooks puedan auditar y validar. |