Skip to main content

Sitzungshaken

Hooks bieten Ihnen die Möglichkeit, das Verhalten von Copilot-Sitzungen an wichtigen Punkten im Lebenszyklus der Kommunikation abzufangen und anzupassen. Verwenden Sie Hooks für:

  • Steuern der Toolausführung – Genehmigen, Verweigern oder Ändern von Toolaufrufen
  • Transformieren von Ergebnissen – Ändern von Toolausgaben, bevor sie verarbeitet werden
  • Kontext hinzufügen – Zusätzliche Informationen beim Start der Sitzung einfügen
  • Behandeln von Fehlern – Implementieren der benutzerdefinierten Fehlerbehandlung
  • Prüfung und Protokollierung – zur Nachverfolgung aller Interaktionen für Compliance

Verfügbare Hooks

HookTriggerAnwendungsfall
Haken zur Verwendung vor WerkzeugenBevor ein Tool ausgeführt wirdBerechtigungssteuerung, Argumentvalidierung
Hook für die Verwendung des Tools nach der SitzungNach der Ausführung eines Tools (nur bei Erfolg)Ergebnistransformation, Protokollierung
Hook für die Verwendung des Tools nach der SitzungNach einer Toolausführung, deren Ergebnis ein Fehler warHinweise für Wiederholungsversuche einfügen, Fehler protokollieren
Hook für gesendete Benutzer PromptWenn der Benutzer eine Nachricht sendetPromptmodifikation, Filterung
Session Lifecycle HooksSitzung beginntKontext hinzufügen, Sitzung konfigurieren
Session Lifecycle HooksSitzung endetBereinigen, Analysen
Fehlerbehandlungs-HookFehler tritt aufBenutzerdefinierte Fehlerbehandlung

Schnellstart

Codesprachen navigation

TypeScript
import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient();

const session = await client.createSession({
  hooks: {
    onPreToolUse: async (input) => {
      console.log(`Tool called: ${input.toolName}`);
      // Allow all tools
      return { permissionDecision: "allow" };
    },
    onPostToolUse: async (input) => {
      console.log(`Tool result: ${JSON.stringify(input.toolResult)}`);
      return null; // No modifications
    },
    onSessionStart: async (input) => {
      return { additionalContext: "User prefers concise answers." };
    },
  },
});

Hook-Aufrufkontext

Jeder Hook empfängt einen invocation Parameter mit Kontext zur aktuellen Sitzung:

FeldTypBeschreibung
sessionIdstringDie ID der aktuellen Sitzung

Auf diese Weise können Hooks den Zustand beibehalten oder sitzungsspezifische Logik ausführen.

Allgemeine Muster

Protokollierung aller Toolaufrufe

const session = await client.createSession({
  hooks: {
    onPreToolUse: async (input) => {
      console.log(`[${new Date().toISOString()}] Tool: ${input.toolName}, Args: ${JSON.stringify(input.toolArgs)}`);
      return { permissionDecision: "allow" };
    },
    onPostToolUse: async (input) => {
      console.log(`[${new Date().toISOString()}] Result: ${JSON.stringify(input.toolResult)}`);
      return null;
    },
  },
});

Blockieren gefährlicher Werkzeuge

const BLOCKED_TOOLS = ["shell", "bash", "exec"];

const session = await client.createSession({
  hooks: {
    onPreToolUse: async (input) => {
      if (BLOCKED_TOOLS.includes(input.toolName)) {
        return {
          permissionDecision: "deny",
          permissionDecisionReason: "Shell access is not permitted",
        };
      }
      return { permissionDecision: "allow" };
    },
  },
});

Hinzufügen des Benutzerkontexts

const session = await client.createSession({
  hooks: {
    onSessionStart: async () => {
      const userPrefs = await loadUserPreferences();
      return {
        additionalContext: `User preferences: ${JSON.stringify(userPrefs)}`,
      };
    },
  },
});

Hook-Guides

Siehe auch