Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In questa esercitazione vengono creati due hook di governance usando il portale: un hook Stop che applica la formattazione dei dati (tabelle markdown con intestazioni grassetto) e un hook PostToolUse che blocca i comandi pericolosi della shell. Gli hook vengono configurati sia a livello di agente (si applica a tutti i thread e ai subagenti) che al livello di subagente (si applica a un subagente specifico).
Tempo stimato: 10 minuti
In questa esercitazione apprenderai a:
- Creare un hook stop che convalida la formattazione della risposta
- Creare un hook PostToolUse che blocca i comandi pericolosi della shell
- Aggiungere hook a un subagente specifico
- Gestire l'attivazione degli hook in singoli thread
Prerequisiti
- Un agente SRE di Azure in stato in esecuzione
- Ruolo collaboratore o superiore nella risorsa agente SRE
Suggerimento
Gli hook creati in precedenza tramite l'esercitazione sull'API REST vengono visualizzati automaticamente nell'interfaccia utente del portale. È possibile gestirli visivamente senza riconfigurare nulla.
Comprendere dove si trovano gli hook nel portale
I ganci operano su due livelli. Comprendere questa distinzione è un concetto chiave dell'architettura.
| livello | Posizione nel portale | Ambito | Usare quando |
|---|---|---|---|
| Livello agente | Builder>Hook | Si applica all'intero agente, a tutti i thread e a tutti i subagenti | Si vogliono criteri a livello di agente, ad esempio "controlla ogni chiamata di strumento" o "blocca comandi pericolosi ovunque" |
| Livello sottoagente | Generatore di subagent> seleziona subagent >Gestisci Hooks | Si applica solo quando viene eseguito tale subagente specifico | Si vogliono usare hook personalizzati per un subagente, ad esempio "convalidare il formato di output di questo subagente" |
Suggerimento
Entrambi i livelli possono coesistere. Se un hook a livello di agente e un hook a livello di subagente corrispondono entrambi allo stesso evento, entrambi vengono eseguiti. Gli hook a livello di agente vengono eseguiti prima, quindi gli hook a livello di sub-agente.
Creare hook a livello di agente
Gli hook a livello di agente si applicano all'intero agente, inclusi tutti i thread e tutti i subagenti. Hanno modalità di attivazione che controllano quando sono attive.
Apri la pagina Hooks
Seguire questa procedura per passare alla pagina Hooks.
- Passare a sre.azure.com e selezionare l'agente.
- Nella barra laterale espandere Generatore.
- Selezionare Hooks.
Viene visualizzata l'intestazione Hook con una descrizione, un pulsante Crea hook e una griglia di dati vuota (o un elenco di hook esistenti).
Creare un hook Stop
Un hook Stop viene attivato quando l'agente sta per restituire una risposta finale. Usarlo per convalidare la qualità della risposta e applicare regole di formattazione.
Selezionare Crea hook.
Compila i campi del modulo
Campo Valore Nome require-table-formatTipo di evento Stop Modalità di attivazione Sempre Descrizione Assicura che le risposte presentino dati strutturati come tabelle markdown con intestazioni in grassetto In Definizione Hook, mantenere Tipo di Hook impostato su Prompt.
Mantenere Model impostato su Reasoning Fast (impostazione predefinita).
Nell'editor prompt immettere il testo seguente:
Check the agent response below. $ARGUMENTS Does the response present any structured data (lists of items, comparisons, metrics) as a markdown table with **bold** column headers? If no structured data is present, approve. If structured data IS present as a table with bold headers: {"ok": true} If structured data is present but NOT formatted as a table: {"ok": false, "reason": "Reformat the structured data as a markdown table with **bold** column headers."}Lasciare Timeout (sec) in
30, modalità errore inAllowe Numero max rifiuti in3.Seleziona Salva.
La finestra di dialogo viene chiusa con una notifica di esito positivo. L'hook viene visualizzato nella griglia dati con Tipo di evento Arresta e Attivazione sempre.
Suggerimento
Il segnaposto $ARGUMENTS inserisce il contesto dell'hook (inclusa la risposta finale dell'agente) nel prompt. LLM valuta se la risposta soddisfa i criteri e restituisce {"ok": true} l'approvazione o {"ok": false, "reason": "..."} il rifiuto. Dopo tre rifiuti (impostazione predefinita), l'agente si arresta.
Testare l'hook Stop
Seguire questa procedura per verificare che l'hook stop funzioni correttamente.
- Nella barra laterale selezionare Chat.
- Digitare Confrontare i vantaggi e i svantaggi di Python e Go per la compilazione di microservizi e selezionare Invia.
- Guardare la risposta dell'agente:
- L'agente risponde inizialmente con un confronto di testo normale.
- L'hook Stop valuta e rifiuta la risposta perché i dati non si trovano in una tabella.
- L'agente riscrive la sua risposta in una tabella markdown con intestazioni in grassetto.
La risposta finale presenta il confronto come tabella formattata simile all'esempio seguente:
| Language | Vantaggi | Svantaggi |
|---|---|---|
| Python | Sviluppo rapido, ricco ecosistema | Esecuzione più lenta, limitazioni GIL |
| Go | Compilazione rapida, concorrenza predefinita | Ecosistema più piccolo, gestione verbosa degli errori |
Creare un hook PostToolUse
Un hook PostToolUse viene attivato al termine dell'esecuzione di uno strumento. Usarlo per controllare l'utilizzo degli strumenti, bloccare comandi pericolosi o aggiungere contesto aggiuntivo.
Tornare a Builder>Hook.
Selezionare Crea hook.
Compilare il modulo:
Campo Valore Nome block-dangerous-commandsTipo di evento Uso dello strumento Post Modalità di attivazione Sempre Descrizione Blocca rm -rf, sudo e chmod 777 nei comandi della shell Tipo di hook Comando Tool matcher Bash\|ExecuteShellCommandSelezionare Python come linguaggio di script.
Nell'editor di script immettere lo script seguente:
#!/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"}))Imposta Modalità di errore su Blocca (se lo script si arresta in modo anomalo, il risultato dello strumento viene bloccato).
Seleziona Salva.
Entrambi gli hook ora vengono visualizzati nella griglia dei dati Hook.
Annotazioni
Il campo Tool matcher usa l'espressione regolare.
Bash|ExecuteShellCommand corrisponde agli strumenti denominati esattamente "Bash" o "ExecuteShellCommand" (il modello è ancorato come ^(Bash|ExecuteShellCommand)$). Usare * per trovare una corrispondenza per tutti gli strumenti.
Testare il gancio PostToolUse
Seguire questa procedura per verificare che l'hook PostToolUse funzioni correttamente.
- Nella barra laterale selezionare Chat.
- Chiedere all'agente di eseguire un comando sicuro: "Esegui echo hello". L'hook consente questo comando.
- Chiedere all'agente di eseguire un comando pericoloso: "Eseguire rm -rf /tmp/test". L'hook blocca questo comando.
Il comando safe viene eseguito normalmente. Il comando pericoloso viene bloccato e l'agente riceve un messaggio che spiega perché.
Modificare ed eliminare hook a livello di agente
È possibile modificare o rimuovere hook esistenti dalla griglia dei dati Hook.
- Modifica: selezionare l'icona di modifica in qualsiasi riga hook nella griglia dei dati, modificare i campi e selezionare Salva.
- Elimina: selezionare la casella di controllo accanto agli hook da rimuovere, selezionare Elimina sulla barra degli strumenti e confermare.
La griglia dei dati riflette immediatamente le modifiche apportate.
Creare hook a livello di subagente
Gli hook a livello di subagent vengono configurati direttamente nella definizione di un subagente. Si applicano solo quando viene eseguito un subagente specifico, non all'agente principale né ad altri subagenti.
Aprire il pannello dei hook del sottoagente
Seguire questa procedura per accedere alla configurazione hook per un subagent specifico.
- Nella barra laterale espandere Generatore e selezionare Generatore subagente.
- Selezionare un subagente esistente per modificarlo oppure selezionare Crea per avviarne uno nuovo.
- Nel modulo subagent, vai giù fino alla sezione Hooks.
- Seleziona Gestisci Hooks.
Si apre un pannello laterale con le sezioni Stop e Uso dello strumento Post. Se non sono configurati hook, vengono visualizzati stati vuoti con testo di guida.
Aggiungere un hook a un subagent
La procedura seguente aggiunge un hook Stop che garantisce che questo subagente risponda sempre con una sezione di riepilogo.
Nel pannello Gestisci hook selezionare Aggiungi hook nella parte bassa del pannello.
Nella finestra di dialogo compilare il modulo hook:
Campo Valore Tipo di evento Stop Tipo di hook Rapido Richiesta Check the response below. $ARGUMENTS Does it include a clear summary section at the end? If yes: {"ok": true} If no: {"ok": false, "reason": "Add a Summary section at the end of your response."}Timeout (sec) 30 Modalità errore Permetti Numero massimo di rifiuti 3 Selezionare Salva sull'hook.
Selezionare Crea (o Salva) nel subagente per salvare la configurazione completa.
Il gancio viene visualizzato nel pannello Gestisci ganci nella sezione Arresta. Il modulo subagent mostra Manage Hooks (1) sul pulsante.
Suggerimento
Per testare un hook a livello di subagente, passare al Generatore di Subagenti, selezionare la visualizzazione Area di test, scegliere il subagente dall'elenco a discesa e digitare una domanda. L'hook viene eseguito solo quando viene richiamato questo subagente specifico.
Gestire hook per thread
Gli hook a livello di agente con l'attivazione sempre sono attivi in ogni conversazione per impostazione predefinita. È necessario attivare manualmente gli hook con l'attivazione on demand per ogni thread.
Attivare/disattivare hook in una conversazione
Seguire questa procedura per attivare o disattivare hook in un thread specifico.
- Aprire un thread di chat .
- Selezionare il + pulsante nel piè di pagina della chat.
- Selezionare Gestisci Hook.
- Attivare o disattivare gli hook per il thread corrente.
È possibile disattivare temporaneamente gli hook Always . È possibile attivare hook on demand quando necessario. Non è possibile attivare o disattivare gli hook di sistema necessari.
Le modifiche agli hook diventano effettive immediatamente nel thread corrente.
Risoluzione dei problemi
Nella tabella seguente sono elencati i problemi e le soluzioni comuni durante la creazione e la gestione degli hook nel portale.
| Problema | Soluzione |
|---|---|
| Pagina Hooks non visibile nella barra laterale | La pagina Hooks viene visualizzata in Generatore. Verificare che l'agente sia nello stato In esecuzione. Se l'opzione non viene ancora visualizzata, contattare il supporto tecnico. |
| Il nome del hook è obbligatorio | Immettere un nome usando solo lettere, numeri, trattini e caratteri di sottolineatura. |
| "Il nome deve contenere solo lettere, numeri, trattini e caratteri di sottolineatura" | Rimuovere caratteri speciali dal nome dell'hook. |
| "Il nome dell'hook non può iniziare con system__" | Il system__ prefisso è riservato agli hook di sistema. Scegliere un nome diverso. |
| "Tool matcher necessario per gli hook PostToolUse" | Gli hook PostToolUse necessitano di un matcher basato su espressione regolare. Usare * per trovare una corrispondenza per tutti gli strumenti. |
| Hook non viene attivato | Per gli hook a livello di agente, controllare la modalità di attivazione. Gli hook su richiesta devono essere attivati per ogni thread. Per gli hook a livello di subagente, verificare che venga richiamato il subagente. |
| L'hook Stop approva qualsiasi cosa | Assicurarsi che il prompt restituisca {"ok": false, "reason": "..."} quando viene rifiutato. Un rifiuto senza un reason viene considerato come approvazione. |
| Azioni di blocco degli errori di script | Impostare Modalità di errore su Consenti per una degradazione controllata durante lo sviluppo. Passare a Blocca in modalità di produzione. |