Sdílet prostřednictvím


GitHub Copilot Agents

Microsoft Agent Framework podporuje vytváření agentů, kteří jako svůj back-end používají sadu GitHub Copilot SDK . Agenti GitHub Copilot poskytují přístup k výkonným funkcím AI zaměřené na kódování, včetně spouštění příkazů prostředí, operací se soubory, načítání adres URL a integrace serveru MCP (Model Context Protocol).

Důležité

Agenti GitHub Copilot vyžadují instalaci a ověření rozhraní příkazového řádku GitHub Copilot. Pro zabezpečení se doporučuje spouštět agenty s oprávněními pro shell nebo soubory v kontejnerizovaném prostředí (Docker/vývojový kontejner).

Začínáme

Přidejte do projektu požadované balíčky NuGet.

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

Vytvoření agenta GitHub Copilot

Jako první krok vytvořte CopilotClient a spusťte ho. Pak pomocí AsAIAgent metody rozšíření vytvořte agenta.

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

S nástroji a pokyny

Při vytváření agenta můžete poskytnout nástroje funkcí a vlastní pokyny:

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

Funkce agenta

Odpovědi na streamování

Získejte odpovědi hned, jakmile jsou generovány:

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

Správa relací

Udržujte kontext konverzace napříč několika interakcemi pomocí relací:

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"

Povolení

Ve výchozím nastavení agent nemůže spouštět příkazy shellu, číst ani zapisovat soubory, ani načítat adresy URL. Pokud chcete tyto možnosti povolit, zadejte obslužnou rutinu oprávnění prostřednictvím 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"));

Servery MCP

Připojte se k místním serverům (stdio) nebo vzdálenému serveru (HTTP) MCP pro rozšířené možnosti:

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

Návod

Najdete kompletní spustitelné příklady v ukázkách .NET.

Použití agenta

Agent AIAgent je standardní a podporuje všechny standardní AIAgent operace.

Další informace o tom, jak spouštět agenty a pracovat s nimi, najdete v úvodních kurzech agenta.

Požadavky

Nainstalujte balíček GitHub Copilot v rozhraní Microsoft Agent Framework.

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

Konfigurace

Agenta můžete volitelně nakonfigurovat pomocí následujících proměnných prostředí:

Proměnná Description
GITHUB_COPILOT_CLI_PATH Cesta ke spustitelnému souboru rozhraní příkazového řádku Copilot
GITHUB_COPILOT_MODEL Model, který se má použít (např. gpt-5, claude-sonnet-4)
GITHUB_COPILOT_TIMEOUT Časový limit požadavku v sekundách
GITHUB_COPILOT_LOG_LEVEL Úroveň protokolu CLI

Začínáme

Import požadovaných tříd z rozhraní Agent Framework:

import asyncio
from agent_framework.github import GitHubCopilotAgent, GitHubCopilotOptions

Vytvoření agenta GitHub Copilot

Základní vytvoření agenta

Nejjednodušší způsob vytvoření agenta 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)

S explicitní konfigurací

Explicitní konfiguraci můžete poskytnout prostřednictvím 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)

Funkce agenta

Funkční nástroje

Vybavení agenta vlastními funkcemi:

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)

Odpovědi na streamování

Získejte odpovědi, protože se generují pro lepší uživatelské prostředí:

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

Správa vláken

Udržujte kontext konverzace napříč několika interakcemi:

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

    async with agent:
        thread = agent.create_session()

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

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

Povolení

Ve výchozím nastavení agent nemůže spouštět příkazy shellu, číst ani zapisovat soubory, ani načítat adresy URL. Pokud chcete povolit tyto možnosti, zadejte obslužnou rutinu oprávnění:

from copilot.types import PermissionRequest, PermissionRequestResult

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)

Servery MCP

Připojte se k místním serverům (stdio) nebo vzdálenému serveru (HTTP) MCP pro rozšířené možnosti:

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://learn.microsoft.com/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)

Použití agenta

Agent je standardní BaseAgent a podporuje všechny standardní operace agentů.

Další informace o tom, jak spouštět agenty a pracovat s nimi, najdete v úvodních kurzech agenta.

Další kroky