Agentes do GitHub Copilot

O Microsoft Agent Framework dá suporte à criação de agentes que usam o SDK do GitHub Copilot como back-end. Os agentes do GitHub Copilot fornecem acesso a funcionalidades avançadas de IA voltadas para codificação, incluindo execução de comandos shell, operações de arquivo, busca de URL e integração do servidor MCP (Protocolo de Contexto de Modelo).

Importante

Os agentes do GitHub Copilot exigem que a CLI do GitHub Copilot seja instalada e autenticada. Para segurança, é recomendável executar agentes com permissões de shell ou arquivo em um ambiente em contêineres (Contêiner de Desenvolvimento/Docker).

Introdução

Adicione os pacotes NuGet necessários ao seu projeto.

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

Criar um Agente Copilot do GitHub

Como primeira etapa, crie um CopilotClient e inicie-o. Em seguida, use o AsAIAgent método de extensão para criar um agente.

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

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

AIAgent agent = copilotClient.AsAIAgent();

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

Com ferramentas e instruções

Você pode fornecer ferramentas de função e instruções personalizadas ao criar o agente:

using GitHub.Copilot.SDK;
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?"));

Funcionalidades do agente

Respostas de transmissão contínua

Obtenha respostas conforme elas são geradas:

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

AIAgent agent = copilotClient.AsAIAgent();

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

Console.WriteLine();

Gerenciamento da sessão

Mantenha o contexto de conversa em várias interações usando sessões:

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

Por padrão, o agente não pode executar comandos de shell, arquivos de leitura/gravação ou buscar URLs. Para habilitar esses recursos, forneça um manipulador de permissões por meio de SessionConfig.

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

    string? input = Console.ReadLine()?.Trim().ToUpperInvariant();
    string kind = input is "Y" or "YES" ? "approved" : "denied-interactively-by-user";

    return Task.FromResult(new PermissionRequestResult { Kind = kind });
}

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"));

Servidores MCP

Conecte-se a servidores MCP locais (stdio) ou remotos (HTTP) para recursos estendidos:

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

SessionConfig sessionConfig = new()
{
    OnPermissionRequest = PromptPermission,
    McpServers = new Dictionary<string, object>
    {
        // Local stdio server
        ["filesystem"] = new McpLocalServerConfig
        {
            Type = "stdio",
            Command = "npx",
            Args = ["-y", "@modelcontextprotocol/server-filesystem", "."],
            Tools = ["*"],
        },
        // Remote HTTP server
        ["microsoft-learn"] = new McpRemoteServerConfig
        {
            Type = "http",
            Url = "https://dotnet.territoriali.olinfo.it/api/mcp",
            Tools = ["*"],
        },
    },
};

AIAgent agent = copilotClient.AsAIAgent(sessionConfig);

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

Dica

Consulte os exemplos do .NET para obter exemplos executáveis completos.

Tools

Tool Status Observações
Ferramentas de Funções Instâncias padrão AIFunction .
Aprovação da ferramenta Fornecido pelo cliente de chat com invocação de funções do framework; funciona com qualquer chamada de ferramenta de função.
Interpretador de Código Não é um recurso do Copilot CLI.
Pesquisa de Arquivo Não é uma funcionalidade do Copilot CLI.
Pesquisa na Web Não está disponível como uma ferramenta hospedada.
Shell/sistema de arquivos/busca de URL Integrado ao runtime do Copilot CLI e controlado pelo manipulador Permissions que você fornece.
Ferramentas MCP hospedadas Servidores MCP remotos (HTTP) configurados por meio de SessionConfig.McpServers. Consulte servidores MCP.
Ferramentas MCP locais Servidores MCP locais (stdio) configurados por meio de SessionConfig.McpServers. Consulte servidores MCP.

Usando o agente

O agente é um AIAgent padrão e oferece suporte a todas as operações padrão AIAgent.

Para obter mais informações sobre como executar e interagir com agentes, consulte os tutoriais de introdução do Agente.

Pré-requisitos

Instale o pacote do GitHub Copilot do Microsoft Agent Framework.

pip install agent-framework-github-copilot --pre

Configuração

O agente pode ser configurado opcionalmente usando as seguintes variáveis de ambiente:

Variable DESCRIÇÃO
GITHUB_COPILOT_CLI_PATH Caminho para o executável da CLI do Copilot
GITHUB_COPILOT_MODEL Modelo a ser usado (por exemplo, gpt-5, claude-sonnet-4)
GITHUB_COPILOT_TIMEOUT Tempo limite da solicitação em segundos
GITHUB_COPILOT_LOG_LEVEL Nível de log da CLI

Introdução

Importe as classes necessárias do Agent Framework:

import asyncio
from agent_framework.github import GitHubCopilotAgent, GitHubCopilotOptions

Criar um Agente Copilot do GitHub

Criação básica de agente

A maneira mais simples de criar um agente do GitHub Copilot:

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

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

Com configuração explícita

Você pode fornecer uma configuração explícita por meio do elemento default_options.

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

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

Funcionalidades do agente

Provedores de contexto

O Python também oferece suporte a GitHubCopilotAgentcontext_providers=[...]. Os provedores são executados antes e depois de cada invocação, portanto, as mensagens e instruções adicionadas pelo provedor são incluídas no prompt do Copilot e os provedores de histórico podem observar a resposta final.

from agent_framework import InMemoryHistoryProvider

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

Você pode combinar provedores de histórico internos com provedores de contexto personalizados. Para padrões de implementação, consulte Provedores de Contexto.

Ferramentas de Funções

Equipe seu agente com funções personalizadas:

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(
        default_options={"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)

Respostas de transmissão contínua

Obtenha respostas conforme elas são geradas para uma melhor experiência do usuário:

async def streaming_example():
    agent = GitHubCopilotAgent(
        default_options={"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()

Gerenciamento de threads

Manter o contexto da conversa em várias interações:

async def thread_example():
    agent = GitHubCopilotAgent(
        default_options={"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

Por padrão, o agente não pode executar comandos de shell, arquivos de leitura/gravação ou buscar URLs. Para habilitar esses recursos, forneça um manipulador de permissões:

from copilot.generated.session_events import PermissionRequest

def prompt_permission(
    request: PermissionRequest, context: dict[str, str]
) -> PermissionRequestResult:
    kind = request.get("kind", "unknown")
    print(f"\n[Permission Request: {kind}]")

    response = input("Approve? (y/n): ").strip().lower()
    if response in ("y", "yes"):
        return PermissionRequestResult(kind="approved")
    return PermissionRequestResult(kind="denied-interactively-by-user")

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

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

Servidores MCP

Conecte-se a servidores MCP locais (stdio) ou remotos (HTTP) para recursos estendidos:

from copilot.types import MCPServerConfig

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://dotnet.territoriali.olinfo.it/api/mcp",
            "tools": ["*"],
        },
    }

    agent = GitHubCopilotAgent(
        default_options={
            "instructions": "You are a helpful assistant with access to the filesystem and Microsoft Learn.",
            "on_permission_request": prompt_permission,
            "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 possui rastreamento OpenTelemetry incorporado. Chame configure_otel_providers() uma vez na inicialização para habilitar intervalos, métricas e logs para cada execução:

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!")

Se você precisar do agente subjacente sem a camada de telemetria (por exemplo, para embrulhá-lo em um personalizado), importe RawGitHubCopilotAgent de agent_framework.github.

Para exportadores OTLP e exemplos mais ricos, consulte os exemplos de observabilidade.

Tools

Tool Status Observações
Ferramentas de Funções Callables Python padrão ou @ai_function.
Aprovação da ferramenta Fornecido pelo cliente de chat com invocação de funções do framework; funciona com qualquer chamada de ferramenta/função.
Interpretador de Código Não é uma funcionalidade do Copilot CLI.
Pesquisa de Arquivo Não é um recurso do Copilot CLI.
Pesquisa na Web Não disponível como uma ferramenta hospedada.
Shell/sistema de arquivos/busca de URL Integrado ao ambiente de execução da CLI do Copilot e controlado pelo manipulador Permissions que você fornece.
Ferramentas MCP hospedadas Servidores MCP remotos (HTTP) configurados por meio de default_options["mcp_servers"]. Consulte servidores MCP.
Ferramentas MCP locais Servidores MCP locais (stdio) configurados por meio de default_options["mcp_servers"]. Consulte servidores MCP.

Usando o agente

O agente é um padrão BaseAgent e dá suporte a todas as operações de agente padrão.

Para obter mais informações sobre como executar e interagir com agentes, consulte os tutoriais de introdução do Agente.

Próximas etapas