Skip to main content

Быстрый старт для крючков

Начинайте с использования крючков Второй пилот SDK для управления работой инструментов, трансформации результатов, добавления контекста, обработки ошибок и аудита взаимодействий.

Кто может использовать эту функцию?

GitHub Copilot SDK Доступна со всеми Copilot тарифными планами.

Примечание.

Второй пилот SDK в настоящее время находится в Technical Preview. Функциональность и доступность могут меняться.

Крючки позволяют перехватывать и настраивать поведение Второй пилот SDK сессий в ключевые моменты жизненного цикла разговора. Используйте крючки, чтобы:

  •         **Выполнение инструментов управления** — одобрение, отклонение или изменение вызовов инструментов
    
  •         **Трансформируйте результаты** — модифицируйте выходы инструментов до их обработки
    
  •         **Добавить контекст** — добавить дополнительную информацию при начале сессии
    
  •         **Обработка ошибок — реализация** пользовательской обработки ошибок
    
  •         **Ведите аудит и лог** — отслеживайте все взаимодействия для соответствия требованиям
    

Доступные крючки

ОбработчикТриггерСценарий использования
onPreToolUseДо запуска инструментаКонтроль разрешений, проверка аргументов
onPostToolUseПосле запуска инструментаПреобразование результата, логирование
onUserPromptSubmittedКогда пользователь отправляет сообщениеИзменение подсказок, фильтрация
onSessionStartНачало сессииДобавьте контекст, настройте сессию
onSessionEndСессия завершенаОчистка, аналитика
onErrorOccurredОшибка возникаетОбработка пользовательских ошибок

Быстрый старт

Следующий пример демонстрирует, как регистрировать хуки при создании сессии в Node.js/TypeScript.

import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient();

const session = await client.createSession({
  hooks: {
    onPreToolUse: async (input) => {
      console.log(`Tool called: ${input.toolName}`);
      // Allow all tools
      return { permissionDecision: "allow" };
    },
    onPostToolUse: async (input) => {
      console.log(
        `Tool result: ${JSON.stringify(input.toolResult)}`
      );
      return null; // No modifications
    },
    onSessionStart: async (input) => {
      return {
        additionalContext:
          "User prefers concise answers.",
      };
    },
  },
});

Примеры в Python, Go и .NET см. репозиторийgithub/copilot-sdk.

Контекст вызова крюка

Каждый крючок получает invocation параметр с контекстом текущей сессии.

ПолеТипОписание
sessionIdструнаID текущей сессии

Это позволяет хукам сохранять состояние или выполнять логику, специфичную для сессии.

Распространенные шаблоны

Логирование всех вызовов инструментов

const session = await client.createSession({
  hooks: {
    onPreToolUse: async (input) => {
      console.log(
        `[${new Date().toISOString()}] Tool: `
        + `${input.toolName}, `
        + `Args: ${JSON.stringify(input.toolArgs)}`
      );
      return { permissionDecision: "allow" };
    },
    onPostToolUse: async (input) => {
      console.log(
        `[${new Date().toISOString()}] `
        + `Result: ${JSON.stringify(input.toolResult)}`
      );
      return null;
    },
  },
});

Блокировка опасных инструментов

const BLOCKED_TOOLS = ["shell", "bash", "exec"];

const session = await client.createSession({
  hooks: {
    onPreToolUse: async (input) => {
      if (BLOCKED_TOOLS.includes(input.toolName)) {
        return {
          permissionDecision: "deny",
          permissionDecisionReason:
            "Shell access is not permitted",
        };
      }
      return { permissionDecision: "allow" };
    },
  },
});

Добавление пользовательского контекста

const session = await client.createSession({
  hooks: {
    onSessionStart: async () => {
      const userPrefs = await loadUserPreferences();
      return {
        additionalContext:
          `User preferences: `
          + `${JSON.stringify(userPrefs)}`,
      };
    },
  },
});

Дальнейшие действия

  •         [AUTOTITLE](/copilot/how-tos/copilot-sdk/use-hooks/pre-tool-use)
    
  •         [AUTOTITLE](/copilot/how-tos/copilot-sdk/use-hooks/post-tool-use)
    
  •         [AUTOTITLE](/copilot/how-tos/copilot-sdk/use-hooks/user-prompt-submitted)
    
  •         [AUTOTITLE](/copilot/how-tos/copilot-sdk/use-hooks/session-lifecycle)
    
  •         [AUTOTITLE](/copilot/how-tos/copilot-sdk/use-hooks/error-handling)