Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Microsoft Agent Framework поддерживает создание агентов, использующих пакет SDK для GitHub Copilot в качестве серверной части. Агенты GitHub Copilot предоставляют доступ к мощным возможностям ИИ, ориентированным на кодирование, включая выполнение команд оболочки, операции с файлами, получение URL-адресов и интеграцию с сервером mcP.
Это важно
Агентам 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"));
Утверждение инструмента
Поскольку GitHub Copilot SDK управляет циклом вызова инструментов, подтверждение для пользовательских инструментов-функций обеспечивается через встроенный в SDK хук, срабатывающий перед выполнением, а не через стандартный цикл согласования в Agent 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
| инструмент | Статус | Notes |
|---|---|---|
| Средства функций | ✅ | Стандартные AIFunction экземпляры. |
| Утверждение инструмента | ✅ | Предоставляется чат-клиентом фреймворка с вызовом функций; работает с любым вызовом функции-инструмента. |
| Интерпретатор кода | ❌ | Это не является возможностью Copilot CLI. |
| Поиск файлов | ❌ | Это не является возможностью Copilot CLI. |
| Поиск в Интернете | ❌ | Недоступно в виде размещённого инструмента. |
| Оболочка / файловая система / получение URL-адреса | ✅ | Встроена в среду выполнения Copilot CLI, а доступ к ней контролируется предоставленным вами обработчиком Permissions. |
| Размещенные средства MCP | ✅ | Удаленные (HTTP) СЕРВЕРы MCP, настроенные с помощью SessionConfig.McpServers. См. статью "Серверы MCP". |
| Локальные средства MCP | ✅ | Локальные (stdio) серверы MCP, настроенные с помощью SessionConfig.McpServers. См. статью "Серверы MCP". |
Использование агента
Агент является стандартным AIAgent и поддерживает все стандартные AIAgent операции.
Дополнительные сведения о запуске и взаимодействии с агентами см. в руководствах по началу работы агента.
Prerequisites
Установите пакет Microsoft Agent Framework GitHub Copilot.
pip install agent-framework-github-copilot
Configuration
Агент можно настроить при необходимости с помощью следующих переменных среды:
| Variable | Описание |
|---|---|
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) передаёт любой параметр, который поддерживается create_session в Copilot SDK, — например, reasoning_effort, context_tier, enable_citations, provider (использование собственного ключа) или skill_directories, — а не только ключи, показанные здесь. Неизвестные имена параметров вызывают TypeError, поэтому опечатки обнаруживаются, а не молча игнорируются.
Управление хуками файлов рабочего пространства
По умолчанию GitHubCopilotAgent не загружает файловые хуки из папки .github/hooks/ в рабочем каталоге. Соглашайтесь только в том случае, если вы доверяете рабочему каталогу и хотите, чтобы его хуки влияли на сеанс:
from agent_framework.github import GitHubCopilotAgent, GitHubCopilotOptions
async def opt_in_to_file_hooks() -> None:
"""2. Opt in for a working directory whose hooks you trust."""
print("=== 2. Opted in: file hooks from the working directory are loaded ===\n")
agent: GitHubCopilotAgent[GitHubCopilotOptions] = GitHubCopilotAgent(
instructions="You are a helpful assistant.",
default_options=GitHubCopilotOptions(enable_file_hooks=True),
)
async with agent:
result = await agent.run("In one sentence, what can you help me with?")
print(f"Agent: {result}\n")
Предупреждение
Файловые хуки выполняют команды от имени пользователя, который запускает ваше приложение. Они не зависят от on_permission_request или других обратных вызовов для подтверждения инструментов.
Если рабочий каталог определяет хуки и параметр enable_file_hooks не указан, агент по умолчанию задаёт ему значение False и один раз записывает предупреждение через средство ведения журнала agent_framework.github_copilot. Явная установка enable_file_hooks=False отключает хуки без вывода этого предупреждения.
приносите свой ключ (BYOK)
Используйте поддержку BYOK в Copilot SDK, чтобы направлять запросы к модели через собственную конечную точку OpenAI, Azure OpenAI, Anthropic или совместимую с OpenAI конечную точку вместо бэкенда GitHub Copilot. Передайте ProviderConfig через GitHubCopilotOptions(provider=...) и задайте один и тот же идентификатор модели и в конфигурации поставщика, и в параметре model на уровне сеанса.
В этом исполняемом примере используются следующие переменные среды:
| Variable | Описание |
|---|---|
BYOK_PROVIDER_TYPE |
Тип поставщика: openai, azureили anthropic. По умолчанию — openai. |
BYOK_BASE_URL |
Базовый URL-адрес конечной точки поставщика. |
BYOK_API_KEY |
Статический ключ API для конечной точки поставщика. |
BYOK_MODEL_ID |
Идентификатор запрашиваемой модели. По умолчанию — gpt-4o. |
В примере используется статический ключ API. Для ротации учетных данных задайте в ProviderConfig экспериментальное поле bearer_token_provider, указав синхронный или асинхронный обратный вызов, возвращающий токен. Copilot SDK вызывает функцию обратного вызова для каждого запроса к поставщику, и эта функция отвечает за получение токена, кэширование и обновление. Поставщик токена Bearer имеет приоритет над api_key и bearer_token, если они также заданы.
Предупреждение
Не храните статические ключи 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)
Чтобы передать в инструмент значения, доступные только на хосте, объявите параметр с аннотацией FunctionInvocationContext, и передайте function_invocation_kwargs при запуске. Параметр контекста скрыт от схемы, отправленной модели. Он содержит текущие значения выполнения в ctx.kwargs и текущий AgentSession в ctx.session.
from agent_framework import FunctionInvocationContext
def get_customer_status(
customer_id: str,
ctx: FunctionInvocationContext,
) -> str:
tenant_id = ctx.kwargs["tenant_id"]
session_id = ctx.session.session_id if ctx.session else "none"
return f"{tenant_id}:{customer_id} in session {session_id}"
agent = GitHubCopilotAgent(tools=[get_customer_status])
session = agent.create_session()
async with agent:
result = await agent.run(
"Check customer 123.",
session=session,
function_invocation_kwargs={"tenant_id": "contoso"},
)
Такое же перенаправление контекста применяется к потоковым запускам и восстановленным сеансам Copilot. Средства без параметра контекста сохраняют существующее поведение.
Потоковая передача ответов
Получите ответы по мере их создания для лучшего взаимодействия с пользователем:
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 для интерактивных приглашений в асинхронных обработчиках, чтобы избежать блокировки цикла событий.
Утверждение инструмента
Поскольку GitHub Copilot SDK управляет циклом вызова инструментов, подтверждение для пользовательских инструментов-функций обеспечивается через встроенный в SDK хук, срабатывающий перед выполнением, а не через стандартный цикл согласования в Agent Framework. Когда вы регистрируете инструмент, объявленный с помощью approval_mode="always_require", и не предоставляете собственный on_pre_tool_use hook, агент устанавливает hook по умолчанию, который возвращает "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_post_tool_use или on_session_start, остаются активными вместе с хуком подтверждения по умолчанию. Только хук on_pre_tool_use, предоставленный вызывающей стороной, заменяет хук подтверждения по умолчанию.
Предупреждение
Если вы предоставляете собственный 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
| инструмент | Статус | Notes |
|---|---|---|
| Средства функций | ✅ | Стандартные вызываемые объекты 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.26 или более поздней версии.
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
| инструмент | Статус | Notes |
|---|---|---|
| Средства функций | ✅ | Стандартные экземпляры 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 и поддерживает все стандартные операции агента.
Дополнительные сведения о запуске и взаимодействии с агентами см. в руководствах по началу работы агента.