Skip to main content

Инструментация OpenTelemetry для Copilot SDK

Узнайте, как добавить трассировку OpenTelemetry в ваши Второй пилот SDK приложения.

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

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

Примечание.

          Второй пилот SDK в настоящее время находится в Technical Preview. Функциональность и доступность могут меняться.
          GitHub Copilot SDK имеет встроенную поддержку настройки OpenTelemetry на процессе CLI и распространения W3C Trace Context между SDK и CLI.

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

Встроенная поддержка телеметрии

Чтобы согласиться на телеметрию, при создании клиента укажите:TelemetryConfig

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

const client = new CopilotClient({
  telemetry: {
    otlpEndpoint: "http://localhost:4318",
  },
});

Опции TelemetryConfig

ОпцияNode.jsОписание
Конечная точка OTLPotlpEndpointURL конечной точки OTLP HTTP
Путь к файлуfilePathПуть файла для вывода JSON-lines trace
Тип экспортераexporterType
          `"otlp-http"` или `"file"` |

| Имя источника | sourceName | Название области приборов | | Захват контента | captureContent | Нужно ли фиксировать содержимое сообщений |

Распространение контекста следов

Примечание.

Большинству пользователей это не нужно. Вышеописанное — всё, TelemetryConfig что нужно для сбора трассировок из CLI. Распространение контекста трассировки — это продвинутая функция для приложений, которые создают собственные OpenTelemetry промежутки и хотят, чтобы они отображались в той же распределённой трассе, что и споведы CLI.

SDK может передавать W3C Trace Context (traceparent/tracestate) на JSON-RPC полезных нагрузках, чтобы span-и вашего приложения и CLI были связаны в одну распределённую трассу. Это полезно, например, когда вы хотите показать вызов SDK как дочерний диапазон обработки запросов.

Для подробной диаграммы последовательности сессионного потока см. репозиторийgithub/copilot-sdk.

SDK на CLI (исходящий маршрут)

Дайте обратный onGetTraceContext звонок по вариантам клиента. Это необходимо только если ваше приложение уже использует @opentelemetry/api это и вы хотите связать свои соны с спанами CLI. SDK вызывает этот обратный вызов перед session.create, session.resume, и session.send RPC:

TypeScript
import { CopilotClient } from "@github/copilot-sdk";
import { propagation, context } from "@opentelemetry/api";

const client = new CopilotClient({
  telemetry: { otlpEndpoint: "http://localhost:4318" },
  onGetTraceContext: () => {
    const carrier: Record<string, string> = {};
    propagation.inject(context.active(), carrier);
    return carrier; // { traceparent: "00-...", tracestate: "..." }
  },
});

CLI к SDK (входящий)

Когда CLI вызывает обработчик инструментов, traceparent доступны и tracestate от пролёта CLI. Поскольку SDK не зависит от OpenTelemetry, эти строки передаются на ToolInvocation объект в виде сырых строк. При необходимости восстанавливайте контекст вручную:

TypeScript
import { propagation, context, trace } from "@opentelemetry/api";

session.registerTool(myTool, async (args, invocation) => {
  // Restore the CLI's trace context as the active context
  const carrier = {
    traceparent: invocation.traceparent,
    tracestate: invocation.tracestate,
  };
  const parentCtx = propagation.extract(context.active(), carrier);

  // Create a child span under the CLI's span
  const tracer = trace.getTracer("my-app");
  return context.with(parentCtx, () =>
    tracer.startActiveSpan("my-tool", async (span) => {
      try {
        const result = await doWork(args);
        return result;
      } finally {
        span.end();
      }
    })
  );
});

Дополнительные материалы

  •         [Семантические конвенции OpenTelemetry GenAI](https://opentelemetry.io/docs/specs/semconv/gen-ai/) в документации OpenTelemetry
    
  •         [Семантические конвенции OpenTelemetry MCP](https://opentelemetry.io/docs/specs/semconv/gen-ai/mcp/) в документации OpenTelemetry
    
  •         [OpenTelemetry Python SDK](https://opentelemetry.io/docs/instrumentation/python/) в документации OpenTelemetry