GitHub Copilot, outil d'assistance au codage

Microsoft Agent Framework prend en charge la création d’agents qui utilisent le Kit de développement logiciel (SDK) Copilot GitHub en tant que serveur principal. Les agents GitHub Copilot offrent un accès aux puissantes fonctionnalités d’IA orientées codage, notamment l’exécution de commandes de l’interpréteur de commandes, les opérations de fichier, la récupération d’URL et l’intégration du serveur MCP (Model Context Protocol).

Important

GitHub Copilot agents nécessitent un runtime de GitHub Copilot authentifié. Certains kits SDK utilisent une interface CLI installée, tandis que le Kit de développement logiciel (SDK) Go utilise le runtime groupé par défaut. Pour la sécurité, il est recommandé d’exécuter des agents avec des autorisations d’interpréteur de commandes ou de fichiers dans un environnement conteneurisé (Docker/Dev Container).

Getting Started

Ajoutez les packages NuGet requis à votre projet.

dotnet add package Microsoft.Agents.AI.GitHub.Copilot

Créer un agent GitHub Copilot

En première étape, créez-en un CopilotClient et démarrez-le. Utilisez ensuite la méthode d’extension AsAIAgent pour créer un agent.

using GitHub.Copilot;
using Microsoft.Agents.AI;

await using CopilotClient copilotClient = new();
await copilotClient.StartAsync();

AIAgent agent = copilotClient.AsAIAgent(sessionConfig: null);

Console.WriteLine(await agent.RunAsync("What is Microsoft Agent Framework?"));

Avec des outils et des instructions

Vous pouvez fournir des outils de fonction et des instructions personnalisées lors de la création de l’agent :

using GitHub.Copilot;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;

AIFunction weatherTool = AIFunctionFactory.Create((string location) =>
{
    return $"The weather in {location} is sunny with a high of 25C.";
}, "GetWeather", "Get the weather for a given location.");

await using CopilotClient copilotClient = new();
await copilotClient.StartAsync();

AIAgent agent = copilotClient.AsAIAgent(
    tools: [weatherTool],
    instructions: "You are a helpful weather agent.");

Console.WriteLine(await agent.RunAsync("What's the weather like in Seattle?"));

Fonctionnalités de l’agent

Réponses en continu

Obtenez les réponses à mesure qu’elles sont générées :

await using CopilotClient copilotClient = new();
await copilotClient.StartAsync();

AIAgent agent = copilotClient.AsAIAgent(sessionConfig: null);

await foreach (AgentResponseUpdate update in agent.RunStreamingAsync("Tell me a short story."))
{
    Console.Write(update);
}

Console.WriteLine();

Gestion des sessions

Gérez le contexte de conversation entre plusieurs interactions à l’aide de sessions :

await using CopilotClient copilotClient = new();
await copilotClient.StartAsync();

await using GitHubCopilotAgent agent = new(
    copilotClient,
    instructions: "You are a helpful assistant. Keep your answers short.");

AgentSession session = await agent.CreateSessionAsync();

// First turn
await agent.RunAsync("My name is Alice.", session);

// Second turn - agent remembers the context
AgentResponse response = await agent.RunAsync("What is my name?", session);
Console.WriteLine(response); // Should mention "Alice"

Permissions

Par défaut, l’agent ne peut pas exécuter de commandes shell, lire/écrire des fichiers ou extraire des URL. Pour activer ces fonctionnalités, fournissez un gestionnaire d’autorisations via SessionConfig:

static Task<PermissionDecision> PromptPermission(
    PermissionRequest request, PermissionInvocation invocation)
{
    Console.WriteLine($"\n[Permission Request: {request.Kind}]");
    Console.Write("Approve? (y/n): ");

    string? input = Console.ReadLine()?.Trim().ToUpperInvariant();
    PermissionDecision decision = input is "Y" or "YES"
        ? PermissionDecision.ApproveOnce()
        : PermissionDecision.Reject();

    return Task.FromResult(decision);
}

await using CopilotClient copilotClient = new();
await copilotClient.StartAsync();

SessionConfig sessionConfig = new()
{
    OnPermissionRequest = PromptPermission,
};

AIAgent agent = copilotClient.AsAIAgent(sessionConfig);

Console.WriteLine(await agent.RunAsync("List all files in the current directory"));

Approbation de l’outil

Étant donné que le kit de développement logiciel (SDK) GitHub Copilot possède la boucle d'appel d'outils, l'approbation des outils de fonction personnalisés est appliquée via le hook natif de pré-exécution du KIT DE DÉVELOPPEMENT logiciel (SDK) plutôt que le retour aller-retour de l'approbation de l'infrastructure agent standard. Lorsque vous inscrivez un outil encapsulé ApprovalRequiredAIFunction, l’agent installe un hook par défaut OnPreToolUse qui retourne "ask" pour cet outil et achemine la décision vers votre OnPermissionRequest gestionnaire :

using GitHub.Copilot;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;

AIFunction deleteFile = AIFunctionFactory.Create(
    (string path) => $"Deleted {path}.",
    "DeleteFile",
    "Deletes a file.");

await using CopilotClient copilotClient = new();
await copilotClient.StartAsync();

SessionConfig sessionConfig = new()
{
    // Wrapping the tool marks it approval-required; the agent turns this into an "ask" at OnPreToolUse.
    Tools = [new ApprovalRequiredAIFunction(deleteFile)],

    // OnPermissionRequest decides the "asked" tools (and Copilot's built-in shell/file/URL prompts).
    OnPermissionRequest = PromptPermission,
};

AIAgent agent = copilotClient.AsAIAgent(sessionConfig);

Console.WriteLine(await agent.RunAsync("Delete the file temp.txt"));

Warning

Si vous fournissez votre propre OnPreToolUse hook via SessionConfig.Hooks, il est prioritaire et l’agent n’installe pas son hook d’approbation par défaut. Vous êtes ensuite entièrement responsable de l’application de l’approbation pour tout ApprovalRequiredAIFunction enregistrement (par exemple, en retournant une ou "ask" une "deny" décision). L’agent enregistre un avertissement nommant tout outil requis par approbation que votre hook doit gérer.

Serveurs MCP

Connectez-vous à des serveurs MCP locaux (stdio) ou distants (HTTP) pour des fonctionnalités étendues :

await using CopilotClient copilotClient = new();
await copilotClient.StartAsync();

SessionConfig sessionConfig = new()
{
    OnPermissionRequest = PromptPermission,
    McpServers = new Dictionary<string, McpServerConfig>
    {
        // Local stdio server
        ["filesystem"] = new McpStdioServerConfig
        {
            Command = "npx",
            Args = ["-y", "@modelcontextprotocol/server-filesystem", "."],
            Tools = ["*"],
        },
        // Remote HTTP server
        ["microsoft-learn"] = new McpHttpServerConfig
        {
            Url = "https://learn.microsoft.com/api/mcp",
            Tools = ["*"],
        },
    },
};

AIAgent agent = copilotClient.AsAIAgent(sessionConfig);

Console.WriteLine(await agent.RunAsync("Search Microsoft Learn for 'Azure Functions' and summarize the top result"));

Tip

Consultez les exemples .NET pour obtenir des exemples exécutables complets.

Tools

Tool Status Notes
Outils de fonction Instances standard AIFunction.
Approbation de l’outil Fourni par le client de chat du framework permettant d’invoquer des fonctions ; fonctionne avec tout appel à un outil-fonction.
Interpréteur de code Ce n’est pas une fonctionnalité de Copilot CLI.
Recherche de fichiers Ce n’est pas une fonctionnalité de Copilot CLI.
Recherche web N’est pas disponible comme outil hébergé.
Shell / système de fichiers / extraction d’URL Intégré au runtime CLI Copilot et contrôlé par le gestionnaire Permissions que vous fournissez.
Outils MCP hébergés Serveurs MCP distants (HTTP) configurés via SessionConfig.McpServers. Consultez serveurs MCP.
Outils MCP locaux Serveurs MCP locaux (stdio) configurés via SessionConfig.McpServers. Consultez serveurs MCP.

Utilisation de l’agent

L’agent standard AIAgent prend en charge toutes les opérations standard AIAgent.

Pour plus d’informations sur l’exécution et l’interaction avec les agents, consultez les didacticiels de prise en main de l’agent.

Prerequisites

Installez le package Microsoft Agent Framework GitHub Copilot.

pip install agent-framework-github-copilot

Configuration

L’agent peut éventuellement être configuré à l’aide des variables d’environnement suivantes :

Variable Description
GITHUB_COPILOT_CLI_PATH Chemin d’accès à l’exécutable de la CLI Copilot
GITHUB_COPILOT_MODEL Modèle à utiliser (par exemple, gpt-5, claude-sonnet-4)
GITHUB_COPILOT_TIMEOUT Délai d’expiration de la demande en secondes
GITHUB_COPILOT_LOG_LEVEL Niveau de journalisation CLI
GITHUB_COPILOT_BASE_DIRECTORY Répertoire pour l’état de session et la configuration de la CLI (par défaut : ~/.copilot)

Getting Started

Importez les classes requises à partir d’Agent Framework :

import asyncio
from agent_framework.github import GitHubCopilotAgent, GitHubCopilotOptions

Créer un agent GitHub Copilot

Création d'un agent basique

La façon la plus simple de créer un agent GitHub Copilot :

async def basic_example():
    agent = GitHubCopilotAgent(
        instructions="You are a helpful assistant.",
    )

    async with agent:
        result = await agent.run("What is Microsoft Agent Framework?")
        print(result)

Avec une configuration explicite

Vous pouvez fournir une configuration explicite via default_options:

async def explicit_config_example():
    agent = GitHubCopilotAgent(
        instructions="You are a helpful assistant.",
        default_options={
            "model": "gpt-5",
            "timeout": 120,
        },
    )

    async with agent:
        result = await agent.run("What can you do?")
        print(result)

Tip

default_options(et par exécutionoptions) transfère tout paramètre accepté par les Copilot SDK create_session ( par exemplereasoning_effort, context_tier, enable_citationsprovider ( bring-your-own-key) ou skill_directories — pas seulement les clés affichées ici. Les noms de paramètres inconnus déclenchent un TypeError, donc les fautes de frappe sont interceptées plutôt que silencieusement ignorées.

Apportez votre propre clé (BYOK)

Utilisez la prise en charge BYOK du KIT de développement logiciel (SDK) de Copilot pour acheminer les demandes de modèle via votre propre openAI, Azure OpenAI, Anthropic ou point de terminaison compatible OpenAI au lieu du back-end GitHub Copilot. Passez un ProviderConfig pas à pas GitHubCopilotOptions(provider=...)et définissez le même identificateur de modèle dans la configuration du fournisseur et l’option au niveau model de la session.

L’exemple exécutable utilise ces variables d’environnement :

Variable Description
BYOK_PROVIDER_TYPE Type de fournisseur : openai, azureou anthropic. La valeur par défaut est openai.
BYOK_BASE_URL URL de base du point de terminaison du fournisseur.
BYOK_API_KEY Clé API statique pour le point de terminaison du fournisseur.
BYOK_MODEL_ID Identificateur de modèle à demander. La valeur par défaut est gpt-4o.

Warning

BYOK utilise des informations d’identification statiques et ne fournit pas d’actualisation automatique des jetons. Conservez les clés API hors contrôle de code source et chargez-les à partir de variables d’environnement ou d’un magasin de secrets. L’utilisation et la facturation sont suivies par votre fournisseur plutôt que par GitHub.

import asyncio
import os
from typing import Literal, cast

from agent_framework.github import GitHubCopilotAgent, GitHubCopilotOptions
from copilot.session import ProviderConfig


async def main() -> None:
    print("=== GitHub Copilot Agent with BYOK (Bring Your Own Key) ===\n")

    model_id = os.environ.get("BYOK_MODEL_ID", "gpt-4o")
    provider_type = cast(Literal["openai", "azure", "anthropic"], os.environ.get("BYOK_PROVIDER_TYPE", "openai"))

    # ProviderConfig routes the session through a custom endpoint instead of the GitHub
    # Copilot backend. `wire_api="completions"` is the broadly compatible choice; use
    # "responses" for providers that support the OpenAI Responses API.
    provider: ProviderConfig = {
        "type": provider_type,
        "base_url": os.environ["BYOK_BASE_URL"],
        "api_key": os.environ["BYOK_API_KEY"],
        "wire_api": "completions",
        "model_id": model_id,
    }

    # BYOK requires the model to also be set at the session level.
    agent: GitHubCopilotAgent[GitHubCopilotOptions] = GitHubCopilotAgent(
        instructions="You are a helpful assistant.",
        default_options=GitHubCopilotOptions(model=model_id, provider=provider),
    )

    async with agent:
        query = "What are the benefits of using your own API keys with an agent framework?"
        print(f"User: {query}")
        result = await agent.run(query)
        print(f"\nAgent: {result}\n")

Fonctionnalités de l’agent

Fournisseurs de contexte

Python GitHubCopilotAgent prend également en charge context_providers=[...]. Les fournisseurs agissent avant et après chaque appel, de sorte que les messages et instructions ajoutés par le fournisseur sont intégrés dans l'invite Copilot. Les fournisseurs de l'historique peuvent ainsi observer la réponse finale.

from agent_framework import InMemoryHistoryProvider

agent = GitHubCopilotAgent(
    instructions="You are a helpful coding assistant.",
    context_providers=[InMemoryHistoryProvider()],
)

Vous pouvez combiner des fournisseurs d’historique intégrés avec des fournisseurs de contexte personnalisés. Pour connaître les modèles d’implémentation, consultez Fournisseurs de contexte.

Outils de fonction

Équipez votre agent avec des fonctions personnalisées :

from typing import Annotated
from pydantic import Field

def get_weather(
    location: Annotated[str, Field(description="The location to get the weather for.")],
) -> str:
    """Get the weather for a given location."""
    return f"The weather in {location} is sunny with a high of 25C."

async def tools_example():
    agent = GitHubCopilotAgent(
        instructions="You are a helpful weather agent.",
        tools=[get_weather],
    )

    async with agent:
        result = await agent.run("What's the weather like in Seattle?")
        print(result)

Réponses en continu

Obtenez des réponses à mesure qu’elles sont générées pour une meilleure expérience utilisateur :

async def streaming_example():
    agent = GitHubCopilotAgent(
        instructions="You are a helpful assistant.",
    )

    async with agent:
        print("Agent: ", end="", flush=True)
        async for chunk in agent.run("Tell me a short story.", stream=True):
            if chunk.text:
                print(chunk.text, end="", flush=True)
        print()

Gestion des threads

Maintenez le contexte de conversation entre plusieurs interactions :

async def thread_example():
    agent = GitHubCopilotAgent(
        instructions="You are a helpful assistant.",
    )

    async with agent:
        session = agent.create_session()

        # First interaction
        result1 = await agent.run("My name is Alice.", session=session)
        print(f"Agent: {result1}")

        # Second interaction - agent remembers the context
        result2 = await agent.run("What's my name?", session=session)
        print(f"Agent: {result2}")  # Should remember "Alice"

Permissions

Par défaut, l’agent ne peut pas exécuter de commandes shell, lire/écrire des fichiers ou extraire des URL. Pour activer ces fonctionnalités, fournissez un gestionnaire d’autorisations :

import asyncio

from copilot.generated.rpc import PermissionDecisionDeniedInteractivelyByUser
from copilot.session import PermissionHandler, PermissionRequestResult
from copilot.session_events import PermissionRequest


async def prompt_permission(
    request: PermissionRequest, context: dict[str, str]
) -> PermissionRequestResult:
    print(f"\n[Permission Request: {request.kind}]")
    response = (await asyncio.to_thread(input, "Approve? (y/n): ")).strip().lower()
    if response in ("y", "yes"):
        return PermissionHandler.approve_all(request, context)
    return PermissionDecisionDeniedInteractivelyByUser()

async def permissions_example():
    agent = GitHubCopilotAgent(
        instructions="You are a helpful assistant that can execute shell commands.",
        default_options={
            "on_permission_request": prompt_permission,
        },
    )

    async with agent:
        result = await agent.run("List the Python files in the current directory")
        print(result)

Pour les environnements approuvés où toutes les autorisations doivent être approuvées automatiquement, utilisez le composant intégré PermissionHandler.approve_all:

from copilot.session import PermissionHandler

agent = GitHubCopilotAgent(
    default_options={
        "on_permission_request": PermissionHandler.approve_all,
    },
)

Les gestionnaires d’autorisations prennent en charge les rappels synchrones et asynchrones. Utilisez asyncio.to_thread les invites interactives dans les gestionnaires asynchrones pour éviter de bloquer la boucle d’événements.

Approbation de l’outil

Étant donné que le kit de développement logiciel (SDK) GitHub Copilot possède la boucle d'appel d'outils, l'approbation des outils de fonction personnalisés est appliquée via le hook natif de pré-exécution du KIT DE DÉVELOPPEMENT logiciel (SDK) plutôt que le retour aller-retour de l'approbation de l'infrastructure agent standard. Lorsque vous inscrivez un outil déclaré et approval_mode="always_require" que vous ne fournissez pas votre propre on_pre_tool_use hook, l’agent installe un hook par défaut qui retourne "ask" pour cet outil et achemine la décision vers votre on_permission_request gestionnaire :

from agent_framework import tool
from agent_framework.github import GitHubCopilotAgent, GitHubCopilotOptions
from copilot.session import PermissionHandler


@tool(approval_mode="always_require")
def delete_file(path: str) -> str:
    """Delete a file."""
    return f"Deleted {path}."


agent = GitHubCopilotAgent(
    tools=[delete_file],
    # The "ask" decision is routed here; approve or deny the call.
    default_options=GitHubCopilotOptions(on_permission_request=PermissionHandler.approve_all),
)

Warning

Si vous fournissez votre propre on_pre_tool_use hook, il est prioritaire et l’agent n’installe pas son hook d’approbation par défaut. Vous êtes ensuite entièrement responsable de l’application de l’approbation pour n’importe quel approval_mode="always_require" outil (par exemple, en retournant une ou "ask" une "deny" décision). L’agent enregistre un avertissement nommant tout outil requis par approbation que votre hook doit gérer. Avec le gestionnaire d’autorisations deny-all par défaut, un always_require outil est refusé, sauf si vous effectuez une connexion d’approbation on_permission_request.

Serveurs MCP

Connectez-vous à des serveurs MCP locaux (stdio) ou distants (HTTP) pour des fonctionnalités étendues :

from copilot.session import MCPServerConfig, PermissionHandler

async def mcp_example():
    mcp_servers: dict[str, MCPServerConfig] = {
        # Local stdio server
        "filesystem": {
            "type": "stdio",
            "command": "npx",
            "args": ["-y", "@modelcontextprotocol/server-filesystem", "."],
            "tools": ["*"],
        },
        # Remote HTTP server
        "microsoft-learn": {
            "type": "http",
            "url": "https://learn.microsoft.com/api/mcp",
            "tools": ["*"],
        },
    }

    agent = GitHubCopilotAgent(
        instructions="You are a helpful assistant with access to the filesystem and Microsoft Learn.",
        default_options={
            "on_permission_request": PermissionHandler.approve_all,
            "mcp_servers": mcp_servers,
        },
    )

    async with agent:
        result = await agent.run("Search Microsoft Learn for 'Azure Functions' and summarize the top result")
        print(result)

Observability

GitHubCopilotAgent dispose du suivi OpenTelemetry intégré. Appelez configure_otel_providers() une fois au démarrage pour activer des étendues, des métriques et des journaux pour chaque exécution :

from agent_framework.observability import configure_otel_providers
from agent_framework.github import GitHubCopilotAgent

configure_otel_providers(enable_console_exporters=True)

async with GitHubCopilotAgent() as agent:
    response = await agent.run("Hello!")

Si vous avez besoin de l’agent sous-jacent sans la couche de télémétrie (par exemple pour l’encapsuler dans un agent personnalisé), importez RawGitHubCopilotAgent à partir de agent_framework.github.

Pour les exportateurs OTLP et des exemples plus riches, consultez les exemples d’observabilité.

Tools

Tool Status Notes
Outils de fonction Appels standard Python ou @ai_function.
Approbation de l’outil Fourni par le client de chat du framework permettant d’invoquer des fonctions ; fonctionne avec tout appel à un outil-fonction.
Interpréteur de code Ce n’est pas une fonctionnalité de Copilot CLI.
Recherche de fichiers Ce n’est pas une fonctionnalité de Copilot CLI.
Recherche web N’est pas disponible comme outil hébergé.
Shell / système de fichiers / extraction d’URL Intégré au runtime CLI Copilot et contrôlé par le gestionnaire Permissions que vous fournissez.
Outils MCP hébergés Serveurs MCP distants (HTTP) configurés via default_options["mcp_servers"]. Consultez serveurs MCP.
Outils MCP locaux Serveurs MCP locaux (stdio) configurés via default_options["mcp_servers"]. Consultez serveurs MCP.

Utilisation de l’agent

L’agent est standard BaseAgent et prend en charge toutes les opérations d’agent standard.

Pour plus d’informations sur l’exécution et l’interaction avec les agents, consultez les didacticiels de prise en main de l’agent.

Getting Started

Installez le module Microsoft Agent Framework Go et le Kit de développement logiciel (SDK) GitHub Copilot pour Go. Le Kit de développement logiciel (SDK) Agent Framework Go nécessite Go 1.25 ou version ultérieure.

go get github.com/microsoft/agent-framework-go github.com/github/copilot-sdk/go

Créer un agent GitHub Copilot

Créez et démarrez un copilot.Client, puis passez-le à copilotprovider.NewAgent.

import (
    "context"
    "fmt"

    copilot "github.com/github/copilot-sdk/go"
    "github.com/microsoft/agent-framework-go/provider/copilotprovider"
)

ctx := context.Background()

copilotClient := copilot.NewClient(nil)
if err := copilotClient.Start(ctx); err != nil {
    panic(err)
}
defer func() { _ = copilotClient.Stop() }()

copilotAgent := copilotprovider.NewAgent(
    copilotClient,
    copilotprovider.AgentConfig{
        Instructions: "You are a helpful assistant.",
    },
)

response, err := copilotAgent.RunText(ctx, "What is Microsoft Agent Framework?").Collect()
if err != nil {
    panic(err)
}
fmt.Println(response)

Avec des outils et des instructions

Vous pouvez fournir des outils de fonction et des instructions personnalisées lors de la création de l’agent :

import (
    "context"
    "fmt"

    copilot "github.com/github/copilot-sdk/go"
    "github.com/microsoft/agent-framework-go/agent"
    "github.com/microsoft/agent-framework-go/provider/copilotprovider"
    "github.com/microsoft/agent-framework-go/tool"
    "github.com/microsoft/agent-framework-go/tool/functool"
)

weatherTool := functool.MustNew(
    functool.Config{
        Name:        "GetWeather",
        Description: "Get the weather for a given location.",
    },
    func(_ context.Context, location string) (string, error) {
        return fmt.Sprintf("The weather in %s is sunny with a high of 25C.", location), nil
    },
)

copilotAgent := copilotprovider.NewAgent(
    copilotClient,
    copilotprovider.AgentConfig{
        Instructions: "You are a helpful weather agent.",
        Config: agent.Config{
            Tools: []tool.Tool{weatherTool},
        },
    },
)

response, err := copilotAgent.RunText(ctx, "What's the weather like in Seattle?").Collect()
if err != nil {
    panic(err)
}
fmt.Println(response)

Fonctionnalités de l’agent

Réponses en continu

Obtenez les réponses à mesure qu’elles sont générées :

for update, err := range copilotAgent.RunText(ctx, "Tell me a short story.", agent.Stream(true)) {
    if err != nil {
        panic(err)
    }
    fmt.Print(update)
}

fmt.Println()

Gestion des sessions

Gérez le contexte de conversation entre plusieurs interactions à l’aide de sessions :

session, err := copilotAgent.CreateSession(ctx)
if err != nil {
    panic(err)
}

// First turn
response, err := copilotAgent.RunText(ctx, "My name is Alice.", agent.WithSession(session)).Collect()
if err != nil {
    panic(err)
}
fmt.Println(response)

// Second turn - the agent remembers the context
response, err = copilotAgent.RunText(ctx, "What is my name?", agent.WithSession(session)).Collect()
if err != nil {
    panic(err)
}
fmt.Println(response)

Permissions

Par défaut, l’agent ne peut pas exécuter de commandes shell, lire/écrire des fichiers ou extraire des URL. Pour activer ces fonctionnalités, fournissez un gestionnaire d’autorisations via copilot.SessionConfig:

import (
    "bufio"
    "fmt"
    "os"
    "strings"

    copilot "github.com/github/copilot-sdk/go"
    "github.com/github/copilot-sdk/go/rpc"
    "github.com/microsoft/agent-framework-go/provider/copilotprovider"
)

func promptPermission(request copilot.PermissionRequest, _ copilot.PermissionInvocation) (rpc.PermissionDecision, error) {
    fmt.Printf("\n[Permission Request: %s]\n", request.Kind())
    fmt.Print("Approve? (y/n): ")

    input, _ := bufio.NewReader(os.Stdin).ReadString('\n')
    input = strings.TrimSpace(strings.ToUpper(input))
    if input == "Y" || input == "YES" {
        return &rpc.PermissionDecisionApproveOnce{}, nil
    }
    return &rpc.PermissionDecisionReject{}, nil
}

copilotAgent := copilotprovider.NewAgent(
    copilotClient,
    copilotprovider.AgentConfig{
        SessionConfig: &copilot.SessionConfig{
            OnPermissionRequest: promptPermission,
        },
    },
)

response, err := copilotAgent.RunText(ctx, "List all files in the current directory").Collect()
if err != nil {
    panic(err)
}
fmt.Println(response)

Serveurs MCP

Connectez-vous à des serveurs MCP locaux (stdio) ou distants (HTTP) pour des fonctionnalités étendues :

import (
    copilot "github.com/github/copilot-sdk/go"
    "github.com/microsoft/agent-framework-go/provider/copilotprovider"
)

mcpServers := map[string]copilot.MCPServerConfig{
    // Local stdio server
    "filesystem": copilot.MCPStdioServerConfig{
        Command: "npx",
        Args:    []string{"-y", "@modelcontextprotocol/server-filesystem", "."},
        Tools:   []string{"*"},
    },
    // Remote HTTP server
    "microsoft-learn": copilot.MCPHTTPServerConfig{
        URL:   "https://learn.microsoft.com/api/mcp",
        Tools: []string{"*"},
    },
}

copilotAgent := copilotprovider.NewAgent(
    copilotClient,
    copilotprovider.AgentConfig{
        Instructions: "You are a helpful assistant with access to the filesystem and Microsoft Learn.",
        SessionConfig: &copilot.SessionConfig{
            OnPermissionRequest: promptPermission,
            MCPServers:          mcpServers,
        },
    },
)

response, err := copilotAgent.RunText(ctx, "Search Microsoft Learn for 'Azure Functions' and summarize the top result").Collect()
if err != nil {
    panic(err)
}
fmt.Println(response)

Tip

Consultez l’exemple Go GitHub Copilot pour obtenir un exemple exécutable complet.

Tools

Tool Status Notes
Outils de fonction Instances Go standard tool.Tool, y compris les fonctions functool.
Approbation de l’outil Les outils de fonction peuvent utiliser le mécanisme standard d’approbation des outils Go ; les autorisations d’exécution de Copilot sont gérées par SessionConfig.OnPermissionRequest.
Interpréteur de code Ce n’est pas une fonctionnalité de Copilot CLI.
Recherche de fichiers Ce n’est pas une fonctionnalité de Copilot CLI.
Recherche web N’est pas disponible comme outil hébergé.
Shell / système de fichiers / extraction d’URL Intégré au runtime CLI Copilot et contrôlé par le gestionnaire Permissions que vous fournissez.
Outils MCP hébergés Serveurs MCP distants (HTTP) configurés via copilot.SessionConfig.MCPServers. Consultez serveurs MCP.
Outils MCP locaux Serveurs MCP locaux (stdio) configurés via copilot.SessionConfig.MCPServers. Consultez serveurs MCP.

Utilisation de l’agent

L’agent est standard *agent.Agent et prend en charge toutes les opérations d’agent standard.

Pour plus d’informations sur l’exécution et l’interaction avec les agents, consultez les didacticiels de prise en main de l’agent.

Étapes suivantes