Skip to main content
Skip to content

Изменение средств во время сеанса

Приложение может заменить средства, которые он предоставляет для динамического сеанса, не воссоздавая его. Например, веб-страница может предлагать различные средства, как пользователь перемещается, или клиент, который берет на себя сеанс, может принести свои собственные средства. Каждый пакет SDK заменяет полный набор инструментов клиента и обработчики, обслуживающие его в одном вызове.

Экспериментальный. Замена средства упаковывает экспериментальный session.tools.set RPC и требует среды выполнения, поддерживающей ее.

Замена средств этого клиента

Передайте полный набор инструментов, которые должен предоставить этот клиент. Он заменяет средства, предоставленные клиентом при создании или возобновлении сеанса, или в более ранней замене. Встроенные средства, MCP и подключаемые модули, а также средства, которые другие клиенты, подключенные к одному и тому же предложению сеансов, не влияют на них. Передайте пустой список, чтобы удалить все средства этого клиента.

Средства определяются точно так же, как они предназначены для создания сеанса, и средство без обработчика ведет себя так же, как это происходит.

Языки кода 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([]);

Когда новые средства вступают в силу

  • Запросы модели. Среда выполнения предлагает новые средства из следующего запроса модели агента. Этот запрос может быть частью поворота, который уже выполняется.
  • Обработчики. Как только среда выполнения принимает замену, каждый инструмент, вызывающий сеанс, использует новые обработчики. Вызовы, которые уже выполняются на обработчиках, которые запустили их.
  • Отказ. Если среда выполнения отклоняет замену, вызов завершается ошибкой, а предыдущие средства и обработчики остаются на месте. Среда выполнения отклоняет имена инструментов с недопустимыми символами и именами, которые уже предоставляет другой подключенный клиент.
  • Упорядочивание. Одновременные замены в одном сеансе применяются одновременно, в том порядке, в который они сделаны.
  • Отмена. В пакетах SDK, которые позволяют отменить вызов, отменяя его, пока более ранняя замена по-прежнему отправляет ничего. После отправки запроса отмена останавливает только ожидание: если среда выполнения принимает замену, новые обработчики по-прежнему вступают в силу.

Замена инструментов во время поворота

Запрос модели, уже запущенный с предыдущими инструментами, поэтому агент по-прежнему может вызывать средство, которое вы только что удалили. Сеанс не отвечает на этот вызов, так как другой подключенный клиент может предоставить инструмент с тем же именем, чтобы вызов мог оставаться в ожидании до тех пор, пока очередь не прервана.

Если запущенный поворот по-прежнему может вызвать средство удаления, замените средства во время простоя сеанса, например после session.idle события или прерывания первого поворота. Замена обработчика средства под тем же именем безопасна во время поворота: вызовы, отправленные после того, как среда выполнения принимает замену, используйте новый обработчик.

Справочник по SDK

SDKМетод
TypeScriptsession.setTools(tools)
Pythonawait session.set_tools(tools)
Gosession.SetTools(ctx, tools)
.NETawait session.SetToolsAsync(tools, cancellationToken)
Java
session.setTools(tools), который возвращает значение CompletableFuture<Void>
Rustsession.set_tools(tools).await