Skip to main content

コンテキストクリアとターミナルツール

ホストがセッションを置き換えずに現在の会話コンテキストを置き換える必要がある場合は、 session.history.clearContext を使用します。 一般的な用途には、ハンドオフとホストマネージド コンテキスト ライフサイクル ポリシーが含まれます。

コンテキストのクリアは、新しいセッションの作成とは異なります。セッション ID、システムおよび開発者のメッセージ、構成、イベント ログが保持され、モデルに接続された会話が削除されます。

重要

clearContext はツール ハンドラー プリミティブです。 ランタイムは、実行時にツール呼び出しなしで行われた呼び出し、空のシード プロンプトを使用した呼び出し、リモート セッションでの呼び出しを拒否します。

コンテキストクリア ツールを定義する

成功したコンテキストクリア ツールはターミナルである必要があります。 それ以外の場合、エージェント ループは、シード処理されたターンを開始する前に、新しくクリアされたウィンドウに対して別のモデル呼び出しを行う可能性があります。

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.`;
      },
    }),
  ],
});

必要な prompt は、新しいコンテキストの最初のユーザー メッセージになります。 クリアが成功すると、削除されたメッセージの数と初期メッセージを含む session.context_cleared が出力されます。

ターミナル ツールの動作

isTerminal は、ツールが成功した場合にのみ、現在のエージェントのターンを終了します。 失敗、拒否、却下、タイムアウト、または入力検証エラーは、モデルが復旧または再試行できるよう、引き続きモデルから見える状態に保たれます。

このオプションは、各言語の名前付け規則に従います。

SDKツールのオプション
Node.jsisTerminal
Pythonis_terminal
GoIsTerminal
.NETCopilotToolOptions.IsTerminal
Java
ToolDefinition.isTerminal(true) または @CopilotTool(isTerminal = true)
Rustwith_is_terminal(true)

終端性は、正常に完了した時点でターンを終了すべきツールにのみ使用してください。 通常のツールでは、設定を解除したままにする必要があります。