L’effacement du contexte diffère de la création d’une nouvelle session : il conserve l’identité de session, les messages système et développeur, la configuration et le journal des événements lors de la suppression de la conversation orientée modèle.
Important
clearContext est une primitive de gestionnaire d’outils. Le runtime rejette les appels effectués sans appel d’outil en cours d’exécution, les appels avec une invite initiale vide et les appels sur les sessions à distance.
Définir un outil d’effacement de contexte
Un outil d’effacement de contexte réussi doit être terminal. Sinon, la boucle de l’agent peut effectuer un autre appel de modèle sur la fenêtre nouvellement effacée avant de démarrer le tour initialisé.
import { approveAll, CopilotClient, defineTool } from "@github/copilot-sdk";
import type { CopilotSession } from "@github/copilot-sdk";
import { z } from "zod";
const client = new CopilotClient();
let session: CopilotSession;
session = await client.createSession({
onPermissionRequest: approveAll,
tools: [
defineTool("clear_context", {
description: "Clear the conversation and start a fresh context window",
parameters: z.object({ prompt: z.string() }),
isTerminal: true,
defer: "never",
handler: async ({ prompt }) => {
const { messagesCleared } =
await session.rpc.history.clearContext({ prompt });
return `Cleared ${messagesCleared} messages.`;
},
}),
],
});
Le message requis prompt devient le premier message utilisateur dans le contexte nouveau. Une opération d’effacement réussie émet session.context_cleared avec le nombre de messages supprimés et le message initial.
Comportement de l’outil terminal
isTerminal met fin au tour actuel de l’agent uniquement si l’outil réussit. Une erreur de défaillance, de déni, de rejet, de délai d’expiration ou de validation d’entrée reste visible pour le modèle afin qu’il puisse récupérer ou réessayer.
L’option suit les conventions d’affectation de noms de chaque langue :
| SDK | Option de l’outil |
|---|---|
| Node.js | isTerminal |
| Python | is_terminal |
| Go | IsTerminal |
| .NET | Copilot |
| Java | |
Tool ou @Copilot | |
| Rust | with_is_terminal(true) |
Utilisez la terminalité uniquement pour les outils dont l’exécution réussie doit mettre fin au tour. Les outils ordinaires doivent le laisser non défini.