Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Aanbeveling
Wilt u liever de gebruikersinterface van de portal? U kunt nu hooks rechtstreeks in de portal maken en beheren zonder de REST API te gebruiken. De portal biedt een visueel formulier en code-editor. Er zijn geen curl opdrachten vereist.
In deze zelfstudie maakt u een aangepaste agent met een "stop hook", waardoor de agent verplicht is een voltooiingsmarkering aan elk antwoord toe te voegen. U configureert de hook via de REST API en test deze vervolgens in de speeltuin van de portal.
Geschatte tijd: 15 minuten
Opmerking
Haken op agentniveau versus hooks op aangepast agentniveau: In deze zelfstudie worden haken gemaakt op een aangepaste agent (hooks op aangepast agentniveau). Deze hooks worden alleen geactiveerd wanneer die specifieke aangepaste agent wordt uitgevoerd.
Als u hooks op agentniveau wilt maken die van toepassing zijn op de hele agent (alle threads, alle aangepaste agents), gebruikt u Builder>Hooks in de portal.
| Niveau | Hoe maak je | Scope |
|---|---|---|
| Agentniveau | Portal: Builder > Hooks | Van toepassing op alle threads en aangepaste agents |
| Aangepast agentniveau | REST API (deze handleiding) of Portal: Agent Canvas > Aangepaste agent > Beheer Hooks | Alleen van toepassing op één aangepaste agent |
In deze handleiding leer je hoe je:
- Een aangepaste agent maken met een stophook met behulp van de REST API
- Gedrag van haak testen in de testspeeltuin van de portal
- Een PostToolUse-hook toevoegen voor het controleren van het gebruik van hulpprogramma's
- Gevaarlijke opdrachten blokkeren met een beleidshook
Vereiste voorwaarden
- Een Azure SRE-agent met de status Actief
- curl om de REST API aan te roepen
-
Azure CLI aangemeld (
az login) om een toegangstoken op te halen
Inzicht in de hook-API-indeling
In deze zelfstudie wordt de REST API v2 gebruikt om hooks te maken op een aangepaste agent. Op het YAML-editor tabblad van de portal wordt de v1-indeling weergegeven en de hooks die via de API zijn geconfigureerd worden niet getoond, maar de hooks blijven actief. U kunt deze controleren op de pagina Builder>Hooks of de testspeeltuin.
Aanbeveling
Wanneer gebruikt u de API versus de portal:
- Portal (Builder > Hooks): Het beste voor hooks op agentniveau in visuele vorm. Er is geen code nodig.
- API (deze zelfstudie): Het beste voor hooks op aangepast agentniveau, CI/CD-pijplijnen of programmatisch beheer.
De API-URL van uw agent zoeken
De API-basis-URL van uw agent volgt dit patroon:
https://{agent-name}--{hash}.{hash}.{region}.azuresre.ai
Om het te vinden:
- Open sre.azure.com en selecteer uw agent.
- Selecteer in de linkerzijbalk Builder>Agent Canvas.
- Open de ontwikkelhulpprogramma's van uw browser (F12 of klik met de rechtermuisknop op > Controleren).
- Ga naar het tabblad Netwerk , filter op API en zoek aanvragen naar een URL die eindigt op
.azuresre.ai. - De basis-URL is alles vóór
/api/....
U kunt ook het src kenmerk controleren op het tabblad Elementen. Zoek naar een <iframe> waarvan src begint met https://{agent-name}--.
Een toegangstoken opvragen
Voer de volgende opdracht uit om een toegangstoken op te halen voor de SRE Agent-API:
TOKEN=$(az account get-access-token \
--resource <RESOURCE_ID> \
--query accessToken -o tsv)
Een aangepaste agent maken met een stophook
Met deze stap maakt u een aangepaste agent die wordt aangeroepen my_hooked_agent met een stophook waarmee wordt gecontroleerd of het antwoord eindigt op === RESPONSE COMPLETE ===. Als de markering ontbreekt, weigert de haak het antwoord en geeft de agent de opdracht om de markering toe te voegen.
AGENT_URL="https://your-agent--xxxxxxxx.yyyyyyyy.region.azuresre.ai"
curl -X PUT "${AGENT_URL}/api/v2/extendedAgent/agents/my_hooked_agent" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d @- << 'EOF'
{
"name": "my_hooked_agent",
"properties": {
"instructions": "You are a helpful assistant. Be concise.",
"handoffDescription": "",
"handoffs": [],
"enableVanillaMode": true,
"hooks": {
"Stop": [
{
"type": "prompt",
"prompt": "Check the agent response below.\n\n$ARGUMENTS\n\nDoes it end with === RESPONSE COMPLETE ===?\nIf yes: {\"ok\": true}\nIf no: {\"ok\": false, \"reason\": \"Add === RESPONSE COMPLETE === at the end.\"}",
"timeout": 30
}
]
}
}
}
EOF
U ontvangt HTTP 202 Geaccepteerd met de volledige agentconfiguratie in de hoofdtekst van het antwoord.
In het volgende voorbeeld ziet u dezelfde configuratie in v2 YAML-indeling voor referentie:
api_version: azuresre.ai/v2
kind: ExtendedAgent
metadata:
name: my_hooked_agent
spec:
instructions: |
You are a helpful assistant. Be concise.
handoffDescription: ""
enableVanillaMode: true
hooks:
Stop:
- type: prompt
prompt: |
Check the agent response below.
$ARGUMENTS
Does it end with === RESPONSE COMPLETE ===?
If yes: {"ok": true}
If no: {"ok": false, "reason": "Add === RESPONSE COMPLETE === at the end."}
timeout: 30
Hoe de stophaak werkt
De stophook evalueert het antwoord van de agent voordat deze terugkeert naar de gebruiker:
-
$ARGUMENTSVervangt door de hookcontext JSON, die het uiteindelijke antwoord van de agent bevat. - Het LLM evalueert de prompt en retourneert
{"ok": true}of{"ok": false, "reason": "..."}. - Als de agent wordt geweigerd, blijft de agent werken nadat de reden is ingevoerd in een gebruikersbericht.
- Na drie afwijzingen (de standaardinstelling) stopt de agent.
Test de hook in het portal
Volg deze stappen om de stophook te testen:
Ga naar uw agent in de portal en selecteer Builder>Agent Canvas.
Selecteer het keuzerondje Testomgeving.
Selecteer de vervolgkeuzelijst Subagent/Tool , zoek my_hooked_agent en selecteer Toepassen.
Typ
What is 2+2?in de chat en selecteer Verzenden.
Bekijk wat er gebeurt:
- De agent reageert eerst met 4.
- De stophook evalueert en weigert het antwoord (geen voltooiingsmarkering).
- Er wordt een stap voor het gedachteproces weergegeven waar de agent doorgaat.
- Het uiteindelijke antwoord wordt weergegeven: 4 === ANTWOORD VOLTOOID ===.
De haak werkte. Het dwong de agent de markering toe te voegen voordat hij stopte.
Een PostToolUse-hook toevoegen voor controle
Voeg een PostToolUse-hook toe die elk hulpprogramma registreert dat door de agent wordt gebruikt. Werk dezelfde agent bij door een nieuwe PUT aanvraag met beide hooks te verzenden:
curl -X PUT "${AGENT_URL}/api/v2/extendedAgent/agents/my_hooked_agent" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d @- << 'EOF'
{
"name": "my_hooked_agent",
"properties": {
"instructions": "You are a helpful assistant. Be concise.",
"handoffDescription": "",
"handoffs": [],
"enableVanillaMode": true,
"hooks": {
"Stop": [
{
"type": "prompt",
"prompt": "Check the agent response below.\n\n$ARGUMENTS\n\nDoes it end with === RESPONSE COMPLETE ===?\nIf yes: {\"ok\": true}\nIf no: {\"ok\": false, \"reason\": \"Add === RESPONSE COMPLETE === at the end.\"}",
"timeout": 30
}
],
"PostToolUse": [
{
"type": "command",
"matcher": "*",
"timeout": 30,
"failMode": "allow",
"script": "#!/usr/bin/env python3\nimport sys, json\ncontext = json.load(sys.stdin)\ntool = context.get('tool_name', 'unknown')\nprint(json.dumps({'decision': 'allow', 'hookSpecificOutput': {'additionalContext': f'[AUDIT] {tool} executed.'}}))"
}
]
}
}
}
EOF
matcher: "*" betekent dat deze hook wordt uitgevoerd voor elke tool-aanroep. Het script registreert de naam van het hulpprogramma en injecteert een [AUDIT] bericht in het gesprek.
Als u de hook wilt testen, stelt u de agent een vraag die een hulpprogramma activeert (bijvoorbeeld 'Uitvoeren echo hello').
Gevaarlijke opdrachten blokkeren
Voeg een tweede PostToolUse-haak toe die rm -rf, sudo en chmod 777 blokkeert.
PostToolUse:
# Audit hook (runs for all tools)
- type: command
matcher: "*"
timeout: 30
failMode: allow
script: |
#!/usr/bin/env python3
import sys, json
context = json.load(sys.stdin)
tool = context.get('tool_name', 'unknown')
print(json.dumps({"decision": "allow",
"hookSpecificOutput": {"additionalContext": f"[AUDIT] {tool} executed."}}))
# Policy hook (only for shell tools)
- 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', '')
for pattern in [r'\brm\s+-rf\b', r'\bsudo\b', r'\bchmod\s+777\b']:
if re.search(pattern, command):
print(json.dumps({"decision": "block", "reason": f"Blocked: {pattern}"}))
sys.exit(0)
print(json.dumps({"decision": "allow"}))
Belangrijkste verschillen ten opzichte van de audithook:
-
matcher: "Bash|ExecuteShellCommand"wordt alleen uitgevoerd voor shellprogramma's (patroon is verankerd als^(Bash|ExecuteShellCommand)$). -
failMode: blockblokkeert het resultaat van het hulpprogramma als het script zelf vastloopt (strikte modus). - Retourneert
"block"met een reden wanneer een gevaarlijk patroon wordt gevonden.
Hook-antwoordindelingen
Prompthook en opdrachthook maken gebruik van verschillende antwoordindelingen.
Aanzet haken
Prompthook retourneert eenvoudige JSON:
{"ok": true}
{"ok": false, "reason": "Please fix X."}
Opdrachthook
Opdrachthaken geven uitgebreide JSON:
{"decision": "allow"}
{"decision": "block", "reason": "Dangerous command."}
{"decision": "allow", "hookSpecificOutput": {"additionalContext": "Audit note."}}
Opdrachthaken kunnen ook afsluitcodes gebruiken in plaats van JSON:
| Afsluitcode | Gedrag |
|---|---|
0 zonder uitvoer |
Toestaan |
0 met JSON |
De JSON parseren |
2 |
Blokkade (stderr wordt de reden) |
| Overige | Valt terug naar failMode |
Waarschuwing
Een afwijzing zonder reden wordt beschouwd als goedkeuring. Zorg er altijd voor dat reason wordt opgenomen bij het afwijzen.
Verifiëren
Nadat u de hooks hebt geconfigureerd en getest, bevestigt u de volgende voorwaarden:
- U configureert hooks op aangepast agentniveau met behulp van REST API v2. Ze zijn alleen van toepassing op die specifieke agent.
- U maakt haken op agentniveau in Builder > Hooks. Ze zijn van toepassing op de hele agent.
- De stophaak zorgt ervoor dat de agent de
=== RESPONSE COMPLETE ===markering toevoegt voordat deze stopt. - De PostToolUse audit hook registreert
[AUDIT]berichten voor hulpprogramma-aanroepen. - De beleidshook blokkeert gevaarlijke opdrachten zoals
rm -rfensudo.
Troubleshooting
De volgende tabel bevat veelvoorkomende problemen en oplossingen voor agenthooks.
| Probleem | Solution |
|---|---|
| Hooks zijn niet zichtbaar op het YAML-tabblad van de portal | Verwacht: op het tabblad YAML wordt alleen v1 weergegeven. Aangepaste hooks op agentniveau die via de API zijn gemaakt, zijn actief en zichtbaar in Builder>Hooks of de speeltuin. |
Unsupported kind: ExtendedAgent |
Gebruik het v2-eindpunt: PUT /api/v2/extendedAgent/agents/{name}. |
Handoffs cannot be null |
Voeg "handoffs": [] toe aan de JSON-payload. |
| Hook heeft geen effect | Voeg een reason veld toe bij het weigeren. Zonder dit wordt afwijzing behandeld als goedkeuring. |
| Agent loopt oneindig door | Lager maxRejections (standaard: 3, bereik: 1-25). |