Ligue a CLI do GitHub Copilot a um endpoint de inferência do Windows Server

O GitHub Copilot CLI é um agente de codificação de IA que pode enviar pedidos de modelo de um cliente Windows suportado para um endpoint de inferência compatível com OpenAI alojado no Windows Server. Esta configuração permite-lhe usar um modelo alojado na organização a partir do seu terminal, enquanto o Windows Server centraliza o alojamento e computação do modelo.

Este artigo mostra-lhe como configurar a ligação ao cliente e verificar se o modelo configurado responde. Não implementa nem segura o serviço de inferência.

Prerequisites

  • Um computador cliente que executa uma versão do Windows suportada pela CLI do GitHub Copilot, com:
  • Uma subscrição ativa do GitHub Copilot. Se uma organização ou empresa fornecer a sua subscrição, o seu administrador deve permitir a CLI do GitHub Copilot.
  • Um diretório funcional de confiança a partir do qual iniciar a CLI do GitHub Copilot.
  • Um endpoint compatível com OpenAI existente no Windows Server que:
    • É acessível a partir do computador cliente.
    • Requer autenticação. Este procedimento aplica-se a ligações remotas ao Windows Server. Reserve endpoints sem autenticação para cenários exclusivamente de loopback fora deste procedimento.
    • Escuta apenas na interface de rede do servidor pretendida, permite ligações de entrada apenas a partir de computadores clientes autorizados ou sub-redes, e não aceita ligações diretas da internet pública.
    • Suporta transmissão em fluxo e invocação de ferramentas ou de funções. A compatibilidade OpenAI por si só não garante suporte para todas as capacidades CLI do GitHub Copilot. Verifique as capacidades do endpoint e do modelo selecionado com o operador do endpoint.
  • Uma ligação de rede entre um cliente Windows e um Windows Server que tem:
    • Um nome DNS para o ponto final de inferência do Windows Server que possa ser resolvido a partir do computador cliente.
    • Uma rota de rede e regras de firewall que permitem apenas a clientes ou sub-redes autorizados estabelecer ligação à porta do endpoint.
    • Um certificado HTTPS em que o cliente confia e cujo nome do titular ou nome alternativo do titular corresponde ao nome DNS do ponto final.
  • A URL de base do endpoint, como https://inference.contoso.com/v1.
  • A credencial de acesso e o tipo de autenticação especificados pelo operador do endpoint.

Instalar a CLI do GitHub Copilot

  1. Abra o PowerShell.

  2. Instala o pacote estável de CLI do GitHub Copilot:

    winget install GitHub.Copilot
    
  3. Confirme que a instalação foi bem-sucedida:

    copilot --version
    

    O comando devolve a versão instalada da CLI do GitHub Copilot.

Obtenha um ID de modelo do endpoint de inferência do Windows Server

  1. Defina a URL base que o operador do endpoint forneceu:

    $BaseUrl = 'https://inference.contoso.com/v1'
    
  2. Introduza a chave da API ou o token bearer que o operador do endpoint especifica. Use uma credencial de curta duração e de menor privilégio. Quando a sua organização fornece um comando de armazenamento secreto aprovado, utilize-o para recuperar a credencial em vez de a introduzir diretamente. O comando seguinte converte o SecureString valor para o valor do texto $endpointCredential simples, que permanece na memória para esta sessão PowerShell.

    $secureEndpointCredential = Read-Host 'Enter the endpoint credential' -AsSecureString
    $endpointCredential = [System.Net.NetworkCredential]::new('', $secureEndpointCredential).Password
    
  3. Envie um GET pedido para $BaseUrl/models. Inclua $endpointCredential num Authorization: Bearer cabeçalho e leia cada ID de modelo do array da data resposta:

    $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
    }
    

    O comando devolve um ou mais IDs de modelo. Copie o ID exato de um modelo que suporta streaming e chamada de ferramentas ou funções.

Configure o fornecedor e modelo da CLI do GitHub Copilot

  1. Defina $BaseUrl como a URL de base do endpoint do Windows Server e $endpointCredential como a chave da API ou o token de portador. Na mesma sessão PowerShell, defina o tipo de fornecedor, a URL base do endpoint e o ID exato do modelo. Substitua <MODEL_ID> por um ID que o endpoint do Windows Server devolva.

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

    O openai tipo de fornecedor suporta endpoints compatíveis com OpenAI, incluindo vLLM.

  2. Eliminar quaisquer variáveis de autenticação do fornecedor que a sessão atual do PowerShell tenha herdado:

    Remove-Item Env:COPILOT_PROVIDER_API_KEY, Env:COPILOT_PROVIDER_BEARER_TOKEN, Env:COPILOT_PROVIDER_API_KEY_COMMAND -ErrorAction SilentlyContinue
    
  3. Configure o método de autenticação que o operador do endpoint especificou:

    • Para autenticação padrão com chave API OpenAI, utilize um comando secret-store aprovado pela organização sempre que estiver disponível:

      $env:COPILOT_PROVIDER_API_KEY_COMMAND = '<APPROVED_SECRET_STORE_COMMAND>'
      

      O comando deve recuperar a credencial de um armazenamento secreto aprovado, gerar apenas a credencial e não a registar nem persistir. COPILOT_PROVIDER_API_KEY_COMMAND tem precedência sobre COPILOT_PROVIDER_API_KEY.

    • Se não houver um comando secret-store aprovado disponível, defina a chave API diretamente como um recurso alternativo de curta duração para a sessão atual do PowerShell:

      $env:COPILOT_PROVIDER_API_KEY = $endpointCredential
      
    • Para autenticação do token de portador, defina o token de portador:

      $env:COPILOT_PROVIDER_BEARER_TOKEN = $endpointCredential
      

    Importante

    Não coloques chaves API em scripts, controlo de versões ou exemplos de comandos. copilot e quaisquer processos que inicie herdam variáveis do ambiente de autenticação do fornecedor. Use credenciais de curta duração, com privilégios mínimos, e remova as variáveis depois de sair da CLI do GitHub Copilot.

  4. Revise as variáveis do fornecedor suportadas na sua versão instalada:

    copilot help providers
    

Inicia e verifica a CLI do GitHub Copilot

  1. Mude para um diretório cujos ficheiros confia:

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

Importante

Se parar antes de começar copilot, ou se um comando anterior falhar, remova as variáveis de autenticação do fornecedor, limpe os cabeçalhos dos pedidos e elimine a credencial segura antes de fechar o 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()
}

Fecha a sessão PowerShell depois de a limpeza ser executada. A cadeia de texto $endpointCredential simples imutável permanece na memória até ao fim do processo.

  1. Inicie a CLI do GitHub Copilot e execute os passos de verificação num try bloco para que o PowerShell remova variáveis do ambiente de autenticação do fornecedor e elimine o SecureString valor quando sair ou quando o comando falhar:

    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. Confirme a mensagem de diretório de confiança. Confie no diretório para sessões futuras apenas se controlar o seu conteúdo e esperar que continue a ser confiável.

  3. Se o CLI do GitHub Copilot te pedir, introduza /login e siga as instruções para autenticar no GitHub. A autenticação no GitHub é separada da chave API que autentica o endpoint de inferência.

  4. Introduza este pedido de teste:

    Reply with exactly: Local inference test succeeded
    

    O modelo configurado no endpoint do Windows Server devolve Local inference test succeeded sem erro de fornecedor, autenticação ou compatibilidade de modelo. Depois de sair da CLI do GitHub Copilot, o PowerShell executa o bloco finally. O PowerShell não consegue apagar de forma fiável a cadeia de texto $endpointCredential simples imutável da memória, por isso fecha a sessão do PowerShell após o comando terminar para libertar a memória do processo.

Resolução de problemas das ligações entre a CLI do GitHub Copilot e um ponto final de inferência no Windows Server

Problema O que deve verificar
O pedido de modelos não consegue chegar ao endpoint Verifique a URL base do endpoint, resolução DNS, porta, rota de rede, estado do serviço e confiança do certificado TLS. A URL base deve incluir o prefixo da API que o operador do endpoint fornece, como /v1.
Os modelos solicitam retornos 401 ou 403 Verifique se a credencial é válida. Para autenticação por chave API, prefira COPILOT_PROVIDER_API_KEY_COMMAND usar um comando secret-store aprovado. Utiliza COPILOT_PROVIDER_API_KEY apenas como alternativa temporária. Para autenticação por token portador, defina COPILOT_PROVIDER_BEARER_TOKEN, conforme especificado pelo operador endpoint.
A CLI do GitHub Copilot utiliza um fornecedor ou modelo diferente Defina o tipo de fornecedor, URL base, modelo e variável de autenticação selecionada na mesma sessão PowerShell que inicia copilot. Use o ID exato do modelo que o endpoint devolve. Verifique $HOME\.copilot\providers.jsontambém ; as declarações do fornecedor ou modelo desse ficheiro têm precedência sobre as COPILOT_PROVIDER_* variáveis.
A CLI do GitHub Copilot não consegue encontrar o modelo Volte a consultar $BaseUrl/models e compare o COPILOT_MODEL valor com o id valor que o endpoint devolve, incluindo capitalização e pontuação.
O prompt falha depois de o endpoint aceitar o pedido Confirme que o modelo e o endpoint suportam tanto streaming como chamada de ferramentas ou funções. Verifique os registos do endpoint para identificar um campo do pedido não suportado, um esquema da ferramenta, um limite de contexto ou um formato de resposta.