Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Microsoft Agent Framework поддерживает создание агентов, использующих пакет SDK для GitHub Copilot в качестве серверной части. Агенты GitHub Copilot предоставляют доступ к мощным возможностям ИИ, ориентированным на кодирование, включая выполнение команд оболочки, операции с файлами, получение URL-адресов и интеграцию с сервером mcP.
Important
Агентам GitHub Copilot требуется аутентифицированная среда выполнения GitHub Copilot. Некоторые пакеты SDK используют установленный интерфейс командной строки, а пакет SDK Go использует пакетную среду выполнения по умолчанию. Для обеспечения безопасности рекомендуется запускать агенты с разрешениями оболочки или файла в контейнерной среде (контейнер Docker/Dev).
Getting Started
Добавьте необходимые пакеты NuGet в проект.
dotnet add package Microsoft.Agents.AI.GitHub.Copilot
Создание агента GitHub Copilot
Сначала создайте CopilotClient и запустите его. Затем используйте AsAIAgent метод расширения для создания агента.
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?"));
С инструментами и инструкциями
Вы можете предоставить средства функций и пользовательские инструкции при создании агента:
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?"));
Компоненты агента
Ответы потоковые
Получайте ответы по мере их создания.
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();
Управление сеансами
Сохраняйте контекст беседы в нескольких взаимодействиях с помощью сеансов:
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
По умолчанию агент не может выполнять команды оболочки, читать/записывать файлы или получать URL-адреса. Чтобы включить эти возможности, предоставьте обработчик разрешений с помощью 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"));
Утверждение инструмента
Так как пакет SDK GitHub Copilot владеет циклом вызова инструментов, утверждение пользовательских средств функций применяется с помощью собственного перехватчика предварительного выполнения пакета SDK, а не стандартного обхода утверждения агента Framework. При регистрации средства, завернутого в ApprovalRequiredAIFunctionоболочку, агент устанавливает перехватчик по умолчанию OnPreToolUse , который возвращается "ask" для этого средства и направляет решение обработчику OnPermissionRequest :
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"));
Предупреждение
Если вы предоставляете свой собственный OnPreToolUse перехватчик через SessionConfig.Hooks, он имеет приоритет, и агент не устанавливает свой крючок утверждения по умолчанию. Затем вы полностью несете ответственность за принудительное утверждение для любого ApprovalRequiredAIFunction зарегистрированного (например, возвращая "deny" или "ask" решение). Агент регистрирует предупреждение, именующее любой инструмент, необходимый для утверждения, который должен обрабатывать ваш перехватчик.
Серверы MCP
Подключитесь к локальным (stdio) или удаленным (HTTP) СЕРВЕРАм MCP для расширенных возможностей:
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
Полные примеры запуска см. в примерах .NET .
Tools
| инструмент | Статус | Примечания |
|---|---|---|
| Средства функций | ✅ | Стандартные AIFunction экземпляры. |
| Утверждение инструмента | ✅ | Предоставляется чат-клиентом фреймворка с вызовом функций; работает с любым вызовом функции-инструмента. |
| Интерпретатор кода | ❌ | Это не является возможностью Copilot CLI. |
| Поиск файлов | ❌ | Это не является возможностью Copilot CLI. |
| Поиск в Интернете | ❌ | Недоступно в виде размещённого инструмента. |
| Оболочка / файловая система / получение URL-адреса | ✅ | Встроена в среду выполнения Copilot CLI, а доступ к ней контролируется предоставленным вами обработчиком Permissions. |
| Размещенные средства MCP | ✅ | Удаленные (HTTP) СЕРВЕРы MCP, настроенные с помощью SessionConfig.McpServers. См. статью "Серверы MCP". |
| Локальные средства MCP | ✅ | Локальные (stdio) серверы MCP, настроенные с помощью SessionConfig.McpServers. См. статью "Серверы MCP". |
Использование агента
Агент является стандартным AIAgent и поддерживает все стандартные AIAgent операции.
Дополнительные сведения о запуске и взаимодействии с агентами см. в руководствах по началу работы агента.
Необходимые условия
Установите пакет Microsoft Agent Framework GitHub Copilot.
pip install agent-framework-github-copilot
Configuration
Агент можно настроить при необходимости с помощью следующих переменных среды:
| «Переменная» | Description |
|---|---|
GITHUB_COPILOT_CLI_PATH |
Путь к исполняемому файлу Copilot CLI |
GITHUB_COPILOT_MODEL |
Модель для использования (например, gpt-5, ) claude-sonnet-4 |
GITHUB_COPILOT_TIMEOUT |
Время ожидания запроса в секундах |
GITHUB_COPILOT_LOG_LEVEL |
Уровень журнала CLI |
GITHUB_COPILOT_BASE_DIRECTORY |
Каталог для состояния сеанса CLI и конфигурации (по умолчанию — ~/.copilot) |
Getting Started
Импортируйте необходимые классы из Agent Framework:
import asyncio
from agent_framework.github import GitHubCopilotAgent, GitHubCopilotOptions
Создание агента GitHub Copilot
Базовое создание агента
Самый простой способ создания агента 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)
С явной конфигурацией
Вы можете предоставить явную конфигурацию с помощью 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)
Tip
default_options(и на выполнениеoptions) перенаправит любой параметр, принятый пакетом SDK create_session Copilot ( напримерreasoning_effort, context_tier, enable_citations( provider перенос собственного ключа) или skill_directories не только ключами, показанными здесь. Неизвестные имена параметров вызывают TypeError, поэтому опечатки перехватываются, а не игнорируются автоматически.
приносите свой ключ (BYOK)
Используйте поддержку BYOK пакета SDK Copilot для маршрутизации запросов модели через собственную конечную точку OpenAI, Azure OpenAI, Anthropic или конечную точку, совместимую с OpenAI, вместо серверной части GitHub Copilot.
ProviderConfig
GitHubCopilotOptions(provider=...)Передайте через и задайте один и тот же идентификатор модели как в конфигурации поставщика, так и в параметре уровня model сеанса.
В примере запуска используются следующие переменные среды:
| «Переменная» | Description |
|---|---|
BYOK_PROVIDER_TYPE |
Тип поставщика: openai, azureили anthropic. По умолчанию — openai. |
BYOK_BASE_URL |
Базовый URL-адрес конечной точки поставщика. |
BYOK_API_KEY |
Статический ключ API для конечной точки поставщика. |
BYOK_MODEL_ID |
Идентификатор модели для запроса. По умолчанию — gpt-4o. |
Предупреждение
BYOK использует статические учетные данные и не предоставляет автоматическое обновление маркера. Сохраняйте ключи API вне системы управления версиями и загружайте их из переменных среды или хранилища секретов. Использование и выставление счетов отслеживаются поставщиком, а не 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")
Компоненты агента
Поставщики контекстов
Python GitHubCopilotAgent также поддерживает context_providers=[...]. Поставщики выполняются до и после каждого вызова, поэтому сообщения и инструкции, добавленные поставщиками, включены в запрос Copilot, и поставщики данных могут наблюдать окончательный ответ.
from agent_framework import InMemoryHistoryProvider
agent = GitHubCopilotAgent(
instructions="You are a helpful coding assistant.",
context_providers=[InMemoryHistoryProvider()],
)
Встроенных поставщиков истории можно объединить с настраиваемыми поставщиками контекста. Шаблоны реализации см. в разделе "Поставщики контекста".
Инструменты функций
Оснастите вашего агента настраиваемыми функциями:
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)
Ответы потоковые
Получите ответы по мере их создания для улучшения взаимодействия с пользователем:
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()
Управление потоками
Сохраняйте контекст беседы в нескольких взаимодействиях:
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
По умолчанию агент не может выполнять команды оболочки, читать/записывать файлы или получать URL-адреса. Чтобы включить эти возможности, предоставьте обработчик разрешений:
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)
В доверенных средах, где все разрешения должны автоматически одобряться, используйте встроенный PermissionHandler.approve_all:
from copilot.session import PermissionHandler
agent = GitHubCopilotAgent(
default_options={
"on_permission_request": PermissionHandler.approve_all,
},
)
Обработчики разрешений поддерживают синхронизацию и асинхронные обратные вызовы. Используйте asyncio.to_thread для интерактивных приглашений в асинхронных обработчиках, чтобы избежать блокировки цикла событий.
Утверждение инструмента
Так как пакет SDK GitHub Copilot владеет циклом вызова инструментов, утверждение пользовательских средств функций применяется с помощью собственного перехватчика предварительного выполнения пакета SDK, а не стандартного обхода утверждения агента Framework. При регистрации средства, объявленного approval_mode="always_require" и не предоставляя собственный on_pre_tool_use перехватчик, агент устанавливает крючок по умолчанию, который возвращается "ask" для этого средства и направляет решение обработчику on_permission_request :
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),
)
Предупреждение
Если вы предоставляете собственный on_pre_tool_use перехватчик, он имеет приоритет, и агент не устанавливает его крючок утверждения по умолчанию. Затем вы несете полную ответственность за принудительное утверждение любого approval_mode="always_require" инструмента (например, путем возврата "deny" или "ask" принятия решения). Агент регистрирует предупреждение, именующее любой инструмент, необходимый для утверждения, который должен обрабатывать ваш перехватчик. При использовании обработчика разрешений запрета по умолчанию средство запрещается, always_require если вы не проверите утверждение on_permission_request.
Серверы MCP
Подключитесь к локальным (stdio) или удаленным (HTTP) СЕРВЕРАм MCP для расширенных возможностей:
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 имеет встроенную поддержку трассировки OpenTelemetry. Вызов configure_otel_providers() один раз при запуске, чтобы включить диапазоны, метрики и журналы для каждого запуска:
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!")
Если вам нужен базовый агент без слоя телеметрии (например, чтобы обернуть его в собственный), импортируйте RawGitHubCopilotAgent из agent_framework.github.
Примеры наблюдаемости см. в примерах для экспортеров OTLP и более богатых примеров.
Tools
| инструмент | Статус | Примечания |
|---|---|---|
| Средства функций | ✅ | Стандартные вызываемые объекты Python или @ai_function. |
| Утверждение инструмента | ✅ | Предоставляется чат-клиентом фреймворка с вызовом функций; работает с любым вызовом функции-инструмента. |
| Интерпретатор кода | ❌ | Это не является возможностью Copilot CLI. |
| Поиск файлов | ❌ | Это не является возможностью Copilot CLI. |
| Поиск в Интернете | ❌ | Недоступно в виде размещённого инструмента. |
| Оболочка / файловая система / получение URL-адреса | ✅ | Встроена в среду выполнения Copilot CLI и управляется предоставляемым вами обработчиком Permissions. |
| Размещенные средства MCP | ✅ | Удаленные (HTTP) СЕРВЕРы MCP, настроенные с помощью default_options["mcp_servers"]. См. статью "Серверы MCP". |
| Локальные средства MCP | ✅ | Локальные (stdio) серверы MCP, настроенные с помощью default_options["mcp_servers"]. См. статью "Серверы MCP". |
Использование агента
Агент стандартный BaseAgent и поддерживает все стандартные операции агента.
Дополнительные сведения о запуске и взаимодействии с агентами см. в руководствах по началу работы агента.
Getting Started
Установите модуль Microsoft Agent Framework Go и пакет SDK GitHub Copilot для Go. Для SDK Agent Framework для Go требуется Go 1.25 или более поздняя версия.
go get github.com/microsoft/agent-framework-go github.com/github/copilot-sdk/go
Создание агента GitHub Copilot
Создайте и запустите copilot.Client, затем передайте его в 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)
С инструментами и инструкциями
Вы можете предоставить средства функций и пользовательские инструкции при создании агента:
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)
Компоненты агента
Ответы потоковые
Получайте ответы по мере их создания.
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()
Управление сеансами
Сохраняйте контекст беседы в нескольких взаимодействиях с помощью сеансов:
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
По умолчанию агент не может выполнять команды оболочки, читать/записывать файлы или получать URL-адреса. Чтобы включить эти возможности, предоставьте обработчик разрешений с помощью 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
Подключитесь к локальным (stdio) или удаленным (HTTP) СЕРВЕРАм MCP для расширенных возможностей:
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
Полный пример запуска см. в примере go GitHub Copilot.
Tools
| инструмент | Статус | Примечания |
|---|---|---|
| Средства функций | ✅ | Стандартные экземпляры Go tool.Tool, включая функции functool. |
| Утверждение инструмента | ✅ | Инструменты Function могут использовать стандартный механизм согласования инструментов Go; разрешения среды выполнения Copilot обрабатываются с помощью SessionConfig.OnPermissionRequest. |
| Интерпретатор кода | ❌ | Это не является возможностью Copilot CLI. |
| Поиск файлов | ❌ | Это не является возможностью Copilot CLI. |
| Поиск в Интернете | ❌ | Недоступно в виде размещённого инструмента. |
| Оболочка / файловая система / получение URL-адреса | ✅ | Встроена в среду выполнения Copilot CLI и управляется предоставляемым вами обработчиком Permissions. |
| Размещенные средства MCP | ✅ | Удаленные (HTTP) СЕРВЕРы MCP, настроенные с помощью copilot.SessionConfig.MCPServers. См. статью "Серверы MCP". |
| Локальные средства MCP | ✅ | Локальные (stdio) серверы MCP, настроенные с помощью copilot.SessionConfig.MCPServers. См. статью "Серверы MCP". |
Использование агента
Агент стандартный *agent.Agent и поддерживает все стандартные операции агента.
Дополнительные сведения о запуске и взаимодействии с агентами см. в руководствах по началу работы агента.