Megosztás:


GitHub Copilot-ügynökök

A Microsoft Agent Framework támogatja a GitHub Copilot SDK-t háttérként használó ügynökök létrehozását. A GitHub Copilot-ügynökök hatékony kódolás-orientált AI-képességekhez biztosítanak hozzáférést, beleértve a rendszerhéjparancsok végrehajtását, a fájlműveleteket, az URL-beolvasást és a Model Context Protocol (MCP) kiszolgálóintegrációját.

Fontos

A GitHub Copilot-ügynökök használatához telepíteni és hitelesíteni kell a GitHub Copilot CLI-t. A biztonság érdekében ajánlott rendszerhéj- vagy fájlengedélyekkel rendelkező ügynököket futtatni egy tárolóalapú környezetben (Docker/Dev Container).

Első lépések

Adja hozzá a szükséges NuGet-csomagokat a projekthez.

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

GitHub Copilot-ügynök létrehozása

Első lépésként hozzon létre egy CopilotClient elemet, és indítsa el. Ezután a AsAIAgent bővítménymetódus használatával hozzon létre egy ügynököt.

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

Eszközökkel és útmutatásokkal

Az ügynök létrehozásakor függvényeszközöket és egyéni utasításokat is megadhat:

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

Ügynökfunkciók

Adatfolyam válaszok

A válaszok azonnali fogadása, amint létrejönnek.

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

Munkamenet-kezelés

A beszélgetési környezet fenntartása több interakcióban munkamenetek használatával:

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

Alapértelmezés szerint az ügynök nem tud rendszerhéjparancsokat végrehajtani, fájlokat olvasni vagy írni, illetve URL-címeket beolvasni. A képességek engedélyezéséhez adjon meg egy engedélykezelőt a következő módon 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"));

MCP-kiszolgálók

Csatlakozzon helyi (stdio) vagy távoli (HTTP) MCP-kiszolgálókhoz a kiterjesztett képességek érdekében:

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

Jótanács

A teljes futtatható példákért tekintse meg a .NET-mintákat .

Az ügynök használata

Az ügynök egy standard AIAgent és támogat minden szabványos AIAgent műveletet.

Az ügynökök futtatásával és használatával kapcsolatos további információkért tekintse meg az ügynök első lépéseket ismertető oktatóanyagait.

Előfeltételek

Telepítse a Microsoft Agent Framework GitHub Copilot-csomagot.

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

Konfiguráció

Az ügynök opcionálisan a következő környezeti változók használatával konfigurálható:

Variable Description
GITHUB_COPILOT_CLI_PATH A Copilot CLI végrehajtható elérési útja
GITHUB_COPILOT_MODEL Használandó modell (pl. gpt-5, claude-sonnet-4)
GITHUB_COPILOT_TIMEOUT Kérelem időtúllépés ideje másodpercben
GITHUB_COPILOT_LOG_LEVEL CLI-naplószint

Első lépések

Importálja a szükséges osztályokat az Agent Frameworkből:

import asyncio
from agent_framework.github import GitHubCopilotAgent, GitHubCopilotOptions

GitHub Copilot-ügynök létrehozása

Alapszintű ügynök létrehozás

GitHub Copilot-ügynök létrehozásának legegyszerűbb módja:

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)

Explicit konfigurációval

Az default_options alkalmazásával explicit konfigurációt adhat meg.

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)

Ügynökfunkciók

Függvényeszközök

Ügynökét személyre szabott függvényekkel lássa el:

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)

Adatfolyam válaszok

A jobb felhasználói élmény érdekében a generált válaszok lekérése:

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

Szálkezelés

A beszélgetési környezet fenntartása több interakcióban:

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"

Permissions

Alapértelmezés szerint az ügynök nem tud rendszerhéjparancsokat végrehajtani, fájlokat olvasni vagy írni, illetve URL-címeket beolvasni. A képességek engedélyezéséhez adjon meg egy engedélykezelőt:

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)

MCP-kiszolgálók

Csatlakozzon helyi (stdio) vagy távoli (HTTP) MCP-kiszolgálókhoz a kiterjesztett képességek érdekében:

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)

Az ügynök használata

Az ügynök egy szabványos BaseAgent, és támogatja az összes szabványos ügynökműveletet.

Az ügynökök futtatásával és használatával kapcsolatos további információkért tekintse meg az ügynök első lépéseket ismertető oktatóanyagait.

Következő lépések