Skip to main content
Skip to content

Changement d’outils pendant une session

Une application peut remplacer les outils qu’elle fournit à une session en direct sans la recréer. Par exemple, une page web peut offrir différents outils à mesure que l’utilisateur navigue, ou un client qui prend le contrôle d’une session peut apporter ses propres outils. Chaque KIT SDK remplace l’ensemble complet d’outils du client et les gestionnaires associés dans un seul appel.

Expérimental. Le remplacement de l’outil encapsule le RPC expérimental session.tools.set et nécessite un runtime qui le prend en charge.

Remplacer les outils de ce client

Réussit avec l’ensemble complet d’outils que ce client doit fournir. Il remplace les outils fournis par le client lors de la création ou de la reprise de la session, ou dans un remplacement antérieur. Les outils intégrés, MCP et plug-in et les outils que d’autres clients connectés à la même session fournissent ne sont pas affectés. Passez une liste vide pour supprimer tous les outils de ce client.

Les outils sont définis exactement comme ils le sont pour la création d’une session, et un outil sans gestionnaire se comporte de la même façon dans ce cas également.

Langages de code navigation

TypeScript
import { defineTool } from "@github/copilot-sdk";
import { z } from "zod";

const searchIssues = defineTool("search_issues", {
    description: "Search the issues shown on the current page",
    parameters: z.object({ query: z.string().describe("Search text") }),
    handler: async ({ query }) => findIssues(query),
});

// Supply only the tools the current page provides.
await session.setTools([searchIssues]);

// Remove all of this client's tools.
await session.setTools([]);

Lorsque les nouveaux outils entrent en vigueur

  • Requêtes de modèle. Le runtime offre les nouveaux outils provenant de la prochaine requête au modèle de l’agent. Cette demande peut faire partie d’un tour de parole qui est déjà en cours.
  • Gestionnaires. Dès que le runtime accepte le remplacement, chaque appel d’outil que la session envoie utilise les nouveaux gestionnaires. Les appels en cours d’exécution se terminent sur les gestionnaires d’événements qui les ont démarrés.
  • Rejet. Si le runtime rejette le remplacement, l’appel échoue et les outils et gestionnaires précédents restent en place. Le runtime rejette les noms d’outils comportant des caractères non valides et les noms qu’un autre client connecté fournit déjà.
  • Commande. Les remplacements simultanés sur la même session sont appliqués un par un, dans l’ordre dans lequel ils sont effectués.
  • Annulation. Dans les kits sdk qui vous permettent d’annuler l’appel, l’annulation de l’appel alors qu’un remplacement antérieur est toujours en cours, cela n’envoie rien. Une fois la requête envoyée, l’annulation arrête uniquement l’attente : si le runtime accepte le remplacement, les nouveaux gestionnaires prennent toujours effet.

Remplacement d’outils lors d’un tour

Une requête du modèle déjà en cours d’exécution a été effectuée avec les outils précédents, de sorte que l’agent peut toujours appeler un outil que vous venez de supprimer. La session ne répond pas à cet appel, car un autre client connecté peut fournir un outil portant le même nom. L’appel peut donc rester en attente jusqu’à ce que le turn soit abandonné.

Si une itération en cours d’exécution peut toujours appeler un outil que vous supprimez, remplacez les outils pendant que la session est inactive, par exemple après l’événement session.idle, ou abandonnez d’abord l’itération. Le remplacement du gestionnaire d’un outil sous le même nom peut se faire en toute sécurité pendant un tour : les appels acheminés une fois que l’environnement d’exécution a accepté le remplacement utilisent le nouveau gestionnaire.

Informations de référence sur le SDK

SDKMéthode
TypeScriptsession.setTools(tools)
Pythonawait session.set_tools(tools)
Gosession.SetTools(ctx, tools)
.NETawait session.SetToolsAsync(tools, cancellationToken)
Java
session.setTools(tools), qui retourne un CompletableFuture<Void>
Rustsession.set_tools(tools).await