Подключите GitHub Copilot CLI к конечной точке логического вывода Windows Server

GitHub Copilot CLI — это ИИ-кодный агент, который может отправлять запросы на модель от поддерживаемого клиента Windows на совместимую с OpenAI конечную точку вывода, размещённую на Windows Server. Эта конфигурация позволяет использовать модель, размещённую в организации, из вашего терминала, в то время как Windows Server централизует хостинг и вычислительные вычисления.

В этой статье показано, как настроить клиентское соединение и проверить, что настроенная модель отвечает. Он не развёртает и не защищает службу вывода.

Prerequisites

  • Клиентский компьютер, на котором установлена поддерживаемая GitHub Copilot CLI версия Windows, с:
  • Активная GitHub Copilot подписка. Если организация или предприятие предоставляет вашу подписку, её администратор должен разрешить GitHub Copilot CLI.
  • Надёжный рабочий каталог для запуска GitHub Copilot CLI.
  • Существующая совместимая с OpenAI конечная точка на Windows Server, которая:
    • Доступен с клиентского компьютера.
    • Требуется проверка подлинности. Эта процедура применяется к удалёным соединениям Windows Server. Резервируйте эндпоинты без аутентификации только для сценариев с loopback-интерфейсом за пределами этой процедуры.
    • Прослушивается только на сетевом интерфейсе заданного сервера, разрешает входящие соединения только с авторизованных клиентских компьютеров или подсетей и не принимает прямые подключения из публичного интернета.
    • Поддерживает стриминг и вызов инструментов или функций. Совместимость с OpenAI сама по себе не гарантирует поддержку всех возможностей CLI GitHub Copilot. Проверьте возможности конечной точки и выбранной модели с оператором конечной точки.
  • Сетевое соединение между клиентом Windows и сервером Windows со следующими характеристиками:
    • DNS-имя для конечной точки вывода Windows Server, которая разрешается с клиентского компьютера.
    • Сетевой маршрут и правила межсетевого экрана, позволяющие подключаться только авторизованным клиентам или подсетям к порту конечной точки.
    • HTTPS-сертификат, которому клиент доверяет и чьё имя субъекта или альтернативное имя субъекта совпадает с именем DNS конечной точки.
  • Базовый URL-адрес конечной точки, например https://inference.contoso.com/v1.
  • Тип учетных данных и аутентификации конечной точки, который указывает оператор конечной точки.

Установка GitHub Copilot CLI

  1. Откройте PowerShell.

  2. Установите стабильный пакет GitHub Copilot CLI:

    winget install GitHub.Copilot
    
  3. Убедитесь, что установка прошла успешно:

    copilot --version
    

    Команда возвращает установленную версию GitHub Copilot CLI.

Получите идентификатор модели из конечной точки вывода Windows Server

  1. Задайте базовый URL, который предоставил оператор конечной точки:

    $BaseUrl = 'https://inference.contoso.com/v1'
    
  2. Введите ключ API или токен носителя, который указывает оператор конечной точки. Используйте кратковременный, наименее привилегированный учётный код. Когда в вашей организации предусмотрена утверждённая команда для работы с хранилищем секретов, используйте её, чтобы получить учётные данные, вместо того чтобы вводить их вручную. Следующая команда преобразует значение SecureString в открытый текст $endpointCredential , который остаётся в памяти для этой сессии PowerShell.

    $secureEndpointCredential = Read-Host 'Enter the endpoint credential' -AsSecureString
    $endpointCredential = [System.Net.NetworkCredential]::new('', $secureEndpointCredential).Password
    
  3. Отправьте GET запрос на $BaseUrl/models. Включите $endpointCredential в Authorization: Bearer заголовок и прочитайте каждый ID модели из массива data ответа:

    $requestParameters = @{
       Uri = "$BaseUrl/models"
       Method = 'Get'
    }
    
    try {
       $requestParameters.Headers = @{ Authorization = "Bearer $endpointCredential" }
       $models = Invoke-RestMethod @requestParameters
       $models.data | Select-Object -ExpandProperty id
    }
    finally {
       $requestParameters.Headers = $null
    }
    

    Команда возвращает один или несколько идентификаторов моделей. Скопируйте точный идентификатор модели, поддерживающей потоковую трансляцию и вызов инструментов или функций.

Настройте поставщика и модель CLI GitHub Copilot

  1. Установите для $BaseUrl базовый URL конечной точки Windows Server, а для $endpointCredential — её ключ API или токен bearer. В той же сессии PowerShell укажите тип провайдера, базовый URL конечной точки и точный идентификатор модели. Замените <MODEL_ID> на ID, который возвращает конечная точка Windows Server.

    $env:COPILOT_PROVIDER_TYPE = 'openai'
    $env:COPILOT_PROVIDER_BASE_URL = $BaseUrl
    $env:COPILOT_MODEL = '<MODEL_ID>'
    

    Тип провайдера openai поддерживает конечные точки, совместимые с OpenAI, включая vLLM.

  2. Удалите все переменные аутентификации провайдера, которые унаследовала текущая сессия PowerShell:

    Remove-Item Env:COPILOT_PROVIDER_API_KEY, Env:COPILOT_PROVIDER_BEARER_TOKEN, Env:COPILOT_PROVIDER_API_KEY_COMMAND -ErrorAction SilentlyContinue
    
  3. Настройте метод аутентификации, указанный оператором конечной точки:

    • Для стандартной аутентификации API-ключа OpenAI используйте одобренную организацией команду секретного хранилища, когда она доступна:

      $env:COPILOT_PROVIDER_API_KEY_COMMAND = '<APPROVED_SECRET_STORE_COMMAND>'
      

      Команда должна извлечь учетные данные из одобренного хранилища секретов, вывести только их и не записывать их в журнал и не сохранять. COPILOT_PROVIDER_API_KEY_COMMAND имеет больший приоритет, чем COPILOT_PROVIDER_API_KEY.

    • Если одобренная команда secret-store недоступна, установите ключ API напрямую как кратковременный запасной вариант для текущей сессии PowerShell:

      $env:COPILOT_PROVIDER_API_KEY = $endpointCredential
      
    • Для аутентификации токена носителя установите токен носителя:

      $env:COPILOT_PROVIDER_BEARER_TOKEN = $endpointCredential
      

    Important

    Не добавляйте API-ключи в скрипты, систему контроля версий или примеры команд. copilot и любые процессы, которые он запускает, наследуют переменные среды аутентификации провайдера. Используйте кратковременные, наименее привилегированные учетные данные и удаляйте переменные после выхода из GitHub Copilot CLI.

  4. Ознакомьтесь с поддерживаемыми переменными провайдера в вашей установленной версии:

    copilot help providers
    

Запустите и проверьте GitHub Copilot CLI

  1. Переключитесь на папку, чьи файлы вы доверяете:

    Set-Location 'C:\path\to\trusted-project'
    

Important

Если вы остановились до начала copilotили предыдущая команда не работает, удалите аутентификационные переменные провайдера, очистите заголовки запроса и устраните защищённые учетные данные перед закрытием PowerShell:

if ($requestParameters) {
   $requestParameters.Headers = $null
}

Remove-Item Env:COPILOT_PROVIDER_API_KEY, Env:COPILOT_PROVIDER_BEARER_TOKEN, Env:COPILOT_PROVIDER_API_KEY_COMMAND -ErrorAction SilentlyContinue

if ($secureEndpointCredential) {
   $secureEndpointCredential.Dispose()
}

Закройте сеанс PowerShell после завершения очистки. Неизменяемая строка открытого текста $endpointCredential остаётся в памяти до окончания процесса.

  1. Запустите GitHub Copilot CLI и выполните этапы верификации в блокеtry, чтобы PowerShell удалял переменные среды аутентификации провайдера и устранял значение SecureString при выходе или невыполнении команды:

    try {
       copilot
    }
    finally {
       if ($requestParameters) {
          $requestParameters.Headers = $null
       }
    
       Remove-Item Env:COPILOT_PROVIDER_API_KEY, Env:COPILOT_PROVIDER_BEARER_TOKEN, Env:COPILOT_PROVIDER_API_KEY_COMMAND -ErrorAction SilentlyContinue
    
       if ($secureEndpointCredential) {
          $secureEndpointCredential.Dispose()
       }
    }
    
  2. Подтвердите запрос о доверенном каталоге. Доверяйте этому каталогу в дальнейшем, только если вы контролируете его содержимое и рассчитываете, что он и дальше будет оставаться доверенным.

  3. Если GitHub Copilot CLI подспрашивает, введите /login и следуйте инструкциям для аутентификации в GitHub. Аутентификация GitHub не связана с ключом API, который используется для аутентификации на конечной точке инференса.

  4. Вводите этот тестовый запрос:

    Reply with exactly: Local inference test succeeded
    

    Настроенная модель на конечной точке Windows Server возвращает Local inference test succeeded без ошибок, связанных с провайдером, аутентификацией или совместимостью модели. После выхода из GitHub Copilot CLI PowerShell выполняет блок finally. PowerShell не может надёжно стереть неизменяемую строку открытого текста $endpointCredential из памяти, поэтому закройте сессию PowerShell после завершения команды, чтобы освободить память процесса.

Устранение неполадок при подключении GitHub Copilot CLI к конечной точке вывода на Windows Server

Проблема Что требуется проверить
Запрос модели не может достичь конечной точки Проверьте базовый URL конечной точки, разрешение DNS, порт, маршрут сети, статус сервиса и доверие к сертификату TLS. Базовый URL должен включать префикс API, который предоставляет оператор конечной точки, например /v1.
Модели запрашивают возвраты 401 или 403 Убедитесь, что учетные данные действительны. Для аутентификации с помощью API-ключа используйте COPILOT_PROVIDER_API_KEY_COMMAND с утверждённой командой для хранилища секретов. Используйте COPILOT_PROVIDER_API_KEY только как кратковременный запасной вариант. Для аутентификации с токеном носителя установите COPILOT_PROVIDER_BEARER_TOKEN, как указывает оператор конечной точки.
GitHub Copilot CLI использует другого провайдера или модель Задайте тип провайдера, базовый URL, модель и выбранную переменную аутентификации в той же сессии PowerShell, которая запускается copilot. Используйте точный идентификатор модели, который возвращает конечная точка. Также проверьте $HOME\.copilot\providers.json; объявления провайдера или модели этого файла имеют приоритет над переменными COPILOT_PROVIDER_* .
GitHub Copilot CLI не может найти модель Запросите $BaseUrl/models снова и сравните COPILOT_MODEL значение с id результатом, которое приносит конечная точка, включая заглавные буквы и пунктуацию.
Промпт завершается сбоем после того, как конечная точка принимает запрос Убедитесь, что модель и конечная точка поддерживают как стриминг, так и вызов инструментов или функций. Проверьте журналы конечных точек на наличие неподдерживаемого поля запроса, схемы инструмента, ограничения контекста или формата ответа.