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
| Hook | Déclencheur | Cas d’utilisation |
|---|---|---|
onPreToolUse | Avant qu'un outil ne s'exécute | Contrôle d’autorisation, validation des arguments |
onPostToolUse | Une fois qu’un outil s’exécute | Transformation des résultats, journalisation |
onUserPromptSubmitted | Lorsque l’utilisateur envoie un message | Modification de l'invitation, filtrage |
onSessionStart | La session commence | Ajouter un contexte, configurer une session |
onSessionEnd | Fin de session | Nettoyage, analyse |
onErrorOccurred | Une erreur se produit | Gestion 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.
| Champ | Type | Description |
|---|---|---|
sessionId | ficelle | ID 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)