Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Microsoft Agent Framework unterstützt das Erstellen von Agents, die das GitHub Copilot SDK als Back-End verwenden. GitHub Copilot-Agents bieten Zugriff auf leistungsstarke codierungsorientierte KI-Funktionen, einschließlich Shell-Befehlsausführung, Dateivorgänge, URL-Abruf und MCP-Serverintegration (Model Context Protocol).
Important
GitHub Copilot Agents benötigen eine authentifizierte GitHub Copilot Laufzeit. Einige SDKs verwenden eine installierte CLI, während das Go SDK standardmäßig die gebündelte Laufzeit verwendet. Zur Sicherheit wird empfohlen, Agents mit Shell- oder Dateiberechtigungen in einer containerisierten Umgebung (Docker/Dev Container) auszuführen.
Getting Started
Fügen Sie dem Projekt die erforderlichen NuGet-Pakete hinzu.
dotnet add package Microsoft.Agents.AI.GitHub.Copilot
Einen GitHub Copilot-Agent erstellen
Erstellen Sie als ersten Schritt eine CopilotClient und starten Sie sie. Verwenden Sie dann die AsAIAgent Erweiterungsmethode, um einen Agent zu erstellen.
using GitHub.Copilot;
using Microsoft.Agents.AI;
await using CopilotClient copilotClient = new();
await copilotClient.StartAsync();
AIAgent agent = copilotClient.AsAIAgent(sessionConfig: null);
Console.WriteLine(await agent.RunAsync("What is Microsoft Agent Framework?"));
Mit Tools und Anweisungen
Sie können Beim Erstellen des Agents Funktionstools und benutzerdefinierte Anweisungen bereitstellen:
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?"));
Agentfeatures
Streaming-Antworten
Erhalten Sie Antworten, während sie generiert werden:
await using CopilotClient copilotClient = new();
await copilotClient.StartAsync();
AIAgent agent = copilotClient.AsAIAgent(sessionConfig: null);
await foreach (AgentResponseUpdate update in agent.RunStreamingAsync("Tell me a short story."))
{
Console.Write(update);
}
Console.WriteLine();
Sitzungsverwaltung
Den Gesprächskontext über mehrere Interaktionen hinweg mithilfe von Sitzungen beibehalten.
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"
Erlaubnisse
Standardmäßig kann der Agent keine Shellbefehle ausführen, Dateien lesen/schreiben oder URLs abrufen. Um diese Funktionen zu aktivieren, richten Sie einen Berechtigungshandler über SessionConfig ein:
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"));
Toolgenehmigung
Da das GitHub Copilot SDK die Toolaufrufschleife besitzt, wird die Genehmigung für benutzerdefinierte Funktionstools über den systemeigenen Pre-Execution-Hook des SDK und nicht über den Standardmäßigen Agent Framework-Genehmigungsrunde erzwungen. Wenn Sie ein Tool registrieren, das umschlossen ApprovalRequiredAIFunctionist, installiert der Agent einen Standardhaken OnPreToolUse , der für dieses Tool zurückgibt "ask" , und leitet die Entscheidung an den OnPermissionRequest Handler weiter:
using GitHub.Copilot;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
AIFunction deleteFile = AIFunctionFactory.Create(
(string path) => $"Deleted {path}.",
"DeleteFile",
"Deletes a file.");
await using CopilotClient copilotClient = new();
await copilotClient.StartAsync();
SessionConfig sessionConfig = new()
{
// Wrapping the tool marks it approval-required; the agent turns this into an "ask" at OnPreToolUse.
Tools = [new ApprovalRequiredAIFunction(deleteFile)],
// OnPermissionRequest decides the "asked" tools (and Copilot's built-in shell/file/URL prompts).
OnPermissionRequest = PromptPermission,
};
AIAgent agent = copilotClient.AsAIAgent(sessionConfig);
Console.WriteLine(await agent.RunAsync("Delete the file temp.txt"));
Warning
Wenn Sie Ihren eigenen OnPreToolUse Hook über SessionConfig.Hooksbereitstellen, hat er Vorrang, und der Agent installiert seinen Standardgenehmigungs-Hook nicht . Sie sind dann vollständig für die Durchsetzung der Genehmigung für alle ApprovalRequiredAIFunction Registrierungen verantwortlich (z. B. durch Rückgabe einer "deny" Entscheidung)."ask" Der Agent protokolliert eine Warnung mit der Benennung aller genehmigungsrelevanten Tools, die Ihr Hook verarbeiten muss.
MCP-Server
Stellen Sie eine Verbindung mit lokalen (Stdio) oder REMOTE-MCP-Servern (HTTP) für erweiterte Funktionen her:
await using CopilotClient copilotClient = new();
await copilotClient.StartAsync();
SessionConfig sessionConfig = new()
{
OnPermissionRequest = PromptPermission,
McpServers = new Dictionary<string, McpServerConfig>
{
// Local stdio server
["filesystem"] = new McpStdioServerConfig
{
Command = "npx",
Args = ["-y", "@modelcontextprotocol/server-filesystem", "."],
Tools = ["*"],
},
// Remote HTTP server
["microsoft-learn"] = new McpHttpServerConfig
{
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"));
Tip
In den .NET-Beispielen finden Sie vollständige ausführbare Beispiele.
Tools
| Werkzeug | Status | Hinweise |
|---|---|---|
| Funktionswerkzeuge | ✅ | Standardinstanzen AIFunction. |
| Toolgenehmigung | ✅ | Bereitgestellt durch den Chatclient des Frameworks zum Aufrufen von Funktionen; funktioniert mit jedem Funktions- oder Tool-Aufruf. |
| Codedolmetscher | ❌ | Keine Copilot CLI-Funktion. |
| Dateisuche | ❌ | Keine Copilot CLI-Funktion. |
| Websuche | ❌ | Nicht als gehostetes Tool verfügbar gemacht. |
| Shell/Dateisystem/URL-Abruf | ✅ | In die Copilot CLI-Laufzeit integriert und durch den von Ihnen bereitgestellten Permissions-Handler abgesichert. |
| Gehostete MCP-Tools | ✅ | Remote-(HTTP-)MCP-Server, konfiguriert über SessionConfig.McpServers. Siehe MCP-Server. |
| Lokale MCP-Tools | ✅ | Lokale (stdio)-MCP-Server, die über SessionConfig.McpServers konfiguriert sind. Siehe MCP-Server. |
Den Agent verwenden
Der Agent ist ein AIAgent Standard und unterstützt alle AIAgent Standardoperationen.
Weitere Informationen zum Ausführen und Interagieren mit Agenten finden Sie in den Agenten-Einführungstutorials.
Voraussetzungen
Installieren Sie das GitHub Copilot-Paket von Microsoft Agent Framework.
pip install agent-framework-github-copilot
Configuration
Der Agent kann optional mithilfe der folgenden Umgebungsvariablen konfiguriert werden:
| Variable | Description |
|---|---|
GITHUB_COPILOT_CLI_PATH |
Pfad zur ausführbaren Datei der Copilot CLI |
GITHUB_COPILOT_MODEL |
Zu verwendende Modell (z. B. gpt-5, claude-sonnet-4) |
GITHUB_COPILOT_TIMEOUT |
Anforderungstimeout in Sekunden |
GITHUB_COPILOT_LOG_LEVEL |
CLI-Protokollebene |
GITHUB_COPILOT_BASE_DIRECTORY |
Verzeichnis für CLI-Sitzungszustand und Konfiguration (Standardeinstellung ~/.copilot) |
Getting Started
Importieren Sie die erforderlichen Klassen aus dem Agent-Framework:
import asyncio
from agent_framework.github import GitHubCopilotAgent, GitHubCopilotOptions
Einen GitHub Copilot-Agent erstellen
Grundlegende Agent-Erstellung
Die einfachste Möglichkeit zum Erstellen eines GitHub Copilot-Agents:
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)
Mit expliziter Konfiguration
Sie können eine explizite Konfiguration über default_options bereitstellen.
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)
Tip
default_options(und pro Ausführungoptions) leitet alle parameter weiter, die vom Copilot SDK create_session akzeptiert werden , zreasoning_effort. B. , context_tier, enable_citations, provider (bring-your-own-key) oder skill_directories nicht nur die hier gezeigten Schlüssel. Unbekannte Parameternamen lösen ein TypeError, sodass Tippfehler abgefangen werden, anstatt im Hintergrund ignoriert zu werden.
Bring Your Own Key (BYOK)
Verwenden Sie die BYOK-Unterstützung des Copilot SDK, um Modellanforderungen über Ihre eigenen OpenAI-, Azure OpenAI-, Anthropic- oder OpenAI-kompatiblen Endpunkte anstatt über das GitHub Copilot-Back-End weiterzuleiten. Übergeben Sie einen ProviderConfigGitHubCopilotOptions(provider=...)Durchlauf, und legen Sie denselben Modellbezeichner sowohl in der Anbieterkonfiguration als auch in der Option auf Sitzungsebene model fest.
Im runnable-Beispiel werden die folgenden Umgebungsvariablen verwendet:
| Variable | Description |
|---|---|
BYOK_PROVIDER_TYPE |
Anbietertyp: openai, , azureoder anthropic. Wird standardmäßig auf openai festgelegt. |
BYOK_BASE_URL |
Basis-URL für den Anbieterendpunkt. |
BYOK_API_KEY |
Statischer API-Schlüssel für den Anbieterendpunkt. |
BYOK_MODEL_ID |
Modellbezeichner, der angefordert werden soll. Wird standardmäßig auf gpt-4o festgelegt. |
Warning
BYOK verwendet statische Anmeldeinformationen und stellt keine automatische Tokenaktualisierung bereit. Lassen Sie API-Schlüssel aus der Quellcodeverwaltung heraus, und laden Sie sie aus Umgebungsvariablen oder einem geheimen Speicher. Die Nutzung und Abrechnung werden von Ihrem Anbieter und nicht von GitHub nachverfolgt.
import asyncio
import os
from typing import Literal, cast
from agent_framework.github import GitHubCopilotAgent, GitHubCopilotOptions
from copilot.session import ProviderConfig
async def main() -> None:
print("=== GitHub Copilot Agent with BYOK (Bring Your Own Key) ===\n")
model_id = os.environ.get("BYOK_MODEL_ID", "gpt-4o")
provider_type = cast(Literal["openai", "azure", "anthropic"], os.environ.get("BYOK_PROVIDER_TYPE", "openai"))
# ProviderConfig routes the session through a custom endpoint instead of the GitHub
# Copilot backend. `wire_api="completions"` is the broadly compatible choice; use
# "responses" for providers that support the OpenAI Responses API.
provider: ProviderConfig = {
"type": provider_type,
"base_url": os.environ["BYOK_BASE_URL"],
"api_key": os.environ["BYOK_API_KEY"],
"wire_api": "completions",
"model_id": model_id,
}
# BYOK requires the model to also be set at the session level.
agent: GitHubCopilotAgent[GitHubCopilotOptions] = GitHubCopilotAgent(
instructions="You are a helpful assistant.",
default_options=GitHubCopilotOptions(model=model_id, provider=provider),
)
async with agent:
query = "What are the benefits of using your own API keys with an agent framework?"
print(f"User: {query}")
result = await agent.run(query)
print(f"\nAgent: {result}\n")
Agentfeatures
Kontextanbieter
Python GitHubCopilotAgent unterstützt context_providers=[...]auch . Anbieter werden vor und nach jedem Aufruf ausgeführt, sodass vom Anbieter hinzugefügte Nachrichten und Anweisungen in der Copilot-Eingabeaufforderung enthalten sind und Verlaufsanbieter die endgültige Antwort beobachten können.
from agent_framework import InMemoryHistoryProvider
agent = GitHubCopilotAgent(
instructions="You are a helpful coding assistant.",
context_providers=[InMemoryHistoryProvider()],
)
Sie können integrierte Verlaufsanbieter mit benutzerdefinierten Kontextanbietern kombinieren. Implementierungsmuster finden Sie unter Kontextanbieter.
Funktionstools
Rüsten Sie Ihren Agent mit benutzerdefinierten Funktionen aus:
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)
Streaming-Antworten
Erhalten Sie Antworten, wenn sie generiert werden, um eine bessere Benutzererfahrung zu erzielen:
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()
Threadverwaltung
Den Gesprächskontext über mehrere Interaktionen hinweg beibehalten.
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"
Erlaubnisse
Standardmäßig kann der Agent keine Shellbefehle ausführen, Dateien lesen/schreiben oder URLs abrufen. Um diese Funktionen zu aktivieren, geben Sie einen Berechtigungshandler an:
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)
Verwenden Sie für vertrauenswürdige Umgebungen, in denen alle Berechtigungen automatisch genehmigt werden sollen, die integrierte PermissionHandler.approve_all:
from copilot.session import PermissionHandler
agent = GitHubCopilotAgent(
default_options={
"on_permission_request": PermissionHandler.approve_all,
},
)
Berechtigungs-Handler unterstützen sowohl synchrone als auch asynchrone Callbacks. Verwenden Sie asyncio.to_thread für interaktive Abfragen in asynchronen Handlern, um ein Blockieren der Ereignisschleife zu vermeiden.
Toolgenehmigung
Da das GitHub Copilot SDK die Toolaufrufschleife besitzt, wird die Genehmigung für benutzerdefinierte Funktionstools über den systemeigenen Pre-Execution-Hook des SDK und nicht über den Standardmäßigen Agent Framework-Genehmigungsrunde erzwungen. Wenn Sie ein Tool registrieren, mit approval_mode="always_require" dem Sie deklariert sind und keinen eigenen on_pre_tool_use Hook bereitstellen, installiert der Agent einen Standardhaken, der für dieses Tool zurückgegeben "ask" wird, und leitet die Entscheidung an Ihren on_permission_request Handler weiter:
from agent_framework import tool
from agent_framework.github import GitHubCopilotAgent, GitHubCopilotOptions
from copilot.session import PermissionHandler
@tool(approval_mode="always_require")
def delete_file(path: str) -> str:
"""Delete a file."""
return f"Deleted {path}."
agent = GitHubCopilotAgent(
tools=[delete_file],
# The "ask" decision is routed here; approve or deny the call.
default_options=GitHubCopilotOptions(on_permission_request=PermissionHandler.approve_all),
)
Warning
Wenn Sie Ihren eigenen on_pre_tool_use Hook bereitstellen, hat er Vorrang, und der Agent installiert seinen Standardgenehmigungs-Hook nicht . Sie sind dann vollständig für die Durchsetzung der Genehmigung für jedes approval_mode="always_require" Tool verantwortlich (z. B. durch Zurückgeben einer "deny" Entscheidung)."ask" Der Agent protokolliert eine Warnung mit der Benennung aller genehmigungsrelevanten Tools, die Ihr Hook verarbeiten muss. Mit dem standardmäßigen Verweigerungs-All-Berechtigungshandler wird ein always_require Tool verweigert, es sei denn, Sie verbinden eine Genehmigung on_permission_request.
MCP-Server
Stellen Sie eine Verbindung mit lokalen (Stdio) oder REMOTE-MCP-Servern (HTTP) für erweiterte Funktionen her:
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)
Beobachtbarkeit
GitHubCopilotAgent verfügt über integriertes OpenTelemetry-Tracing. Rufen Sie einmal beim Start auf configure_otel_providers() , um Spannen, Metriken und Protokolle für jede Ausführung zu aktivieren:
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!")
Wenn Sie den zugrunde liegenden Agent ohne die Telemetrieebene benötigen (z. B. um ihn in eine benutzerdefinierte Lösung einzubinden), importieren Sie RawGitHubCopilotAgent von agent_framework.github.
Für OTLP-Exporteure und umfangreichere Beispiele finden Sie die Observability-Beispiele.
Tools
| Werkzeug | Status | Hinweise |
|---|---|---|
| Funktionswerkzeuge | ✅ | Normale Python-aufrufbare Objekte oder @ai_function. |
| Toolgenehmigung | ✅ | Bereitgestellt durch den Chatclient des Frameworks zum Aufrufen von Funktionen; funktioniert mit jedem Funktions- oder Tool-Aufruf. |
| Codedolmetscher | ❌ | Keine Copilot CLI-Funktion. |
| Dateisuche | ❌ | Keine Copilot CLI-Funktion. |
| Websuche | ❌ | Nicht als gehostetes Tool verfügbar gemacht. |
| Shell/Dateisystem/URL-Abruf | ✅ | In die Copilot CLI-Laufzeit integriert und durch den von Ihnen bereitgestellten Permissions-Handler gesteuert. |
| Gehostete MCP-Tools | ✅ | Remote-(HTTP-)MCP-Server, konfiguriert über default_options["mcp_servers"]. Siehe MCP-Server. |
| Lokale MCP-Tools | ✅ | Lokale (stdio)-MCP-Server, die über default_options["mcp_servers"] konfiguriert sind. Siehe MCP-Server. |
Den Agent verwenden
Der Agent ist ein Standard BaseAgent und unterstützt alle Standard-Agent-Vorgänge.
Weitere Informationen zum Ausführen und Interagieren mit Agenten finden Sie in den Agenten-Einführungstutorials.
Getting Started
Installieren Sie das Microsoft Agent Framework Go-Modul und das GitHub Copilot SDK für Go. Das Agent Framework Go SDK erfordert Go 1.25 oder höher.
go get github.com/microsoft/agent-framework-go github.com/github/copilot-sdk/go
Einen GitHub Copilot-Agent erstellen
Erstellen und starten Sie ein copilot.Client, und übergeben Sie es an 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)
Mit Tools und Anweisungen
Sie können Beim Erstellen des Agents Funktionstools und benutzerdefinierte Anweisungen bereitstellen:
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)
Agentfeatures
Streaming-Antworten
Erhalten Sie Antworten, während sie generiert werden:
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()
Sitzungsverwaltung
Den Gesprächskontext über mehrere Interaktionen hinweg mithilfe von Sitzungen beibehalten.
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)
Erlaubnisse
Standardmäßig kann der Agent keine Shellbefehle ausführen, Dateien lesen/schreiben oder URLs abrufen. Um diese Funktionen zu aktivieren, richten Sie einen Berechtigungshandler über copilot.SessionConfig ein:
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-Server
Stellen Sie eine Verbindung mit lokalen (Stdio) oder REMOTE-MCP-Servern (HTTP) für erweiterte Funktionen her:
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)
Tip
Ein vollständiges Runnable-Beispiel finden Sie im Beispiel "Go GitHub Copilot".
Tools
| Werkzeug | Status | Hinweise |
|---|---|---|
| Funktionswerkzeuge | ✅ | Standard-Go-Instanzentool.Tool, einschließlich functool-Funktionen. |
| Toolgenehmigung | ✅ | Funktions-Tools können die Standardunterstützung für die Genehmigung von Go-Tools verwenden; Copilot-Laufzeitberechtigungen werden von SessionConfig.OnPermissionRequest verwaltet. |
| Codedolmetscher | ❌ | Keine Copilot CLI-Funktion. |
| Dateisuche | ❌ | Keine Copilot CLI-Funktion. |
| Websuche | ❌ | Nicht als gehostetes Tool verfügbar gemacht. |
| Shell/Dateisystem/URL-Abruf | ✅ | In die Copilot CLI-Laufzeit integriert und durch den von Ihnen bereitgestellten Permissions-Handler gesteuert. |
| Gehostete MCP-Tools | ✅ | Remote-(HTTP-)MCP-Server, konfiguriert über copilot.SessionConfig.MCPServers. Siehe MCP-Server. |
| Lokale MCP-Tools | ✅ | Lokale (stdio)-MCP-Server, die über copilot.SessionConfig.MCPServers konfiguriert sind. Siehe MCP-Server. |
Den Agent verwenden
Der Agent ist ein Standard *agent.Agent und unterstützt alle Standard-Agent-Vorgänge.
Weitere Informationen zum Ausführen und Interagieren mit Agenten finden Sie in den Agenten-Einführungstutorials.