Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Microsoft Agent Framework suporta a criação de agentes que utilizam o GitHub Copilot SDK como backend. Os agentes GitHub Copilot fornecem acesso a poderosas capacidades de IA orientadas para programação, incluindo execução de comandos shell, operações de ficheiros, obtenção de URLs e integração com servidores Model Context Protocol (MCP).
Importante
Os agentes GitHub Copilot requerem um runtime GitHub Copilot autenticado. Alguns SDKs usam uma CLI instalada, enquanto o Go SDK usa o runtime incluído por defeito. Para segurança, recomenda-se executar agentes com permissões de shell ou ficheiro num ambiente containerizado (Docker/Dev Container).
Introdução
Adicione os pacotes NuGet necessários ao seu projeto.
dotnet add package Microsoft.Agents.AI.GitHub.Copilot
Criar um agente do GitHub Copilot
Como primeiro passo, crie um CopilotClient e comece. Depois, use o método de extensão AsAIAgent para criar um agente.
using GitHub.Copilot;
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
Pode fornecer ferramentas funcionais e instruções personalizadas ao criar o agente:
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?"));
Funcionalidades do agente
Respostas de streaming
Obtenha respostas à medida que forem 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();
Gestão de Sessões
Mantenha o contexto da conversa em múltiplas 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 defeito, o agente não pode executar comandos de shell, ler/escrever ficheiros ou buscar URLs. Para ativar estas capacidades, forneça um manipulador de permissões através de 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"));
Servidores MCP
Ligue-se a servidores MCP locais (stdio) ou remotos (HTTP) para capacidades alargadas:
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://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"));
Sugestão
Consulte os exemplos do .NET para exemplos completos executáveis.
Tools
| Tool | Status | Notes |
|---|---|---|
| Ferramentas Funcionais | ✅ | Instâncias padrão AIFunction. |
| Aprovação de Ferramentas | ✅ | Fornecido pelo cliente de chat de invocação de funções do framework; Funciona com qualquer chamada de ferramenta funcional. |
| Intérprete de código | ❌ | Não é uma funcionalidade do Copilot CLI. |
| Pesquisa de ficheiros | ❌ | Não é uma funcionalidade do Copilot CLI. |
| Pesquisa na Web | ❌ | Não disponível como ferramenta alojada. |
| Shell / sistema de ficheiros / obtenção de URL | ✅ | Integrado no runtime da Copilot CLI e bloqueado pelo handler Permissions que forneces. |
| Ferramentas alojadas do MCP | ✅ | Servidores MCP remotos (HTTP) configurados via SessionConfig.McpServers. Ver Servidores MCP. |
| Ferramentas MCP Locais | ✅ | Servidores locais (stdio) MCP configurados via SessionConfig.McpServers. Ver Servidores MCP. |
Usando o agente
O agente é um padrão AIAgent e suporta todas as operações padrão AIAgent .
Para mais informações sobre como gerir e interagir com agentes, consulte os tutoriais de Início de Agentes.
Pré-requisitos
Instala o pacote Microsoft Agent Framework GitHub Copilot.
pip install agent-framework-github-copilot --pre
Configuração
O agente pode ser configurado opcionalmente usando as seguintes variáveis de ambiente:
| Variable | Description |
|---|---|
GITHUB_COPILOT_CLI_PATH |
Caminho para o executável da CLI Copilot |
GITHUB_COPILOT_MODEL |
Modelo a usar (por exemplo, gpt-5, claude-sonnet-4) |
GITHUB_COPILOT_TIMEOUT |
Peça tempo limite em segundos |
GITHUB_COPILOT_LOG_LEVEL |
Nível de log do CLI |
GITHUB_COPILOT_BASE_DIRECTORY |
Diretório do estado da sessão e da configuração da CLI (predefinido como ~/.copilot) |
Introdução
Importar as classes necessárias do Agent Framework:
import asyncio
from agent_framework.github import GitHubCopilotAgent, GitHubCopilotOptions
Criar um agente do GitHub Copilot
Criação básica de agentes
A forma mais simples de criar um agente 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)
Com Configuração Explícita
Pode fornecer uma configuração explícita através de 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)
Funcionalidades do agente
Fornecedores de Contexto
O Python GitHubCopilotAgent também suporta context_providers=[...]. Os fornecedores operam antes e depois de cada chamada, pelo que mensagens e instruções adicionadas pelo fornecedor são incluídas no prompt do Copilot e os fornecedores de histórico conseguem observar a resposta final.
from agent_framework import InMemoryHistoryProvider
agent = GitHubCopilotAgent(
instructions="You are a helpful coding assistant.",
context_providers=[InMemoryHistoryProvider()],
)
Pode combinar fornecedores de histórico incorporados com fornecedores de contexto personalizados. Para padrões de implementação, consulte Fornecedores de Contexto.
Ferramentas de Função
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(
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 streaming
Obtenha respostas à medida que são geradas para uma melhor experiência do utilizador:
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()
Gerenciamento de threads
Mantenha o contexto da conversa ao longo de múltiplas interações:
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
Por defeito, o agente não pode executar comandos de shell, ler/escrever ficheiros ou buscar URLs. Para ativar estas capacidades, forneça um manipulador de permissões:
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)
Para ambientes fidedignos em que todas as permissões devam ser aprovadas automaticamente, utilize a opção integrada PermissionHandler.approve_all:
from copilot.session import PermissionHandler
agent = GitHubCopilotAgent(
default_options={
"on_permission_request": PermissionHandler.approve_all,
},
)
Os processadores de permissões suportam tanto callbacks síncronos como assíncronos. Utilize asyncio.to_thread para pedidos interativos em processadores assíncronos para evitar o bloqueio do ciclo de eventos.
Servidores MCP
Ligue-se a servidores MCP locais (stdio) ou remotos (HTTP) para capacidades alargadas:
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 tem rastreamento OpenTelemetry incorporado. Chame configure_otel_providers() uma vez na inicialização para ativar spans, métricas e logs para todas as execuções.
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 precisares do agente subjacente sem a camada de telemetria (por exemplo, para a envolver numa camada personalizada), importa RawGitHubCopilotAgent de agent_framework.github.
Para exportadores OTLP e exemplos mais detalhados, consulte as amostras de observabilidade.
Tools
| Tool | Status | Notes |
|---|---|---|
| Ferramentas Funcionais | ✅ | Objetos invocáveis padrão de Python ou @ai_function. |
| Aprovação de Ferramentas | ✅ | Fornecido pelo cliente de chat de invocação de funções do framework; Funciona com qualquer chamada de ferramenta funcional. |
| Intérprete de código | ❌ | Não é uma funcionalidade do Copilot CLI. |
| Pesquisa de ficheiros | ❌ | Não é uma funcionalidade do Copilot CLI. |
| Pesquisa na Web | ❌ | Não disponível como ferramenta alojada. |
| Shell / sistema de ficheiros / obtenção de URL | ✅ | Integrado no ambiente de execução da Copilot CLI e controlado pelo processador Permissions que fornecer. |
| Ferramentas alojadas do MCP | ✅ | Servidores MCP remotos (HTTP) configurados via default_options["mcp_servers"]. Ver Servidores MCP. |
| Ferramentas MCP Locais | ✅ | Servidores locais (stdio) MCP configurados via default_options["mcp_servers"]. Ver Servidores MCP. |
Usando o agente
O agente é um BaseAgent padrão e suporta todas as operações padrão de um agente.
Para mais informações sobre como gerir e interagir com agentes, consulte os tutoriais de Início de Agentes.
Introdução
Instale o módulo Go do Microsoft Agent Framework e o GitHub Copilot SDK para Go. O Agent Framework Go SDK requer Go 1.25 ou posterior.
go get github.com/microsoft/agent-framework-go github.com/github/copilot-sdk/go
Criar um agente do GitHub Copilot
Crie e inicie um copilot.Client, depois passe para 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)
Com Ferramentas e Instruções
Pode fornecer ferramentas funcionais e instruções personalizadas ao criar o agente:
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)
Funcionalidades do agente
Respostas de streaming
Obtenha respostas à medida que forem geradas:
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()
Gestão de Sessões
Mantenha o contexto da conversa em múltiplas interações usando sessões:
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
Por defeito, o agente não pode executar comandos de shell, ler/escrever ficheiros ou buscar URLs. Para ativar estas capacidades, forneça um manipulador de permissões através de 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)
Servidores MCP
Ligue-se a servidores MCP locais (stdio) ou remotos (HTTP) para capacidades alargadas:
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)
Sugestão
Veja o exemplo do Go GitHub Copilot para um exemplo completo e executável.
Tools
| Tool | Status | Notes |
|---|---|---|
| Ferramentas Funcionais | ✅ | Instâncias padrão do Go tool.Tool, incluindo funções functool. |
| Aprovação de Ferramentas | ✅ | As ferramentas funcionais podem usar o suporte padrão de aprovação de ferramentas Go; As permissões de runtime do Copilot são tratadas por SessionConfig.OnPermissionRequest. |
| Intérprete de código | ❌ | Não é uma funcionalidade do Copilot CLI. |
| Pesquisa de ficheiros | ❌ | Não é uma funcionalidade do Copilot CLI. |
| Pesquisa na Web | ❌ | Não disponível como ferramenta alojada. |
| Shell / sistema de ficheiros / obtenção de URL | ✅ | Integrado no ambiente de execução da Copilot CLI e controlado pelo processador Permissions que fornecer. |
| Ferramentas alojadas do MCP | ✅ | Servidores MCP remotos (HTTP) configurados via copilot.SessionConfig.MCPServers. Ver Servidores MCP. |
| Ferramentas MCP Locais | ✅ | Servidores locais (stdio) MCP configurados via copilot.SessionConfig.MCPServers. Ver Servidores MCP. |
Usando o agente
O agente é um *agent.Agent padrão e suporta todas as operações padrão de um agente.
Para mais informações sobre como gerir e interagir com agentes, consulte os tutoriais de Início de Agentes.