Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Program Microsoft Agent Framework obsługuje tworzenie agentów korzystających z zestawu SDK narzędzia GitHub Copilot jako zaplecza. Agenci GitHub Copilot zapewniają dostęp do potężnych możliwości sztucznej inteligencji zorientowanej na kodowanie, w tym wykonywanie poleceń powłoki, operacje na plikach, pobieranie adresów URL oraz integrację z serwerem PROTOKOŁU MCP (Model Context Protocol).
Ważna
Agenty GitHub Copilot wymagają uwierzytelnionego środowiska uruchomieniowego GitHub Copilot. Niektóre zestawy SDK używają zainstalowanego interfejsu wiersza polecenia, a zestaw SDK języka Go domyślnie używa dołączonego środowiska uruchomieniowego. W przypadku zabezpieczeń zaleca się uruchamianie agentów z uprawnieniami powłoki lub plików w środowisku konteneryzowanym (Docker/Dev Container).
Wprowadzenie
Dodaj wymagane pakiety NuGet do projektu.
dotnet add package Microsoft.Agents.AI.GitHub.Copilot
Tworzenie agenta Copilot w usłudze GitHub
Na początku utwórz CopilotClient i uruchom go. Następnie użyj AsAIAgent metody rozszerzenia, aby utworzyć agenta.
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?"));
Za pomocą narzędzi i instrukcji
Podczas tworzenia agenta można udostępnić narzędzia funkcji i instrukcje niestandardowe:
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?"));
Funkcje agenta
Odpowiedzi w strumieniowaniu
Pobierz odpowiedzi w miarę ich generowania:
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();
Zarządzanie sesjami
Zachowaj kontekst konwersacji w wielu interakcjach przy użyciu sesji:
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
Domyślnie agent nie może wykonywać poleceń powłoki, odczytywać/zapisywać plików ani pobierać URL-i. Aby włączyć te możliwości, podaj procedurę obsługi uprawnień za pomocą polecenia 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"));
Zatwierdzanie narzędzi
Ponieważ zestaw SDK GitHub Copilot jest właścicielem pętli wywoływania narzędzi, zatwierdzenie niestandardowych narzędzi funkcji jest wymuszane za pomocą natywnego elementu zaczepienia przed wykonaniem zestawu SDK, a nie standardowej rundy zatwierdzania struktury agenta. Po zarejestrowaniu narzędzia opakowanego w ApprovalRequiredAIFunctionprogramie agent instaluje domyślny OnPreToolUse punkt zaczepienia, który zwraca "ask" dla tego narzędzia i kieruje decyzję do OnPermissionRequest programu obsługi:
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
Jeśli podasz własny OnPreToolUse punkt zaczepienia za pośrednictwem metody SessionConfig.Hooks, ma pierwszeństwo, a agent nie instaluje domyślnego haka zatwierdzania. Użytkownik jest wówczas w pełni odpowiedzialny za wymuszanie zatwierdzenia dla każdej ApprovalRequiredAIFunction rejestracji (na przykład poprzez zwrócenie "deny" decyzji lub "ask" ). Agent rejestruje ostrzeżenie nazewnictwa dowolnego narzędzia wymaganego do zatwierdzenia, które musi obsłużyć hak.
Serwery MCP
Nawiąż połączenie z lokalnymi (stdio) lub zdalnymi serwerami MCP (HTTP), aby uzyskać rozszerzone możliwości:
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"));
Wskazówka
Zobacz przykłady .NET dla kompletnych, działających przykładów.
Tools
| Narzędzie | Status | Notatki |
|---|---|---|
| Narzędzia funkcji | ✅ | Instancje w warstwie Standard AIFunction. |
| Zatwierdzanie narzędzi | ✅ | Zapewniane przez klienta czatu frameworka do wywoływania funkcji; działa z dowolnym wywołaniem narzędzia-funkcji. |
| Interpreter kodów | ❌ | To nie jest funkcja interfejsu wiersza polecenia Copilot. |
| Wyszukiwanie plików | ❌ | To nie jest funkcja interfejsu wiersza polecenia Copilot. |
| Wyszukiwanie w Sieci Web | ❌ | Niedostępne jako narzędzie hostowane. |
| Pobieranie powłoki/systemu plików/adresu URL | ✅ | Wbudowane w środowisko uruchomieniowe interfejsu wiersza polecenia Copilot i kontrolowane przez dostarczony moduł obsługi Permissions. |
| Hostowane narzędzia MCP | ✅ | Zdalne serwery MCP (HTTP) skonfigurowane za pośrednictwem programu SessionConfig.McpServers. Zobacz Serwery MCP. |
| Lokalne narzędzia MCP | ✅ | Lokalne (stdio) serwery MCP skonfigurowane za pośrednictwem programu SessionConfig.McpServers. Zobacz Serwery MCP. |
Korzystanie z agenta
Agent jest standardowy AIAgent i obsługuje wszystkie standardowe AIAgent operacje.
Aby uzyskać więcej informacji na temat uruchamiania agentów i interakcji z nimi, zobacz samouczki wprowadzające do agenta.
Wymagania wstępne
Zainstaluj pakiet GitHub Copilot programu Microsoft Agent Framework.
pip install agent-framework-github-copilot
Configuration
Agent można opcjonalnie skonfigurować przy użyciu następujących zmiennych środowiskowych:
| Zmienna | Description |
|---|---|
GITHUB_COPILOT_CLI_PATH |
Ścieżka do pliku wykonywalnego Copilot CLI |
GITHUB_COPILOT_MODEL |
Model do użycia (np. gpt-5, claude-sonnet-4) |
GITHUB_COPILOT_TIMEOUT |
Limit czasu żądania w sekundach |
GITHUB_COPILOT_LOG_LEVEL |
Poziom logów CLI |
GITHUB_COPILOT_BASE_DIRECTORY |
Katalog stanu sesji i konfiguracji CLI (domyślnie: ~/.copilot) |
Wprowadzenie
Zaimportuj wymagane klasy z programu Agent Framework:
import asyncio
from agent_framework.github import GitHubCopilotAgent, GitHubCopilotOptions
Tworzenie agenta Copilot w usłudze GitHub
Tworzenie podstawowego agenta
Najprostszy sposób na stworzenie agenta 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)
Z jawną konfiguracją
Konfigurację jawną można podać za pomocą elementu 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)
Wskazówka
default_options(i na przebieg options) Przekazuje wszystkie parametry akceptowane przez zestawy SDK create_session Copilot — na przykład reasoning_effort, context_tier, enable_citations, provider (bring-your-own-key) lub skill_directories — nie tylko klucze pokazane tutaj. Nieznane nazwy parametrów zgłaszają wartość TypeError, więc literówki są przechwytywane, a nie dyskretnie ignorowane.
Przynieś swój własny klucz (BYOK)
Obsługa byOK zestawu SDK Copilot umożliwia kierowanie żądań modelu za pośrednictwem własnego interfejsu OpenAI, Azure OpenAI, Anthropic lub punktu końcowego zgodnego z interfejsem OpenAI zamiast zaplecza GitHub Copilot.
ProviderConfig
GitHubCopilotOptions(provider=...)Przekaż element i ustaw ten sam identyfikator modelu zarówno w konfiguracji dostawcy, jak i opcji na poziomie model sesji.
W przykładzie z możliwością uruchomienia są używane następujące zmienne środowiskowe:
| Zmienna | Description |
|---|---|
BYOK_PROVIDER_TYPE |
Typ dostawcy: openai, azurelub anthropic. Wartość domyślna to openai. |
BYOK_BASE_URL |
Podstawowy adres URL punktu końcowego dostawcy. |
BYOK_API_KEY |
Statyczny klucz interfejsu API dla punktu końcowego dostawcy. |
BYOK_MODEL_ID |
Identyfikator modelu do żądania. Wartość domyślna to gpt-4o. |
Warning
Funkcja BYOK używa poświadczeń statycznych i nie zapewnia automatycznego odświeżania tokenu. Zachowaj klucze interfejsu API poza kontrolą źródła i załaduj je ze zmiennych środowiskowych lub magazynu wpisów tajnych. Użycie i rozliczenia są śledzone przez dostawcę, a nie przez GitHub.
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")
Funkcje agenta
Dostawcy kontekstu
Język Python GitHubCopilotAgent obsługuje również język context_providers=[...]. Dostawcy są uruchamiani przed i po każdym wywołaniu, więc wiadomości i instrukcje dodane przez dostawcę są uwzględniane w monitach Copilota, a dostawcy historii mogą obserwować ostateczną odpowiedź.
from agent_framework import InMemoryHistoryProvider
agent = GitHubCopilotAgent(
instructions="You are a helpful coding assistant.",
context_providers=[InMemoryHistoryProvider()],
)
Możesz połączyć wbudowanych dostawców historii z niestandardowymi dostawcami kontekstu. Aby uzyskać informacje o wzorcach implementacji, zobacz Dostawcy kontekstu.
Narzędzia funkcji
Wyposażyć agenta w funkcje niestandardowe:
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)
Odpowiedzi w strumieniowaniu
Uzyskuj odpowiedzi w miarę ich generowania w celu lepszego doświadczenia użytkownika.
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()
Zarządzanie wątkami
Zachowaj kontekst konwersacji w wielu interakcjach:
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
Domyślnie agent nie może wykonywać poleceń powłoki, odczytywać/zapisywać plików ani pobierać URL-i. Aby włączyć te możliwości, podaj procedurę obsługi uprawnień:
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)
W przypadku zaufanych środowisk, w których wszystkie zgody powinny być automatycznie akceptowane, użyj wbudowanego PermissionHandler.approve_all:
from copilot.session import PermissionHandler
agent = GitHubCopilotAgent(
default_options={
"on_permission_request": PermissionHandler.approve_all,
},
)
Moduły obsługi uprawnień obsługują zarówno synchroniczne, jak i asynchroniczne wywołania zwrotne. Użyj polecenia asyncio.to_thread dla interakcyjnych monitów w programach obsługi asynchronicznych, aby uniknąć blokowania pętli zdarzeń.
Zatwierdzanie narzędzi
Ponieważ zestaw SDK GitHub Copilot jest właścicielem pętli wywoływania narzędzi, zatwierdzenie niestandardowych narzędzi funkcji jest wymuszane za pomocą natywnego elementu zaczepienia przed wykonaniem zestawu SDK, a nie standardowej rundy zatwierdzania struktury agenta. Po zarejestrowaniu narzędzia zadeklarowanego approval_mode="always_require" za pomocą polecenia i nie podaniu własnego on_pre_tool_use haka agent instaluje domyślny punkt zaczepienia, który zwraca "ask" dla tego narzędzia i kieruje decyzję on_permission_request do programu obsługi:
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
Jeśli podasz własny on_pre_tool_use punkt zaczepienia, pierwszeństwo ma agent, a agent nie instaluje domyślnego haka zatwierdzania. Użytkownik jest wówczas w pełni odpowiedzialny za wymuszanie zatwierdzenia dla dowolnego approval_mode="always_require" narzędzia (na przykład przez zwrócenie "deny" decyzji lub "ask" ). Agent rejestruje ostrzeżenie nazewnictwa dowolnego narzędzia wymaganego do zatwierdzenia, które musi obsłużyć hak. W przypadku domyślnej procedury obsługi uprawnień odmów wszystkich narzędzie jest odrzucane, always_require chyba że podłączasz zatwierdzenie on_permission_request.
Serwery MCP
Nawiąż połączenie z lokalnymi (stdio) lub zdalnymi serwerami MCP (HTTP), aby uzyskać rozszerzone możliwości:
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 ma wbudowane śledzenie OpenTelemetry. Wywołaj configure_otel_providers() raz podczas uruchamiania, aby włączyć zakresy, metryki i dzienniki dla każdego przebiegu:
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!")
Jeśli potrzebujesz podstawowego agenta bez warstwy telemetrii (na przykład do jego opakowania w niestandardowy), zaimportuj RawGitHubCopilotAgent z agent_framework.github.
Aby zapoznać się z eksporterami OTLP i bogatszymi przykładami, zapoznaj się z przykładami dotyczącymi możliwości obserwacyjnych.
Tools
| Narzędzie | Status | Notatki |
|---|---|---|
| Narzędzia funkcji | ✅ | Standardowe obiekty wywoływalne Pythona lub @ai_function. |
| Zatwierdzanie narzędzi | ✅ | Zapewniane przez klienta czatu frameworka do wywoływania funkcji; działa z dowolnym wywołaniem narzędzia-funkcji. |
| Interpreter kodów | ❌ | To nie jest funkcja interfejsu wiersza polecenia Copilot. |
| Wyszukiwanie plików | ❌ | To nie jest funkcja interfejsu wiersza polecenia Copilot. |
| Wyszukiwanie w Sieci Web | ❌ | Niedostępne jako narzędzie hostowane. |
| Pobieranie powłoki/systemu plików/adresu URL | ✅ | Wbudowane w środowisko uruchomieniowe Copilot CLI i kontrolowane przez dostarczony przez Ciebie program obsługi Permissions. |
| Hostowane narzędzia MCP | ✅ | Zdalne serwery MCP (HTTP) skonfigurowane za pośrednictwem programu default_options["mcp_servers"]. Zobacz Serwery MCP. |
| Lokalne narzędzia MCP | ✅ | Lokalne (stdio) serwery MCP skonfigurowane za pośrednictwem programu default_options["mcp_servers"]. Zobacz Serwery MCP. |
Korzystanie z agenta
Agent jest standardowy BaseAgent i obsługuje wszystkie standardowe operacje agenta.
Aby uzyskać więcej informacji na temat uruchamiania agentów i interakcji z nimi, zobacz samouczki wprowadzające do agenta.
Wprowadzenie
Zainstaluj moduł Microsoft Agent Framework Go i zestaw SDK GitHub Copilot dla języka Go. Zestaw SDK języka Go platformy Agent wymaga języka Go w wersji 1.25 lub nowszej.
go get github.com/microsoft/agent-framework-go github.com/github/copilot-sdk/go
Tworzenie agenta Copilot w usłudze GitHub
Utwórz i uruchom element copilot.Client, a następnie przekaż go do 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)
Za pomocą narzędzi i instrukcji
Podczas tworzenia agenta można udostępnić narzędzia funkcji i instrukcje niestandardowe:
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)
Funkcje agenta
Odpowiedzi w strumieniowaniu
Pobierz odpowiedzi w miarę ich generowania:
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()
Zarządzanie sesjami
Zachowaj kontekst konwersacji w wielu interakcjach przy użyciu sesji:
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
Domyślnie agent nie może wykonywać poleceń powłoki, odczytywać/zapisywać plików ani pobierać URL-i. Aby włączyć te możliwości, podaj procedurę obsługi uprawnień za pomocą polecenia 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)
Serwery MCP
Nawiąż połączenie z lokalnymi (stdio) lub zdalnymi serwerami MCP (HTTP), aby uzyskać rozszerzone możliwości:
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)
Wskazówka
Zobacz przykład GitHub Copilot dla języka Go, aby zapoznać się z kompletnym działającym przykładem.
Tools
| Narzędzie | Status | Notatki |
|---|---|---|
| Narzędzia funkcji | ✅ | Standardowe instancje Go tool.Tool, w tym funkcje functool. |
| Zatwierdzanie narzędzi | ✅ | Narzędzia funkcji mogą korzystać ze standardowego mechanizmu zatwierdzania narzędzi Go; uprawnienia środowiska uruchomieniowego Copilot są obsługiwane przez SessionConfig.OnPermissionRequest. |
| Interpreter kodów | ❌ | To nie jest funkcja interfejsu wiersza polecenia Copilot. |
| Wyszukiwanie plików | ❌ | To nie jest funkcja interfejsu wiersza polecenia Copilot. |
| Wyszukiwanie w Sieci Web | ❌ | Niedostępne jako narzędzie hostowane. |
| Pobieranie powłoki/systemu plików/adresu URL | ✅ | Wbudowane w środowisko uruchomieniowe Copilot CLI i kontrolowane przez dostarczony przez Ciebie program obsługi Permissions. |
| Hostowane narzędzia MCP | ✅ | Zdalne serwery MCP (HTTP) skonfigurowane za pośrednictwem programu copilot.SessionConfig.MCPServers. Zobacz Serwery MCP. |
| Lokalne narzędzia MCP | ✅ | Lokalne (stdio) serwery MCP skonfigurowane za pośrednictwem programu copilot.SessionConfig.MCPServers. Zobacz Serwery MCP. |
Korzystanie z agenta
Agent jest standardowy *agent.Agent i obsługuje wszystkie standardowe operacje agenta.
Aby uzyskać więcej informacji na temat uruchamiania agentów i interakcji z nimi, zobacz samouczki wprowadzające do agenta.