Lernprogramm: Erstellen und Verwalten von Hooks im Portal

In diesem Lernprogramm erstellen Sie zwei Governance-Hooks mithilfe des Portals: einen Stopp-Hook , der die Datenformatierung (Markdowntabellen mit fett formatierten Kopfzeilen) und einen PostToolUse-Hook erzwingt, der gefährliche Shellbefehle blockiert. Sie konfigurieren Hooks auf Agentebene (gilt für alle Threads und Subagenten) und die Subagent-Ebene (gilt für einen bestimmten Subagent).

Geschätzte Zeit: 10 Minuten

In diesem Tutorial erfahren Sie, wie:

  • Erstellen eines Stopp-Hooks, der die Antwortformatierung überprüft
  • Erstellen eines PostToolUse-Hooks, der gefährliche Shellbefehle blockiert
  • Hinzufügen von Hooks zu einem bestimmten Subagent
  • Verwaltung der Hook-Aktivierung in einzelnen Threads

Voraussetzungen

  • Ein Azure SRE-Agent im Zustand "Ausgeführt"
  • Mitwirkender Rolle oder höher auf der SRE Agent Ressource

Tipp

Hooks, die Sie zuvor über das REST-API-Lernprogramm erstellt haben, werden automatisch in der Portal-UI angezeigt. Sie können sie visuell verwalten, ohne etwas neu zu konfigurieren.

Verstehen, wo sich Hooks im Portal befinden

Hooks funktionieren auf zwei Ebenen. Das Verständnis dieser Unterscheidung ist ein schlüssel architektonisches Konzept.

Grad Standort im Portal Geltungsbereich Verwenden Sie, wenn
Agent-Ebene Konstruktor>Hooks Gilt für den gesamten Agent, alle Threads und alle Subagenten Sie möchten agentweite Richtlinien wie "jeden Toolaufruf überwachen" oder "gefährliche Befehle überall blockieren"
Subagent-Ebene Subagent-Generator> Subagenten auswählen >Hooks verwalten Gilt nur, sobald dieser bestimmte Subagent ausgeführt wird. Sie möchten Hooks an einen Subagent anpassen, z. B. "Das Ausgabeformat dieses Subagents überprüfen"

Tipp

Beide Ebenen können koexistieren. Wenn ein Hook auf Agentebene und ein Subagent-Level-Hook beide mit demselben Ereignis übereinstimmen, werden beide ausgeführt. Agent-Ebene-Hooks werden zuerst ausgeführt, dann Unteragent-Ebene-Hooks.

Erstellen von Hooks auf der Agentenebene

Hooks auf Agentenebene gelten für den gesamten Agent, einschließlich jedes Threads und jedes Subagenten. Sie verfügen über Aktivierungsmodi, die steuern, wann sie aktiv sind.

Öffnen der Hooks-Seite

Führen Sie die folgenden Schritte aus, um zur Hooks-Seite zu navigieren.

  1. Wechseln Sie zu sre.azure.com , und wählen Sie Ihren Agenten aus.
  2. Erweitern Sie in der Randleiste den Generator.
  3. Wählen Sie Hooks aus.

Die Überschrift " Hooks " mit einer Beschreibung, einer Schaltfläche " Hook erstellen " und einem leeren Datenraster (oder einer Liste vorhandener Hooks) wird angezeigt.

Erstellen eines Stopphakens

Ein Stop Hook wird ausgelöst, wenn der Agent im Begriff ist, eine endgültige Antwort zu liefern. Verwenden Sie sie, um die Antwortqualität zu überprüfen und Formatierungsregeln zu erzwingen.

  1. Wählen Sie "Hook erstellen" aus.

  2. Füllen Sie die Formularfelder aus:

    Feld Wert
    Name require-table-format
    Ereignistyp Anhalten
    Aktivierungsmodus Immer
    Beschreibung Stellt sicher, dass Antworten strukturierte Daten als Markdowntabellen mit fett formatierten Kopfzeilen darstellen
  3. Halten Sie unter "Hook-Definition" den Hook-Typ auf "Eingabeaufforderung" festgelegt.

  4. Belassen Sie Model auf Reasoning Fast (Standard).

  5. Geben Sie im Eingabeaufforderungs-Editor den folgenden Text ein:

    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."}
    
  6. Belassen Sie Timeout (sec) bei 30, Fehlermodus bei Allow und Max Ablehnungen bei 3.

  7. Wählen Sie Speichern aus.

Das Dialogfeld wird mit einer Erfolgsbenachrichtigung geschlossen. Der Hook wird im Datenraster mit dem Ereignistyp Stop und der Aktivierung Always angezeigt.

Tipp

Der $ARGUMENTS Platzhalter fügt den Hook-Kontext (einschließlich der endgültigen Antwort des Agents) in die Eingabeaufforderung ein. Das LLM bewertet, ob die Antwort Ihre Kriterien erfüllt und gibt {"ok": true} zur Genehmigung oder {"ok": false, "reason": "..."} zur Ablehnung zurück. Nach drei Ablehnungen (Standardeinstellung) stoppt der Agent.

Testen des Stopphakens

Führen Sie die folgenden Schritte aus, um zu überprüfen, ob der Stopphaken ordnungsgemäß funktioniert.

  1. Wählen Sie in der Randleiste "Chat" aus.
  2. Geben Sie die Vor- und Nachteile von Python vs Go zum Erstellen von Microservices ein, und wählen Sie "Senden" aus.
  3. Sehen Sie sich die Antwort des Agents an:
    • Der Agent antwortet zunächst mit einem Nur-Text-Vergleich.
    • Der Stop-Hook wertet die Antwort aus und lehnt sie ab, da sich die Daten nicht in einer Tabelle befinden.
    • Der Agent formatiert seine Antwort als Markdown-Tabelle mit bold-Headern.

Die letzte Antwort zeigt den Vergleich als formatierte Tabelle wie im folgenden Beispiel an:

Sprache Vorteile Nachteile
Python Schnelle Entwicklung, reichhaltiges Ökosystem Langsamere Ausführung, GIL-Einschränkungen
Los geht's Schnelle Kompilierung, integrierte Parallelität Kleineres Ökosystem, ausführliche Fehlerbehandlung

Erstellen eines PostToolUse-Hooks

Ein PostToolUse-Hook wird ausgelöst, nachdem die Ausführung eines Tools abgeschlossen wird. Verwenden Sie sie, um die Verwendung von Tools zu überwachen, gefährliche Befehle zu blockieren oder zusätzlichen Kontext hinzuzufügen.

  1. Kehren Sie zu Builder>Hooks zurück.

  2. Wählen Sie "Hook erstellen" aus.

  3. Füllen Sie das Formular aus:

    Feld Wert
    Name block-dangerous-commands
    Ereignistyp Verwendung des Post-Werkzeugs
    Aktivierungsmodus Immer
    Beschreibung Blockiert rm -rf, sudo und chmod 777 in Shellbefehlen
    Hook-Typ Befehl
    Werkzeug-Abgleich Bash\|ExecuteShellCommand
  4. Wählen Sie Python als Skriptsprache aus.

  5. Geben Sie im Skript-Editor das folgende Skript ein:

    #!/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"}))
    
  6. Legen Sie den Fehlermodus auf "Blockieren " fest (wenn das Skript abstürzt, wird das Toolergebnis blockiert).

  7. Wählen Sie Speichern aus.

Beide Hooks werden nun im Hooks-Datenraster angezeigt.

Hinweis

Das Feld "Tool matcher " verwendet "regex". Bash|ExecuteShellCommand entspricht Tools mit genau dem Namen "Bash" oder "ExecuteShellCommand" (das Muster ist als ^(Bash|ExecuteShellCommand)$ verankert). Verwenden Sie * , um alle Tools abzugleichen.

Testen des PostToolUse-Hooks

Führen Sie die folgenden Schritte aus, um zu überprüfen, ob der PostToolUse-Hook ordnungsgemäß funktioniert.

  1. Wählen Sie in der Randleiste "Chat" aus.
  2. Bitten Sie den Agent, einen sicheren Befehl auszuführen: "Echo hello ausführen". Der Hook ermöglicht diesen Befehl.
  3. Bitten Sie den Agent, einen gefährlichen Befehl auszuführen: "Ausführen von rm -rf /tmp/test". Der Hook blockiert diesen Befehl.

Der sichere Befehl wird normal ausgeführt. Der gefährliche Befehl ist blockiert, und der Agent erhält eine Meldung, die erklärt, warum.

Bearbeiten und Löschen von Hooks auf Agentebene

Sie können vorhandene Hooks aus dem Hooks-Datenraster ändern oder entfernen.

  • Bearbeiten: Wählen Sie das Bearbeitungssymbol in einer beliebigen Hookzeile im Datenraster aus, ändern Sie die Felder, und wählen Sie " Speichern" aus.
  • Löschen: Aktivieren Sie das Kontrollkästchen neben den Hooks, die Sie entfernen möchten, wählen Sie " Löschen " in der Symbolleiste aus, und bestätigen Sie es.

Das Datenraster spiegelt ihre Änderungen sofort wider.

Erstellen von Hooks auf Subagentebene

Sie konfigurieren Hooks auf Subagentebene direkt in der Definition eines Subagenten. Sie gelten nur, wenn dieser spezielle Subagent ausgeführt wird, nicht für den Hauptagenten oder andere Subagenten.

Öffnen Sie das Subagent-Hooks-Panel

Führen Sie die folgenden Schritte aus, um auf die Hookkonfiguration für einen bestimmten Subagent zuzugreifen.

  1. Erweitern Sie in der Randleiste den Generator , und wählen Sie den Subagent-Generator aus.
  2. Wählen Sie einen vorhandenen Subagent aus, um ihn zu bearbeiten, oder wählen Sie "Erstellen" aus, um ein neues zu starten.
  3. Scrollen Sie im Subagent-Formular nach unten zum Hooks-Abschnitt .
  4. Wählen Sie "Hooks verwalten" aus.

Ein seitliches Panel öffnet sich mit den Abschnitten „Stopp“ und „Verwendung des Tools beenden“. Wenn keine Hooks konfiguriert sind, werden leere Zustände mit Anleitungstext angezeigt.

Hinzufügen eines Hooks zu einem Subagent

Die folgenden Schritte fügen einen Stop-Hook hinzu, der sicherstellt, dass dieser Subagent immer mit einem Zusammenfassungsabschnitt antwortet.

  1. Wählen Sie im Bereich Hooks verwalten die Option Hook hinzufügen am unteren Rand des Bereichs.

  2. Füllen Sie im Dialog das Formular für den Hook aus:

    Feld Wert
    Ereignistyp Anhalten
    Hook-Typ Prompt
    Prompt 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 (Sek.) 30
    Fehlermodus Erlauben
    Maximale Ablehnungen 3
  3. Wählen Sie Speichern für den Hook.

  4. Wählen Sie " Erstellen" (oder "Speichern") für den Unteragent aus, um die vollständige Konfiguration zu speichern.

Der Hook wird im Bereich "Hooks verwalten " unter dem Abschnitt "Stopp " angezeigt. Das Unteragent-Formular zeigt "Hooks verwalten" (1) auf dem Button an.

Tipp

Um einen Subagent-Hook auf Subagent-Ebene zu testen, wechseln Sie zum Subagent-Generator, wählen Sie die Ansicht "Test-Playground " aus, wählen Sie ihren Subagent aus der Dropdownliste aus, und geben Sie eine Frage ein. Der „Hook“ wird nur ausgeführt, wenn dieser bestimmte Subagent aufgerufen wird.

Verwalten von Hooks pro Thread

Hooks auf Agentebene mit Always-Aktivierung sind standardmäßig in jeder Unterhaltung aktiv. Sie müssen Hooks mit on Demand-Aktivierung pro Thread manuell aktivieren.

Aktivieren/Deaktivieren von Hooks in einem Gespräch

Führen Sie die folgenden Schritte aus, um Hooks in einem bestimmten Thread zu aktivieren oder zu deaktivieren.

  1. Öffnen Sie einen Chatthread .
  2. Wählen Sie die + Schaltfläche in der Chatfußzeile aus.
  3. Wählen Sie "Hooks verwalten" aus.
  4. Schalten Sie Hooks für den aktuellen Thread ein oder aus.

Sie können Always Hooks vorübergehend deaktivieren. Bei Bedarf können Sie On Demand-Hooks aktivieren. Sie können erforderliche System-Hooks nicht umschalten.

Hook-Änderungen werden sofort im aktuellen Thread wirksam.

Problembehandlung

In der folgenden Tabelle sind häufige Probleme und Lösungen aufgeführt, wenn Sie Hooks im Portal erstellen und verwalten.

Problem Lösung
Hooks Seite nicht in der Seitenleiste sichtbar Die Hooks-Seite wird unter Generator angezeigt. Vergewissern Sie sich, dass sich Ihr Agent im Zustand "Laufen" befindet. Wenn die Option immer noch nicht angezeigt wird, wenden Sie sich an den Support.
"Hook-Name ist erforderlich" Geben Sie einen Namen mit nur Buchstaben, Zahlen, Bindestrichen und Unterstrichen ein.
"Name darf nur Buchstaben, Zahlen, Bindestriche und Unterstriche enthalten" Entfernen Sie Sonderzeichen aus dem Hook-Namen.
Der Hook-Name darf nicht mit system__ beginnen. Das system__ Präfix ist für Systemhaken reserviert. Wählen Sie einen anderen Namen aus.
„Tool Matcher ist für PostToolUse Hooks erforderlich“. PostToolUse-Hooks benötigen einen Regex-Matcher. Verwenden Sie * , um alle Tools abzugleichen.
Hook wird nicht ausgelöst Überprüfen Sie für Hooks auf Agentebene den Aktivierungsmodus. On Demand-Hooks müssen pro Thread aktiviert werden. Überprüfen Sie bei Hooks auf Subagentebene, ob der Subagent aufgerufen wird.
Stop Hook genehmigt alles Stellen Sie sicher, dass beim Ablehnen die Aufforderung {"ok": false, "reason": "..."} zurückgegeben wird. Eine Ablehnung ohne reason wird als Genehmigung behandelt.
Durch Skriptfehler blockierte Aktionen Legen Sie den Fehlermodus auf "Zulassen" für eine sanfte Degradierung während der Entwicklung fest. Wechseln Sie in der Produktion zu Blockierung.

Nächster Schritt