Skip to main content
Skip to content

Werkzeuge während einer Sitzung ändern

Eine Anwendung kann die tools ersetzen, die sie für eine Livesitzung bereitstellt, ohne sie neu zu erstellen. Beispielsweise kann eine Webseite verschiedene Tools anbieten, während der Benutzer navigiert, oder ein Client, der eine Sitzung übernimmt, kann eigene Tools mitbringen. Jedes SDK ersetzt den vollständigen Toolsatz des Clients und die zugehörigen Handler in einem Aufruf.

Experimentell. Das Ersetzen des Tools kapselt den experimentellen session.tools.set RPC und erfordert eine Laufzeit, die ihn unterstützt.

Tools dieses Clients ersetzen

Geben Sie den vollständigen Satz von Tools weiter, die dieser Client liefern sollte. Dies ersetzt die Tools, die der Client beim Erstellen oder Fortsetzen der Sitzung oder in einem früheren Ersatz bereitgestellt hat. Integrierte, MCP- und Plug-in-Tools sowie Tools, die von anderen Clients, die mit derselben Sitzung verbunden sind, bereitgestellt werden, sind nicht betroffen. Übergeben Sie eine leere Liste, um alle Tools dieses Clients zu entfernen.

Tools werden genau so definiert, wie beim Erstellen einer Sitzung, und ein Tool ohne Handler verhält sich genauso wie dort.

Codesprachen 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([]);

Wenn die neuen Tools wirksam werden

  • Modellanfragen. Die Laufzeit bietet die neuen Tools aus der nächsten Modellanfrage des Agenten. Diese Anforderung kann Teil eines Ablaufs sein, der bereits im Gange ist.
  • Handler. Sobald die Laufzeit den Ersatz akzeptiert, verwendet jeder Tool-Aufruf, den die Sitzung auslöst, die neuen Handler. Anfragen, die bereits ausgeführt werden, werden auf den Handlern abgeschlossen, die sie gestartet haben.
  • Ablehnung. Wenn die Laufzeit den Ersatz ablehnt, schlägt der Aufruf fehl, und die vorherigen Tools und Handler bleiben vorhanden. Die Laufzeit lehnt Toolnamen mit ungültigen Zeichen und Namen ab, die bereits von einem anderen verbundenen Client bereitgestellt werden.
  • Bestellung. Gleichzeitige Ersetzungen in derselben Sitzung werden einzeln angewendet, in der Reihenfolge, in der sie vorgenommen werden.
  • Stornierung. In SDKs, die es Ihnen ermöglichen, den Aufruf abzubrechen, sendet das Abbrechen nichts, solange ein früherer Ersetzungsaufruf noch in Bearbeitung ist. Sobald die Anforderung gesendet wurde, beendet das Abbrechen nur die Wartezeit: Wenn die Laufzeit den Ersatz akzeptiert, werden die neuen Handler weiterhin wirksam.

Ersetzen von Tools während eines Zuges

Eine Modellanforderung, die bereits in Bearbeitung ist, wurde mit den vorherigen Tools durchgeführt, sodass der Agent weiterhin ein Tool aufrufen kann, das Sie soeben entfernt haben. Die Sitzung beantwortet diesen Aufruf nicht, da ein anderer verbundener Client möglicherweise ein Tool mit demselben Namen bereitstellen könnte, sodass der Aufruf ausstehen kann, bis der Vorgang abgebrochen wird.

Wenn ein laufender Turn möglicherweise weiterhin ein Tool aufruft, das Sie entfernen, ersetzen Sie Tools, während die Sitzung im Leerlauf ist, z. B. nach dem session.idle-Ereignis, oder brechen Sie den Turn zuerst ab. Das Ersetzen des Handlers eines Tools unter demselben Namen ist während eines Ausführungszyklus sicher: Aufrufe, die weitergeleitet werden, nachdem die Laufzeit den Ersatz akzeptiert hat, verwenden den neuen Handler.

SDK-Referenz

SDKMethode
TypeScriptsession.setTools(tools)
Pythonawait session.set_tools(tools)
Gehensession.SetTools(ctx, tools)
.NETawait session.SetToolsAsync(tools, cancellationToken)
Java
session.setTools(tools), das einen CompletableFuture<Void> zurückgibt
Rustsession.set_tools(tools).await