Skip to main content

Kontext-Clearing- und Terminaltools

Verwenden Sie session.history.clearContext, wenn ein Host den aktuellen Konversationskontext ersetzen muss, ohne die Sitzung zu ersetzen. Typische Verwendungen umfassen Übergaben und hostverwaltete Kontextlebenszyklusrichtlinien.

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:

SDKWerkzeugoption
Node.jsisTerminal
Pythonis_terminal
GoIsTerminal
.NETCopilotToolOptions.IsTerminal
Java
ToolDefinition.isTerminal(true) oder @CopilotTool(isTerminal = true)
Rustwith_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.