Skip to main content

Créez votre première application avec Copilot

Dans ce tutoriel, vous allez utiliser le kit de développement logiciel (SDK) Copilot pour créer un assistant de ligne de commande. Vous commencerez par les principes de base, ajouterez des réponses en continu, puis des outils personnalisés, ce qui permettra à Copilot d’appeler votre code.

Ce que vous allez construire :

You: What's the weather like in Seattle?
Copilot: Let me check the weather for Seattle...
         Currently 62°F and cloudy with a chance of rain.
         Typical Seattle weather!

You: How about Tokyo?
Copilot: In Tokyo it's 75°F and sunny. Great day to be outside!

Prerequisites

Avant de commencer, assurez-vous d’avoir :

  • GitHub Copilot CLI installé et authentifié (guide Installation)
  • Votre runtime de langage préféré :
    • Node.js 20+ ou Python 3.11+ ou Go 1.24+ ou Rust 1.94+ ou Java 17+ ou .NET 8.0+

Vérifiez que l’interface CLI fonctionne :

copilot --version

Étape 1 : installer le Kit de développement logiciel (SDK)

Langages de code navigation

TypeScript

Tout d’abord, créez un répertoire et initialisez votre projet :

mkdir copilot-demo && cd copilot-demo
npm init -y --init-type module

Installez ensuite le Kit de développement logiciel (SDK) et l’exécuteur TypeScript :

npm install @github/copilot-sdk tsx

Étape 2 : envoyer votre premier message

Créez un fichier et ajoutez le code suivant. Il s’agit du moyen le plus simple d’utiliser le Kit de développement logiciel (SDK) : environ 5 lignes de code.

Langages de code navigation

TypeScript

Créez index.ts :

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

const client = new CopilotClient();
const session = await client.createSession({ model: "gpt-4.1" });

const response = await session.sendAndWait({ prompt: "What is 2 + 2?" });
console.log(response?.data.content);

await client.stop();
process.exit(0);

Exécutez-le :

npx tsx index.ts

Vous devez voir :

4

Félicitations! Vous venez de créer votre première application optimisée par Copilot.

Étape 3 : ajouter des réponses en streaming

À l’heure actuelle, vous attendez la réponse complète avant de voir quoi que ce soit. Rendons cela interactif en diffusant la réponse au fil de sa génération.

Langages de code navigation

TypeScript

Mettez à jour index.ts :

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

const client = new CopilotClient();
const session = await client.createSession({
    model: "gpt-4.1",
    streaming: true,
});

// Listen for response chunks
session.on("assistant.message_delta", (event) => {
    process.stdout.write(event.data.deltaContent);
});
session.on("session.idle", () => {
    console.log(); // New line when done
});

await session.sendAndWait({ prompt: "Tell me a short joke" });

await client.stop();
process.exit(0);

Réexécutez le code. Vous verrez la réponse s’afficher mot par mot.

Méthodes d’abonnement aux événements

Le Kit de développement logiciel (SDK) fournit des méthodes d’abonnement aux événements de session :

MéthodeDescription
on(handler)S’abonner à tous les événements ; renvoie la fonction de désabonnement
on(eventType, handler)S’abonner à un type d’événement spécifique (Node.js/TypeScript uniquement) ; renvoie la fonction de désabonnement
subscribe()S’abonner à tous les événements (Rust) ; filtrer par event_type

Langages de code navigation

TypeScript
// Subscribe to all events
const unsubscribeAll = session.on((event) => {
    console.log("Event:", event.type);
});

// Subscribe to specific event type
const unsubscribeIdle = session.on("session.idle", (event) => {
    console.log("Session is idle");
});

// Later, to unsubscribe:
unsubscribeAll();
unsubscribeIdle();

Étape 4 : ajouter un outil personnalisé

Passons maintenant à la partie la plus puissante. Donnez à Copilot la possibilité d’appeler votre code en définissant un outil personnalisé. Nous allons créer un outil de recherche météo simple.

Langages de code navigation

TypeScript

Mettez à jour index.ts :

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

// Define a tool that Copilot can call
const getWeather = defineTool("get_weather", {
    description: "Get the current weather for a city",
    parameters: {
        type: "object",
        properties: {
            city: { type: "string", description: "The city name" },
        },
        required: ["city"],
    },
    handler: async (args: { city: string }) => {
        const { city } = args;
        // In a real app, you'd call a weather API here
        const conditions = ["sunny", "cloudy", "rainy", "partly cloudy"];
        const temp = Math.floor(Math.random() * 30) + 50;
        const condition = conditions[Math.floor(Math.random() * conditions.length)];
        return { city, temperature: `${temp}°F`, condition };
    },
});

const client = new CopilotClient();
const session = await client.createSession({
    model: "gpt-4.1",
    streaming: true,
    tools: [getWeather],
});

session.on("assistant.message_delta", (event) => {
    process.stdout.write(event.data.deltaContent);
});

session.on("session.idle", () => {
    console.log(); // New line when done
});

await session.sendAndWait({
    prompt: "What's the weather like in Seattle and Tokyo?",
});

await client.stop();
process.exit(0);

Exécutez-la et vous verrez Copilot appeler votre outil pour obtenir des données météorologiques, puis répondre avec les résultats !

Étape 5 : créer un assistant interactif

Mettons-le ensemble dans un assistant interactif utile :

Langages de code navigation

TypeScript
import { CopilotClient, defineTool } from "@github/copilot-sdk";
import * as readline from "readline";

const getWeather = defineTool("get_weather", {
    description: "Get the current weather for a city",
    parameters: {
        type: "object",
        properties: {
            city: { type: "string", description: "The city name" },
        },
        required: ["city"],
    },
    handler: async ({ city }) => {
        const conditions = ["sunny", "cloudy", "rainy", "partly cloudy"];
        const temp = Math.floor(Math.random() * 30) + 50;
        const condition = conditions[Math.floor(Math.random() * conditions.length)];
        return { city, temperature: `${temp}°F`, condition };
    },
});

const client = new CopilotClient();
const session = await client.createSession({
    model: "gpt-4.1",
    streaming: true,
    tools: [getWeather],
});

session.on("assistant.message_delta", (event) => {
    process.stdout.write(event.data.deltaContent);
});

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});

console.log("🌤️  Weather Assistant (type 'exit' to quit)");
console.log("   Try: 'What's the weather in Paris?'\n");

const prompt = () => {
    rl.question("You: ", async (input) => {
        if (input.toLowerCase() === "exit") {
            await client.stop();
            rl.close();
            return;
        }

        process.stdout.write("Assistant: ");
        await session.sendAndWait({ prompt: input });
        console.log("\n");
        prompt();
    });
};

prompt();

Exécutez avec :

npx tsx weather-assistant.ts

Exemple de session :

🌤️  Weather Assistant (type 'exit' to quit)
   Try: 'What's the weather in Paris?' or 'Compare weather in NYC and LA'

You: What's the weather in Seattle?
Assistant: Let me check the weather for Seattle...
It's currently 62°F and cloudy in Seattle.

You: How about Tokyo and London?
Assistant: I'll check both cities for you:
- Tokyo: 75°F and sunny
- London: 58°F and rainy

You: exit

Vous avez créé un assistant avec un outil personnalisé que Copilot peut appeler !

Fonctionnement des outils

Lorsque vous définissez un outil, vous indiquez Copilot :

  1. Rôle de l’outil (description)
  2. Paramètres dont il a besoin (schéma)
  3. Code à exécuter (gestionnaire)

Copilot décide quand appeler votre outil en fonction de la question de l'utilisateur. Quand cela se produit :

  1. Copilot envoie une demande d’appel d’outil avec les paramètres
  2. Le Kit de développement logiciel (SDK) exécute votre fonction de gestionnaire
  3. Le résultat est renvoyé à Copilot
  4. Copilot incorpore le résultat dans sa réponse

Quelle est l’étape suivante ?

Maintenant que vous avez les bases, voici des fonctionnalités plus puissantes à explorer :

Se connecter aux serveurs MCP

Les serveurs MCP (Model Context Protocol) fournissent des outils prédéfini. Connectez-vous au serveur MCP de GitHub pour permettre à Copilot d’accéder aux dépôts, aux tickets et aux pull requests :

const session = await client.createSession({
    mcpServers: {
        github: {
            type: "http",
            url: "https://api.githubcopilot.com/mcp/",
        },
    },
});

📖 ** Using MCP servers with the GitHub Copilot SDK** - Découvrez les serveurs locaux et distants, toutes les options de configuration et la résolution des problèmes.

Créer des agents personnalisés

Définissez des personnages d’IA spécialisés pour des tâches spécifiques :

const session = await client.createSession({
    customAgents: [{
        name: "pr-reviewer",
        displayName: "PR Reviewer",
        description: "Reviews pull requests for best practices",
        prompt: "You are an expert code reviewer. Focus on security, performance, and maintainability.",
    }],
});

Conseil

Vous pouvez également définir agent: "pr-reviewer" dans la configuration de session pour pré-sélectionner cet agent à partir du démarrage. Pour plus d’informations, consultez autoTITLE .

Personnaliser le message système

Contrôlez le comportement et la personnalité de l’IA en ajoutant des instructions :

const session = await client.createSession({
    systemMessage: {
        content: "You are a helpful assistant for our engineering team. Always be concise.",
    },
});

Pour un contrôle plus précis, utilisez mode: "customize" pour remplacer des sections individuelles de l’invite système tout en préservant le reste :

const session = await client.createSession({
    systemMessage: {
        mode: "customize",
        sections: {
            tone: { action: "replace", content: "Respond in a warm, professional tone. Be thorough in explanations." },
            code_change_rules: { action: "remove" },
            guidelines: { action: "append", content: "\n* Always cite data sources" },
        },
        content: "Focus on financial analysis and reporting.",
    },
});

ID de section disponible : identity, , tone``tool_efficiency, environment_context``code_change_rules``guidelines``safety``tool_instructions``custom_instructions``runtime_instructions. last_instructions

Chaque redéfinition prend en charge quatre actions : replace, remove, append et prepend. Les identifiants de section inconnus sont traités correctement : le contenu est ajouté aux instructions supplémentaires et un avertissement est émis ; remove dans les sections inconnues est ignoré silencieusement.

Consultez les fichiers README des SDK spécifiques à chaque langage pour voir des exemples en TypeScript, Python, Go, Rust, Java et C#.

Connexion à un serveur CLI externe

Par défaut, le Kit de développement logiciel (SDK) gère automatiquement le cycle de vie du processus cli Copilot, en démarrant et en arrêtant l’interface CLI si nécessaire. Toutefois, vous pouvez également exécuter l’interface CLI en mode serveur séparément et connecter le Kit de développement logiciel (SDK). Cela peut être utile pour :

  •           **Débogage** : laissez l’outil en ligne de commande en cours d’exécution entre les redémarrages du SDK afin de consulter les journaux
    
  • Partage de ressources : plusieurs clients du Kit de développement logiciel (SDK) peuvent se connecter au même serveur CLI
  • Développement : Exécuter l’interface CLI avec des paramètres personnalisés ou dans un autre environnement

Exécution de l’interface CLI en mode serveur

Démarrez l’interface CLI en mode serveur à l’aide de l’indicateur --headless et spécifiez éventuellement un port :

copilot --headless --port 4321

Si vous ne spécifiez pas de port, l’interface CLI choisit un port disponible aléatoire.

Par défaut, le serveur headless accepte uniquement les connexions loopback (127.0.0.1), donc le SDK doit s’exécuter sur la même machine. Pour accepter les connexions à partir d’autres hôtes (par exemple, lors de l’exécution de l’interface CLI dans un conteneur ou sur un serveur distinct), liez-vous à une adresse sans bouclage avec --host:

# Listen on all interfaces
copilot --headless --host 0.0.0.0 --port 4321

Avertissement

L’exposition du serveur sans interface utilisateur sur une adresse autre qu’une adresse de bouclage le rend accessible à toute personne pouvant acheminer du trafic vers cette adresse. Associez-le à des contrôles réseau (pare-feu, réseau privé, proxy inverse) et l’authentification appropriée pour votre environnement.

Connexion du Kit de développement logiciel (SDK) au serveur externe

Une fois que l’interface CLI s’exécute en mode serveur, configurez votre client SDK pour qu’il se connecte à celui-ci à l’aide de l’option « URL cli » :

Langages de code navigation

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

const client = new CopilotClient({
    cliUrl: "localhost:4321"
});

// Use the client normally
const session = await client.createSession({ onPermissionRequest: approveAll });
// ...

Remarque : Lorsque cli_url / cliUrl / le UriConnection de Go est fourni, ou que Rust utilise Transport::External, le SDK ne lancera ni ne gérera de processus CLI - il se contentera de se connecter au serveur existant à l’URL spécifiée.

Télémétrie et observabilité

Le SDK Copilot prend en charge OpenTelemetry pour le suivi distribué. Fournissez une telemetry configuration au client pour permettre l’exportation de trace à partir du processus CLI et de la propagation automatique du contexte de trace W3C entre le Kit de développement logiciel (SDK) et l’interface CLI.

Activation de la télémétrie

Transmettez une telemetry configuration (ou Telemetry) lors de la création du client. Il s’agit de l’option d’adhésion : aucun indicateur « activé » distinct n’est nécessaire.

Langages de code navigation

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

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

Dépendance de pair facultative : @opentelemetry/api

Options de configuration de télémétrie

OptionNode.jsPythonAllezRustJava.NETDescription
Point de terminaison OTLPotlpEndpointotlp_endpointOTLPEndpointotlp_endpointotlpEndpointOtlpEndpointURL du point de terminaison HTTP OTLP
Chemins d'accès au fichierfilePathfile_pathFilePathfile_pathfilePathFilePathChemin du fichier pour la sortie trace au format JSON-lines
Type d’exportateurexporterTypeexporter_typeExporterTypeexporter_typeexporterTypeExporterType
"otlp-http" ou "file"
Nom de la sourcesourceNamesource_nameSourceNamesource_namesourceNameSourceNameNom de la portée d’instrumentation
Capturer du contenucaptureContentcapture_contentCaptureContentcapture_contentcaptureContentCaptureContentIndique s’il faut capturer le contenu du message

Exportation de fichiers

Pour écrire des traces dans un fichier local au lieu d’un point de terminaison OTLP :

const client = new CopilotClient({
  telemetry: {
    filePath: "./traces.jsonl",
    exporterType: "file",
  },
});

Propagation du contexte de trace

Le contexte de trace est propagé automatiquement : aucune instrumentation manuelle n’est nécessaire :

  •           **SDK → CLI** : les en-têtes `traceparent` et `tracestate` du span/de l’activité en cours sont inclus dans les appels RPC `session.create`, `session.resume` et `session.send`.
    
  • CLI → SDK : lorsque l’interface CLI appelle des gestionnaires d’outils, le contexte de trace de l’étendue de l’interface CLI est propagé afin que le code de votre outil s’exécute sous l’étendue parente correcte.

📖 ** Instrumentation OpenTelemetry pour le Kit de développement logiciel (SDK) Copilot** : options TelemetryConfig, propagation du contexte de trace et dépendances par langage.

Learn more

Tu as réussi! Vous avez appris les concepts fondamentaux du Kit de développement logiciel (SDK) GitHub Copilot :

  • ✅ Création d’un client et d’une session
  • ✅ Envoi de messages et réception de réponses
  • ✅ Diffusion en continu pour la sortie en temps réel
  • ✅ Définir des outils personnalisés que Copilot peut appeler

Maintenant, allez construire quelque chose d’incroyable ! 🚀