Verarbeiten von Genehmigungen und Benutzereingaben¶
Verwenden Sie die allowedTools/disallowedTools-Regeln und einen canUseTool-Callback, um zu steuern, welche Tools der Agent verwenden kann und wie mit Berechtigungsanfragen umgegangen wird.
Standardmäßig erzwingt das SDK die Berechtigungen für Tools und umgeht diese nicht. Der canUseTool-Callback gibt Ihnen eine genauere Kontrolle über Berechtigungsanfragen, die noch nicht durch allowedTools/disallowedTools-Regeln oder durch einen expliziten Berechtigungsmodus wie bypassPermissions gelöst sind.
Das SDK bietet standardmäßig keine interaktive Berechtigungsabfrage. Wenn eine auf Berechtigungen geprüfte Anfrage das SDK erreicht und canUseTool nicht angegeben ist, schlägt die Anfrage fehl.
Wie es funktioniert¶
Wenn Sie einen canUseTool-Callback angeben, ruft das SDK ihn vor jeder Ausführung eines Tools mit Berechtigungsprüfung auf. Ihr Callback entscheidet, was passiert:
Der Agent entscheidet, ein auf Berechtigungen geprüftes Tool zu verwenden.
Das SDK ruft Ihren
canUseTool-Callback mit dem Namen des Tools, der Anfrageeingabe und dem Berechtigungskontext auf.Ihr Callback gibt
allowoderdenyzurück.Die Ausführung des Tools wird fortgesetzt oder wird entsprechend blockiert.
Bei vielen normalen Berechtigungsprüfungen für Tools enthält die Callback-Eingabe Felder wie { action, resource }. SDK-geroutete Pseudo-Tools wie AskUserQuestion und ExitPlanMode enthalten toolspezifische Felder.
Wenn canUseTool nicht angegeben ist und eine Anfrage mit Berechtigungsprüfung das SDK erreicht, gibt das SDK einen Fehler zurück, anstatt interaktiv zu fragen.
Grundlegendes Beispiel¶
Antwortmuster¶
Tool-Aufruf erlauben¶
Rückgabe von { behavior: "allow" }, damit das Tool mit seiner ursprünglichen Eingabe ausgeführt wird:
Tool-Aufruf ablehnen¶
Rückgabe von { behavior: "deny" } mit einer optionalen Nachricht. Der Agent sieht die Ablehnungsmeldung und kann seine Vorgehensweise anpassen:
Das AskUserQuestion-Tool¶
Cortex Code verfügt über ein integriertes AskUserQuestion-Tool, das der Agent verwendet, wenn er weitere Angaben vom Benutzer benötigt. Wenn der Agent AskUserQuestion aufruft, routet das SDK dies über Ihren``canUseTool``-Callback, wobei toolName auf "AskUserQuestion" gesetzt ist. Die Eingabe enthält die Fragen des Agenten als strukturierte Mehrfachauswahl-Optionen.
Verarbeitung von Fragen¶
Suchen Sie nach toolName === "AskUserQuestion" in Ihrem canUseTool-Callback. input enthält ein questions-Array, wobei jede Frage Folgendes enthält:
Feld |
Beschreibung |
|---|---|
|
Der vollständige Fragetext, der angezeigt werden soll |
|
Kurzer Bezeichner für die Frage |
|
Array von Auswahlmöglichkeiten, jeweils mit |
|
Wenn |
Rückgabe von allow mit einem updatedInput, welches die ursprünglichen questions und eine answers-Zuordnung enthält. Jeder Schlüssel ist der Fragetext und jeder Wert ist der Bezeichner der ausgewählten Option. Bei Fragen mit mehreren Auswahlen setzen Sie die Beschriftungen auf den Wert ", ".
Um eine Frage abzulehnen (die Interaktion abzubrechen), geben Sie deny zurück:
Tipp
AskUserQuestion wird über canUseTool weitergeleitet. Ohne einen Callback kann die Interaktion nicht abgeschlossen werden und die Anfrage schlägt fehl, anstatt im Hintergrund fortzufahren.
Das ExitPlanMode-Tool¶
Wenn sich eine Sitzung im plan-Modus befindet, bleibt Cortex Code in der Planung, bis der Plan genehmigt wurde. Die Genehmigungsanfrage wird über Ihren canUseTool-Callback weitergeleitet, wobei toolName/tool_name auf "ExitPlanMode" gesetzt ist.
Die Eingabe enthält:
Feld |
Beschreibung |
|---|---|
|
Der vorgeschlagene Plan, den der Agent ausführen möchte |
|
Optionale zusätzliche Genehmigungsaufforderung durch den Agenten |
Genehmigen oder Ablehnen eines Plans¶
Rückgabe von allow, um den Plan zu genehmigen. Sie können optional updatedInput.message einschließen, um den Überprüfungskontext an den Agenten zurückzugeben, bevor er den Planmodus verlässt.
Rückgabe von deny, um den Plan abzulehnen. Verwenden Sie message, wenn Sie möchten, dass der Agent den Plan mit spezifischem Feedback überarbeitet. Ablehnen von ExitPlanMode behält die aktuelle Wendung im Planmodus bei, sodass der Agent den Plan aktualisieren und erneut fragen kann.
Genehmigen von ExitPlanMode beendet den Planmodus für die aktuelle Runde. Nachfolgende Wendungen setzen das normale Nicht-Plan-Berechtigungsverhalten der Sitzung fort, sodass spätere Tool-Aufrufe so ausgewertet werden wie außerhalb des Plan-Modus.
Empfohlenes Interaktionsmuster¶
Verwenden Sie den Planmodus als Überprüfungsschleife:
Starten Sie die Sitzung mit
permissionMode: "plan"(TypeScript) oderpermission_mode="plan"(Python).Erlauben Sie dem Agenten fehlende Informationen über
AskUserQuestionzu sammeln.Wenn der Agent
ExitPlanModeaufruft, prüfen Sie den vorgeschlagenenplan-Text.Rückgabe von
denymit einer genauen Überprüfungsmeldung, wenn der Plan Änderungen benötigt.Rückgabe von
allow, sobald der Plan akzeptabel ist. Sie können optionalupdatedInput.message/updated_input["message"]mit einer Prüferanleitung für die Ausführung einschließen.Nach der Genehmigung kehren die Runden später zum normalen Sitzungsverhalten, dem Nicht-Plan-Berechtigungsverhalten zurück.
Beispiel für eine Überprüfungsschleife¶
Die einfachste Überprüfungsschleife besteht darin, einen schwachen Plan einmal mit spezifischem Feedback abzulehnen und dann den überarbeiteten Plan zu genehmigen:
Regelbasierte Berechtigungen¶
Für gängige Berechtigungsmuster können Sie eine regelbasierte Konfiguration verwenden, anstatt Callback-Logik zu schreiben. Mit den Optionen allowedTools und disallowedTools können Sie Listen von Tools definieren, die automatisch zugelassen oder gesperrt werden:
allowedTools-Einträge können Muster enthalten. Beispiel: Bash(npm test:*) genehmigt automatisch jeden Bash-Befehl, der mit diesem Muster übereinstimmt. disallowedTools-Einträge blockieren bestimmte Tools vollständig.
Diese Regeln werden von der CLI vor dem``canUseTool``-Callback ausgewertet. Wenn ein Tool mit einer zulässigen oder unzulässigen Regel übereinstimmt, wird der Callback für dieses Tool nicht aufgerufen.
Kombinieren mit Berechtigungsmodi¶
Der canUseTool-Callback funktioniert zusätzlich zu den Berechtigungsmodi. Wenn beide eingestellt sind, werden die integrierten Berechtigungsmodus-Filter der CLI zuerst ausgeführt, und Ihr Callback verarbeitet alle verbleibenden Tool-Aufrufe, die eine Genehmigung benötigen.
Die verfügbaren Berechtigungsmodi sind:
Modus |
Beschreibung |
|---|---|
|
Verwendet Standardberechtigungsprüfungen. In SDK-Sitzungen steuern Sie berechtigungsgeprüfte Tools mit |
|
Genehmigt Plananfragen und Bestätigungen zum Verlassen eines Plans automatisch. Die normalen Tool-Berechtigungen werden nicht umgangen. |
|
Der Agent plant Änderungen, führt sie aber nicht ohne Genehmigung aus. Mit |
|
Überspringt alle Berechtigungsprüfungen. Erfordert |
Ändern des Berechtigungsmodus während einer Sitzung¶
Sie können den Berechtigungsmodus nach Beginn der Sitzung ändern. TypeScript stellt setPermissionMode() für beide Query und CortexCodeSession zur Verfügung. Python stellt set_permission_mode() unter CortexCodeSDKClient zur Verfügung.
Der aktualisierte Modus gilt für spätere Runden, nachdem die Steuerungsanforderung verarbeitet wurde. Ein bereits ausgeführter Tool-Aufruf wird nicht rückwirkend geändert.
Hooks¶
Mit Hooks können Sie die Ausführung von Tools in verschiedenen Lebenszyklusstufen abfangen. Im Gegensatz zu canUseTool, das nur steuert, ob ein Tool ausgeführt wird, können Hooks die Ergebnisse des Tools überprüfen, den Kontext einfügen und den Agentenfluss steuern.
Hook-Ereignisse¶
Ereignis |
Wann es ausgelöst wird |
|---|---|
|
Bevor ein Tool ausgeführt wird. Kann die Ausführung blockieren oder die Eingabe ändern. |
|
Nachdem ein Tool erfolgreich abgeschlossen wurde. |
|
Wenn eine Benutzer-Eingabeaufforderung gesendet wird. |
|
Wenn der Agent stoppt. |
|
Wenn ein Subagent stoppt. |
|
Wenn der Agent eine Benachrichtigung ausgibt. |
|
Wenn eine Berechtigungsanforderung für ein Tool erfolgt. |
|
Vor der Kontextkomprimierung. |
Das Feld matcher bei einem Hook-Eintrag ist optional. Wenn bereitgestellt, wird nach dem Übereinstimmungswert des Ereignisses gefiltert: Tool-Name für PreToolUse, PostToolUse und PermissionRequest; Benachrichtigungstyp für Notification und Trigger für PreCompact. Wenn dies weggelassen wird, wird der Hook für alle Werte dieses Ereignisses ausgelöst.
Siehe TypeScript SDK-Referenz und Python SDK-Referenz für die vollständigen Definitionen der Hook-Eingabe- und Ausgabetypen.
Auswählen eines Ansatzes¶
Ansatz |
Einsatzszenarios |
|---|---|
|
Sandbox-Umgebungen, CI-Pipelines oder vollständig vertrauenswürdige Szenarios, in denen Sie die Tool-Aufrufe nicht überprüfen müssen. Erfordert |
|
Wenn Sie Ihre Berechtigungsrichtlinie als statische Liste von zulässigen oder blockierten Tools ausdrücken können |
|
Produktionssysteme, bei denen Sie Tool-Aufrufe vor der Ausführung überprüfen, filtern oder ändern müssen |
Nur Berechtigungsmodus (kein Callback) |
Wenn |
Hooks |
Wenn Sie die Ergebnisse von Tools beobachten oder darauf reagieren müssen, Kontext einfügen und den Agentenfluss über Zulassen/Ablehnen-Entscheidungen hinaus steuern möchten. |
Bemerkung
Das SDK umgeht standardmäßig keine Berechtigungen oder fordert Sie interaktiv auf. Wenn eine auf Berechtigungen geprüfte Anfrage das SDK erreicht und canUseTool nicht angegeben ist, schlägt die Anfrage fehl. Um Berechtigungen zu umgehen, müssen Sie explizit permissionMode: "bypassPermissions" mit dem entsprechenden Sicherheitsflag festlegen.
Rechtliche Hinweise¶
Wenn Ihre Cortex Code-Konfiguration ein Modell verwendet, das im Rahmen der Modell- und Service-Pass-Through-Bedingungen bereitgestellt wurde, unterliegt Ihre Nutzung dieses Modells zusätzlich den Bedingungen für dieses Modell auf dieser Seite.
Die Datenklassifizierung der Eingaben und Ausgaben ist in der folgenden Tabelle aufgeführt.
Klassifizierung von Eingabedaten |
Klassifizierung von Ausgabedaten |
Benennung |
|---|---|---|
Usage Data |
Kundendaten |
Abgedeckte AI-Features [1] |
Weitere Informationen dazu finden Sie unter KI und ML in Snowflake.