Remarque
SDK Copilot est actuellement en préversion publique. Les fonctionnalités et la disponibilité sont susceptibles de changer.
Kit de développement logiciel (SDK) GitHub Copilot prend en charge la configuration d’OpenTelemetry sur le processus CLI et la propagation du contexte de trace W3C entre le Kit de développement logiciel (SDK) et l’interface CLI.
Pour obtenir des exemples dans Python, Go et .NET, consultez le github/copilot-sdk référentiel.
Prise en charge de la télémétrie intégrée
Pour choisir la télémétrie, fournissez une TelemetryConfig valeur lors de la création du client :
import { CopilotClient } from "@github/copilot-sdk";
const client = new CopilotClient({
telemetry: {
otlpEndpoint: "http://localhost:4318",
},
});
import { CopilotClient } from "@github/copilot-sdk";
const client = new CopilotClient({
telemetry: {
otlpEndpoint: "http://localhost:4318",
},
});
Options de configuration de télémétrie
| Choix | Node.JS | Description |
|---|---|---|
| Point de terminaison OTLP | otlpEndpoint | URL du point de terminaison HTTP OTLP |
| Chemins d'accès au fichier | filePath | Chemin du fichier pour la sortie trace au format JSON-lines |
| Type d’exportateur | exporterType |
`"otlp-http"` ou `"file"` |
| Nom de la source | sourceName | Nom de la portée d’instrumentation |
| Capturer du contenu | captureContent | Indique s’il faut capturer le contenu du message |
Propagation du contexte de trace
Remarque
La plupart des utilisateurs n’ont pas besoin de cela. Le TelemetryConfig ci-dessus est tout ce dont vous avez besoin pour collecter les traces depuis le CLI. La propagation du contexte de trace est une fonctionnalité avancée pour les applications qui créent leurs propres étendues OpenTelemetry et veulent qu’elles apparaissent dans la même trace distribuée que les étendues de l’interface CLI.
Le Kit de développement logiciel (SDK) peut propager le contexte de trace W3C (traceparent/tracestate) sur des charges utiles JSON-RPC afin que les étendues de votre application et les étendues de l’interface CLI soient liées dans une trace distribuée. Cela est utile lorsque, par exemple, vous souhaitez afficher l’appel du SDK en tant que sous-élément de votre plage de traitement des requêtes.
Pour obtenir un diagramme de séquence détaillé du flux de session, consultez le github/copilot-sdk référentiel.
SDK vers CLI (sortant)
Fournissez une fonction de rappel dans les options du client. Cela n’est nécessaire que si votre application utilise @opentelemetry/api déjà et que vous souhaitez lier vos étendues avec les étendues de l’interface CLI. Le Kit de développement logiciel (SDK) appelle ce callback avant session.create, session.resume et session.send RPC :
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: "..." }
},
});
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 vers SDK (entrant)
Lorsque l’interface CLI appelle un gestionnaire d’outils, les traceparent et tracestate de l'étendue du CLI sont disponibles. Étant donné que le SDK n’a pas de dépendance OpenTelemetry, ceux-ci sont passés sous forme de chaînes brutes sur l’objet ToolInvocation . Restaurez le contexte manuellement si nécessaire :
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();
}
})
);
});
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();
}
})
);
});
Lectures complémentaires
- Conventions sémantiques OpenTelemetry GenAI dans la documentation OpenTelemetry
- Conventions sémantiques MCP OpenTelemetry dans la documentation OpenTelemetry
- Kit de développement logiciel (SDK) Python OpenTelemetry dans la documentation OpenTelemetry