Skip to main content

Effacement du contexte et outils du terminal

Utilisez session.history.clearContext lorsqu’un hôte doit remplacer le contexte de conversation actuel sans remplacer la session. Parmi les utilisations courantes figurent les transferts et les stratégies de cycle de vie du contexte géré par l’hôte.

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 :

SDKOption de l’outil
Node.jsisTerminal
Pythonis_terminal
GoIsTerminal
.NETCopilotToolOptions.IsTerminal
Java
ToolDefinition.isTerminal(true) ou @CopilotTool(isTerminal = true)
Rustwith_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.