Conecta la CLI de GitHub Copilot a un endpoint de inferencia de Windows Server

GitHub Copilot CLI es un agente de programación con IA que puede enviar solicitudes al modelo desde un cliente de Windows compatible a un extremo de inferencia compatible con OpenAI alojado en Windows Server. Esta configuración te permite usar un modelo alojado en la organización desde tu terminal, mientras que Windows Server centraliza el alojamiento y el cálculo del modelo.

Este artículo te muestra cómo configurar la conexión del cliente y verificar que el modelo configurado responde. No despliega ni asegura el servicio de inferencia.

Prerequisites

  • Un ordenador cliente que ejecuta una versión de Windows que soporta la CLI de GitHub Copilot, con:
  • Una suscripción de GitHub Copilot activa. Si una organización o empresa proporciona tu suscripción, su administrador debe permitir la CLI de GitHub Copilot.
  • Un directorio de trabajo confiable desde el que iniciar la CLI de GitHub Copilot.
  • Un endpoint compatible con OpenAI existente en Windows Server que:
    • Es accesible desde el ordenador cliente.
    • Requiere autenticación. Este procedimiento se aplica a conexiones remotas de Windows Server. Reserve los puntos de conexión sin autenticación para escenarios exclusivos de bucle local fuera de este procedimiento.
    • Solo escucha en la interfaz de red del servidor prevista, permite conexiones entrantes solo desde ordenadores o subredes clientes autorizados, y no acepta conexiones directas desde internet público.
    • Soporta streaming y llamadas a herramientas o funciones. La compatibilidad con OpenAI por sí sola no garantiza soporte para todas las capacidades de CLI de GitHub Copilot. Verifica las capacidades del endpoint y del modelo seleccionado con el operador del endpoint.
  • Una conexión de red entre un cliente Windows y un servidor Windows que tiene:
    • Un nombre DNS para el endpoint de inferencia de Windows Server que se resuelve desde el ordenador cliente.
    • Una ruta de red y reglas de cortafuegos que permiten solo a clientes autorizados o subredes conectarse al puerto del endpoint.
    • Un certificado HTTPS en el que el cliente confía y cuyo nombre de sujeto o nombre alternativo coincide con el nombre DNS del endpoint.
  • La URL base del endpoint, como https://inference.contoso.com/v1.
  • La credencial y el tipo de autenticación del endpoint especificados por el operador del endpoint.

Instalar la CLI de GitHub Copilot

  1. Abra PowerShell.

  2. Instala el paquete CLI estable de GitHub Copilot:

    winget install GitHub.Copilot
    
  3. Confirma que la instalación ha sido exitosa:

    copilot --version
    

    El comando devuelve la versión instalada de GitHub Copilot CLI.

Obtén un ID de modelo desde el endpoint de inferencia de Windows Server

  1. Establece la URL base que proporcionó el operador del endpoint:

    $BaseUrl = 'https://inference.contoso.com/v1'
    
  2. Introduce la clave API o el token portador que especifique el operador del endpoint. Utiliza una credencial de corta duración y de menor privilegio. Cuando tu organización proporcione un comando aprobado para la tienda secreta, úsalo para recuperar la credencial en lugar de introducirla directamente. El siguiente comando convierte el SecureString valor en el valor del texto $endpointCredential plano, que permanece en memoria para esta sesión de PowerShell.

    $secureEndpointCredential = Read-Host 'Enter the endpoint credential' -AsSecureString
    $endpointCredential = [System.Net.NetworkCredential]::new('', $secureEndpointCredential).Password
    
  3. Envía una GET solicitud a $BaseUrl/models. Incluye $endpointCredential en un encabezado Authorization: Bearer y lee cada ID de modelo de la matriz data de la respuesta:

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

    El comando devuelve uno o más IDs de modelo. Copia el ID exacto de un modelo que soporta streaming y llamada a herramientas o funciones.

Configura el proveedor y modelo de CLI de GitHub Copilot

  1. Configura $BaseUrl como la URL base del endpoint de Windows Server y $endpointCredential como su clave de API o token de portador. En la misma sesión de PowerShell, establece el tipo de proveedor, la URL base del endpoint y el ID exacto del modelo. Sustituye <MODEL_ID> por un ID que devuelva el endpoint de Windows Server.

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

    El openai tipo de proveedor soporta endpoints compatibles con OpenAI, incluido vLLM.

  2. Borra cualquier variable de autenticación del proveedor que haya heredado la sesión actual de PowerShell:

    Remove-Item Env:COPILOT_PROVIDER_API_KEY, Env:COPILOT_PROVIDER_BEARER_TOKEN, Env:COPILOT_PROVIDER_API_KEY_COMMAND -ErrorAction SilentlyContinue
    
  3. Configura el método de autenticación que especificó el operador del endpoint:

    • Para la autenticación estándar de la clave API de OpenAI, utiliza un comando secret-store aprobado por la organización siempre que haya uno disponible:

      $env:COPILOT_PROVIDER_API_KEY_COMMAND = '<APPROVED_SECRET_STORE_COMMAND>'
      

      El comando debe recuperar la credencial de un almacén secreto aprobado, generar solo la credencial y no registrarla ni persistirla. COPILOT_PROVIDER_API_KEY_COMMAND tiene prioridad sobre COPILOT_PROVIDER_API_KEY.

    • Si no hay disponible ningún comando aprobado para el almacén de secretos, establece la clave de API directamente como alternativa temporal para la sesión actual de PowerShell:

      $env:COPILOT_PROVIDER_API_KEY = $endpointCredential
      
    • Para la autenticación mediante bearer token, configura el bearer token:

      $env:COPILOT_PROVIDER_BEARER_TOKEN = $endpointCredential
      

    Importante

    No pongas claves API en scripts, control de versiones ni ejemplos de comandos. copilot y cualquier proceso que inicie hereda variables del entorno de autenticación del proveedor. Utiliza credenciales de corta duración y con el menor privilegio, y elimina las variables después de salir de la CLI de GitHub Copilot.

  4. Revisa las variables de proveedor soportadas en tu versión instalada:

    copilot help providers
    

Inicia y verifica la CLI de GitHub Copilot

  1. Cambia a un directorio cuyos archivos confías:

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

Importante

Si paras antes de empezar copilot, o falla un comando anterior, elimina las variables de autenticación del proveedor, borra las cabeceras de la solicitud y elimina la credencial segura antes de cerrar 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()
}

Cierra la sesión de PowerShell después de que se ejecute la limpieza. La cadena de texto $endpointCredential plano inmutable permanece en memoria hasta que el proceso termina.

  1. Inicia la CLI de GitHub Copilot y ejecuta los pasos de verificación en un try bloque para que PowerShell elimine las variables del entorno de autenticación del proveedor y elimine el SecureString valor cuando cierras o falle el comando:

    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. Confirma el aviso del directorio de confianza. Confía en el directorio para futuras sesiones solo si controlas su contenido y esperas que siga siendo confiable.

  3. Si la CLI de GitHub Copilot te lo indica, introduce /login y sigue las instrucciones para autenticarte en GitHub. La autenticación en GitHub es independiente de la clave API que autentica el endpoint de inferencia.

  4. Introduce este mensaje de prueba:

    Reply with exactly: Local inference test succeeded
    

    El modelo configurado en el endpoint de Windows Server devuelve Local inference test succeeded sin error de proveedor, autenticación ni compatibilidad de modelo. Después de salir de la CLI de GitHub Copilot, PowerShell ejecuta el finally bloque. PowerShell no puede borrar de forma fiable la cadena de texto $endpointCredential plano inmutable de la memoria, así que cierra la sesión de PowerShell después de que termine el comando para liberar la memoria del proceso.

Solucionar el problema de las conexiones CLI de GitHub Copilot a un punto final de inferencia de Windows Server

Problema Elementos que se deben comprobar
La solicitud de modelos no puede llegar al endpoint Verifica la URL base del endpoint, la resolución DNS, el puerto, la ruta de red, el estado del servicio y la confianza del certificado TLS. La URL base debe incluir el prefijo API que proporciona el operador de endpoint, como /v1.
Los modelos solicitan retornos 401 o 403 Verifica que la credencial sea válida. Para la autenticación por clave API, prefiero COPILOT_PROVIDER_API_KEY_COMMAND con un comando de almacenamiento secreto aprobado. Utiliza COPILOT_PROVIDER_API_KEY solo como solución provisional de corta duración. Para la autenticación mediante bearer token, configure COPILOT_PROVIDER_BEARER_TOKEN según especifique el operador del punto de conexión.
La CLI de GitHub Copilot utiliza un proveedor o modelo diferente Establezca el tipo de proveedor, la URL base, el modelo y la variable de autenticación seleccionada en la misma sesión de PowerShell que inicia copilot. Utiliza el ID exacto del modelo que devuelve el endpoint. También comprueba $HOME\.copilot\providers.json; las declaraciones de proveedor o modelo de ese archivo tienen prioridad sobre las COPILOT_PROVIDER_* variables.
La CLI de GitHub Copilot no encuentra el modelo Consulta $BaseUrl/models de nuevo y compara el valor COPILOT_MODEL con el valor id que devuelve el extremo, incluidas las mayúsculas y la puntuación.
El prompt falla después de que el endpoint acepta la solicitud Confirma que el modelo y el endpoint soportan tanto streaming como llamada a herramientas o funciones. Revisa los registros de endpoint para detectar un campo de solicitud, esquema de herramienta, límite de contexto o formato de respuesta no soportado.