Das Leeren des Kontexts unterscheidet sich vom Erstellen einer neuen Sitzung: Dabei bleiben die Sitzungsidentität, System- und Entwicklernachrichten, die Konfiguration und das Ereignisprotokoll erhalten, während die für das Modell sichtbare Konversation entfernt wird.
Wichtig
clearContext ist ein Toolhandlergrundtyp. Die Laufzeit lehnt Aufrufe ab, wenn kein Tool-Aufruf aktiv ist, wenn der Seed-Prompt leer ist oder wenn die Aufrufe in Remote-Sitzungen erfolgen.
Ein Tool zum Löschen des Kontexts definieren
Ein erfolgreiches Kontext-Clearing-Tool sollte terminal sein. Andernfalls kann die Agenten-Schleife einen weiteren Modellaufruf für das neu geleerte Kontextfenster durchführen, bevor der initialisierte Zug beginnt.
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.`;
},
}),
],
});
Die erforderliche prompt Nachricht wird zur ersten Benutzernachricht im neuen Kontext. Ein erfolgreiches Leeren sendet session.context_cleared mit der Anzahl der entfernten Nachrichten und der ursprünglichen Nachricht.
Terminal-Werkzeugverhalten
isTerminal beendet den aktuellen Agenten-Turn nur dann, wenn das Tool erfolgreich ausgeführt wird. Ein Fehler, Verweigerungs-, Ablehnungs-, Timeout- oder Eingabeüberprüfungsfehler bleibt für das Modell sichtbar, sodass er wiederhergestellt oder erneut versucht werden kann.
Die Option folgt den Benennungskonventionen der einzelnen Sprachen:
| SDK | Werkzeugoption |
|---|---|
| Node.js | isTerminal |
| Python | is_terminal |
| Go | IsTerminal |
| .NET | Copilot |
| Java | |
Tool oder @Copilot | |
| Rust | with_is_terminal(true) |
Verwenden Sie Terminalität nur bei Tools, deren erfolgreiche Ausführung den Zug beenden sollte. Gewöhnliche Tools sollten sie nicht festgelegt lassen.