Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
- Wechseln Sie zu sre.azure.com , und wählen Sie Ihren Agenten aus.
- Erweitern Sie in der Randleiste den Generator.
- 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.
Wählen Sie "Hook erstellen" aus.
Füllen Sie die Formularfelder aus:
Feld Wert Name require-table-formatEreignistyp Anhalten Aktivierungsmodus Immer Beschreibung Stellt sicher, dass Antworten strukturierte Daten als Markdowntabellen mit fett formatierten Kopfzeilen darstellen Halten Sie unter "Hook-Definition" den Hook-Typ auf "Eingabeaufforderung" festgelegt.
Belassen Sie Model auf Reasoning Fast (Standard).
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."}Belassen Sie Timeout (sec) bei
30, Fehlermodus beiAllowund Max Ablehnungen bei3.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.
- Wählen Sie in der Randleiste "Chat" aus.
- Geben Sie die Vor- und Nachteile von Python vs Go zum Erstellen von Microservices ein, und wählen Sie "Senden" aus.
- 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.
Kehren Sie zu Builder>Hooks zurück.
Wählen Sie "Hook erstellen" aus.
Füllen Sie das Formular aus:
Feld Wert Name block-dangerous-commandsEreignistyp Verwendung des Post-Werkzeugs Aktivierungsmodus Immer Beschreibung Blockiert rm -rf, sudo und chmod 777 in Shellbefehlen Hook-Typ Befehl Werkzeug-Abgleich Bash\|ExecuteShellCommandWählen Sie Python als Skriptsprache aus.
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"}))Legen Sie den Fehlermodus auf "Blockieren " fest (wenn das Skript abstürzt, wird das Toolergebnis blockiert).
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.
- Wählen Sie in der Randleiste "Chat" aus.
- Bitten Sie den Agent, einen sicheren Befehl auszuführen: "Echo hello ausführen". Der Hook ermöglicht diesen Befehl.
- 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.
- Erweitern Sie in der Randleiste den Generator , und wählen Sie den Subagent-Generator aus.
- Wählen Sie einen vorhandenen Subagent aus, um ihn zu bearbeiten, oder wählen Sie "Erstellen" aus, um ein neues zu starten.
- Scrollen Sie im Subagent-Formular nach unten zum Hooks-Abschnitt .
- 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.
Wählen Sie im Bereich Hooks verwalten die Option Hook hinzufügen am unteren Rand des Bereichs.
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 Wählen Sie Speichern für den Hook.
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.
- Öffnen Sie einen Chatthread .
- Wählen Sie die + Schaltfläche in der Chatfußzeile aus.
- Wählen Sie "Hooks verwalten" aus.
- 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. |