Skip to main content

Démarrage rapide pour les hooks

Commencez avec les hooks dans Kit de développement logiciel (SDK) Copilot pour contrôler l'exécution des outils, transformer les résultats, ajouter du contexte, gérer les erreurs et auditer les interactions.

Qui peut utiliser cette fonctionnalité ?

SDK GitHub Copilot est disponible dans tous les forfaits Copilot.

Remarque

Kit de développement logiciel (SDK) Copilot est actuellement en préversion technique. Les fonctionnalités et la disponibilité sont susceptibles de changer.

Les hooks vous permettent d’intercepter et de personnaliser le comportement des sessions aux points clés du cycle de vie de la conversation de Kit de développement logiciel (SDK) Copilot. Utilisez des crochets pour :

  •         **Exécution de l’outil de contrôle** : approuver, refuser ou modifier des appels d’outil
    
  • Transformer les résultats : modifier les sorties de l’outil avant qu’elles ne soient traitées
  •         **Ajouter un contexte** : injecter des informations supplémentaires au début de la session
    
  •         **Gérer les erreurs** : implémenter la gestion des erreurs personnalisée
    
  •         **Audit et journal** : suivre toutes les interactions pour la conformité
    

Crochets disponibles

HookDéclencheurCas d’utilisation
onPreToolUseAvant qu'un outil ne s'exécuteContrôle d’autorisation, validation des arguments
onPostToolUseUne fois qu’un outil s’exécuteTransformation des résultats, journalisation
onUserPromptSubmittedLorsque l’utilisateur envoie un messageModification de l'invitation, filtrage
onSessionStartLa session commenceAjouter un contexte, configurer une session
onSessionEndFin de sessionNettoyage, analyse
onErrorOccurredUne erreur se produitGestion des erreurs personnalisée

Démarrage rapide

L’exemple suivant montre comment inscrire des hooks lors de la création d’une session dans Node.js/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.",
      };
    },
  },
});

Pour obtenir des exemples dans Python, Go et .NET, consultez le github/copilot-sdk référentiel.

Contexte d’appel de hook

Chaque hook reçoit un invocation paramètre avec le contexte de la session active.

ChampTypeDescription
sessionIdficelleID de la session active

Cela permet aux hooks de maintenir l’état ou d’effectuer une logique spécifique à la session.

Modèles courants

Journalisation de tous les appels d’outils

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;
    },
  },
});

Blocage des outils dangereux

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" };
    },
  },
});

Ajout d’un contexte utilisateur

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

Étapes suivantes

  •         [AUTOTITLE](/copilot/how-tos/copilot-sdk/use-hooks/pre-tool-use)
    
  •         [AUTOTITLE](/copilot/how-tos/copilot-sdk/use-hooks/post-tool-use)
    
  •         [AUTOTITLE](/copilot/how-tos/copilot-sdk/use-hooks/user-prompt-submitted)
    
  •         [AUTOTITLE](/copilot/how-tos/copilot-sdk/use-hooks/session-lifecycle)
    
  •         [AUTOTITLE](/copilot/how-tos/copilot-sdk/use-hooks/error-handling)