GitHub Copilot-agenter

Microsoft Agent Framework har stöd för att skapa agenter som använder GitHub Copilot SDK som serverdel. GitHub Copilot-agenter ger åtkomst till kraftfulla kodningsorienterade AI-funktioner, inklusive körning av gränssnittskommandon, filåtgärder, URL-hämtning och MCP-serverintegrering (Model Context Protocol).

Viktigt!

GitHub Copilot-agenter kräver en autentiserad GitHub Copilot-körningsmiljö. Vissa SDK:er använder ett installerat CLI, medan Go SDK använder den paketerade körningen som standard. För säkerhet rekommenderar vi att du kör agenter med gränssnitts- eller filbehörigheter i en containerbaserad miljö (Docker/Dev Container).

Komma igång

Lägg till nödvändiga NuGet-paket i projektet.

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

Skapa en GitHub Copilot-agent

Som ett första steg skapar du en CopilotClient och startar den. Använd AsAIAgent sedan tilläggsmetoden för att skapa en agent.

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

Med verktyg och instruktioner

Du kan ange funktionsverktyg och anpassade instruktioner när du skapar agenten:

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

Agentfunktioner

Direktuppspelningssvar

Hämta svar när de genereras:

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

Sessionshantering

Underhålla konversationskontext över flera interaktioner med hjälp av sessioner:

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

Som standard kan agenten inte köra gränssnittskommandon, läsa/skriva filer eller hämta URL:er. Om du vill aktivera dessa funktioner anger du en behörighetshanterare 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"));

MCP-servrar

Anslut till lokala (stdio) eller fjärranslutna (HTTP) MCP-servrar för utökade funktioner:

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

Tips/Råd

Se .NET-exemplen för fullständiga körbara exempel.

Tools

Verktyg Tillstånd Notes
Funktionsverktyg Standard-AIFunctioninstanser.
Godkännande av verktyg Tillhandahålls av ramverkets funktionsanropande chattklient; fungerar med valfritt funktionsverktygsanrop.
Kodtolkare Inte en Copilot CLI-funktion.
Filsökning Inte en Copilot CLI-funktion.
Webbsökning Visas inte som ett värdbaserat verktyg.
Shell/filsystem/URL-hämtning Inbyggd i Copilot CLI:s körtid och styrd av hanteraren Permissions som du tillhandahåller.
Värdhanterade MCP-verktyg Fjärranslutna MCP-servrar (HTTP) konfigurerade via SessionConfig.McpServers. Se MCP-servrar.
Lokala MCP-verktyg Lokala (stdio) MCP-servrar som konfigurerats via SessionConfig.McpServers. Se MCP-servrar.

Använda agenten

Agenten är en standard AIAgent och stöder alla standard åtgärder AIAgent.

Mer information om hur du kör och interagerar med agenter finns i självstudierna om att komma igång med agenten.

Förutsättningar

Installera GitHub Copilot-paketet för Microsoft Agent Framework.

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

Konfiguration

Agenten kan konfigureras med hjälp av följande miljövariabler:

Variable Description
GITHUB_COPILOT_CLI_PATH Sökväg till körbar Copilot CLI
GITHUB_COPILOT_MODEL Modell som ska användas (t.ex. gpt-5, claude-sonnet-4)
GITHUB_COPILOT_TIMEOUT Tidsgräns för begäran i sekunder
GITHUB_COPILOT_LOG_LEVEL CLI-loggnivå
GITHUB_COPILOT_BASE_DIRECTORY Katalog för CLI-sessionstillstånd och konfiguration (standardvärdet ~/.copilotär )

Komma igång

Importera de klasser som krävs från Agent Framework:

import asyncio
from agent_framework.github import GitHubCopilotAgent, GitHubCopilotOptions

Skapa en GitHub Copilot-agent

Skapande av grundläggande agent

Det enklaste sättet att skapa en GitHub Copilot-agent:

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)

Med uttalad konfiguration

Du kan ange en explicit konfiguration 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)

Agentfunktioner

Kontextprovidrar

Python GitHubCopilotAgent stöder context_providers=[...]också . Leverantörer kör före och efter varje anrop, så provider-tillagda meddelanden och instruktioner ingår i Copilot-prompten och historikprovidrar kan observera det slutliga svaret.

from agent_framework import InMemoryHistoryProvider

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

Du kan kombinera inbyggda historikprovidrar med anpassade kontextprovidrar. Information om implementeringsmönster finns i Kontextprovidrar.

Funktionsverktyg

Utrusta din agent med anpassade funktioner:

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)

Direktuppspelningssvar

Få svar när de genereras för bättre användarupplevelse:

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()

Trådhantering

Underhålla konversationskontext över flera interaktioner:

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

Som standard kan agenten inte köra gränssnittskommandon, läsa/skriva filer eller hämta URL:er. Om du vill aktivera de här funktionerna anger du en behörighetshanterare:

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)

För betrodda miljöer där alla behörigheter ska godkännas automatiskt använder du den inbyggda PermissionHandler.approve_all:

from copilot.session import PermissionHandler

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

Behörighetshanterare stöder både synkronisering och asynkrona återanrop. Använd asyncio.to_thread för interaktiva frågor i asynkrona hanterare för att undvika att blockera händelseloopen.

MCP-servrar

Anslut till lokala (stdio) eller fjärranslutna (HTTP) MCP-servrar för utökade funktioner:

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 har inbyggd OpenTelemetry-spårning. Anropa configure_otel_providers() en gång vid start för att aktivera intervall, mått och loggar för varje körning:

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

Om du behöver den underliggande agenten utan telemetrilagret (till exempel omsluta den i en anpassad) importerar du RawGitHubCopilotAgent från agent_framework.github.

Information om OTLP-exportörer och mer omfattande exempel finns i observerbarhetsexemplen.

Tools

Verktyg Tillstånd Notes
Funktionsverktyg Vanliga anropsbara Python-objekt eller @ai_function.
Godkännande av verktyg Tillhandahålls av ramverkets funktionsanropande chattklient; fungerar med valfritt funktionsverktygsanrop.
Kodtolkare Inte en Copilot CLI-funktion.
Filsökning Inte en Copilot CLI-funktion.
Webbsökning Visas inte som ett värdbaserat verktyg.
Shell/filsystem/URL-hämtning Inbyggd i Copilot CLI-körmiljön och styrd av hanteraren Permissions som du tillhandahåller.
Värdhanterade MCP-verktyg Fjärranslutna MCP-servrar (HTTP) konfigurerade via default_options["mcp_servers"]. Se MCP-servrar.
Lokala MCP-verktyg Lokala (stdio) MCP-servrar som konfigurerats via default_options["mcp_servers"]. Se MCP-servrar.

Använda agenten

Agenten är en standard BaseAgent och stöder alla standardagentåtgärder.

Mer information om hur du kör och interagerar med agenter finns i självstudierna om att komma igång med agenten.

Komma igång

Installera modulen Microsoft Agent Framework Go och GitHub Copilot SDK för Go. Agent Framework Go SDK kräver Go 1.25 eller senare.

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

Skapa en GitHub Copilot-agent

Skapa och starta en copilot.Clientoch skicka den sedan till 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)

Med verktyg och instruktioner

Du kan ange funktionsverktyg och anpassade instruktioner när du skapar agenten:

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)

Agentfunktioner

Direktuppspelningssvar

Hämta svar när de genereras:

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()

Sessionshantering

Underhålla konversationskontext över flera interaktioner med hjälp av sessioner:

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

Som standard kan agenten inte köra gränssnittskommandon, läsa/skriva filer eller hämta URL:er. Om du vill aktivera dessa funktioner anger du en behörighetshanterare 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)

MCP-servrar

Anslut till lokala (stdio) eller fjärranslutna (HTTP) MCP-servrar för utökade funktioner:

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)

Tips/Råd

Ett fullständigt körbart exempel finns i Go GitHub Copilot-exemplet.

Tools

Verktyg Tillstånd Notes
Funktionsverktyg Standardinstanser för Go tool.Tool, inklusive functool funktioner.
Godkännande av verktyg Funktionsverktyg kan använda standardstödet för godkännande av Go-verktyg; Copilots körningsbehörigheter hanteras av SessionConfig.OnPermissionRequest.
Kodtolkare Inte en Copilot CLI-funktion.
Filsökning Inte en Copilot CLI-funktion.
Webbsökning Visas inte som ett värdbaserat verktyg.
Shell/filsystem/URL-hämtning Inbyggd i Copilot CLI-körmiljön och styrd av hanteraren Permissions som du tillhandahåller.
Värdhanterade MCP-verktyg Fjärranslutna MCP-servrar (HTTP) konfigurerade via copilot.SessionConfig.MCPServers. Se MCP-servrar.
Lokala MCP-verktyg Lokala (stdio) MCP-servrar som konfigurerats via copilot.SessionConfig.MCPServers. Se MCP-servrar.

Använda agenten

Agenten är en standard *agent.Agent och stöder alla standardagentåtgärder.

Mer information om hur du kör och interagerar med agenter finns i självstudierna om att komma igång med agenten.

Nästa steg