Verbinde GitHub Copilot CLI mit einem Windows Server-Inferenz-Endpunkt

GitHub Copilot CLI ist ein KI-Codierungsagent, der Modellanfragen von einem unterstützten Windows-Client an einen OpenAI-kompatiblen Inferenzendpunkt senden kann, der auf Windows Server gehostet wird. Mit dieser Konfiguration können Sie ein organisationsgehostetes Modell von Ihrem Terminal aus verwenden, während Windows Server das Hosting und die Berechnung zentralisiert.

Dieser Artikel zeigt Ihnen, wie Sie die Client-Verbindung konfigurieren und überprüfen, ob das konfigurierte Modell reagiert. Er implementiert oder sichert den Inferenzdienst nicht.

Prerequisites

  • Ein Client-Computer, der eine Windows-Version ausführt, die von GitHub Copilot CLI unterstützt wird, mit:
  • Ein aktives GitHub Copilot-Abonnement. Wenn eine Organisation oder ein Unternehmen Ihr Abonnement bereitstellt, muss der Administrator GitHub Copilot CLI erlauben.
  • Ein vertrauenswürdiges Arbeitsverzeichnis, aus dem man GitHub Copilot CLI starten kann.
  • Ein bestehender, OpenAI-kompatibler Endpunkt auf Windows Server, der:
    • Ist vom Client-Computer aus erreichbar.
    • Erfordert Authentifizierung. Dieses Verfahren gilt für entfernte Windows Server-Verbindungen. Reservieren Sie Endpunkte ohne Authentifizierung für Loopback-Szenarien außerhalb dieses Verfahrens.
    • Hört nur auf der vorgesehenen Server-Netzwerkschnittstelle, erlaubt eingehende Verbindungen nur von autorisierten Client-Computern oder Subnetzen und akzeptiert keine direkten Verbindungen aus dem öffentlichen Internet.
    • Unterstützt Streaming sowie Tool- oder Funktionsaufrufe. OpenAI-Kompatibilität allein garantiert nicht die Unterstützung für jede GitHub Copilot-CLI-Funktionalität. Überprüfen Sie die Endpunkt- und ausgewählten Modellfähigkeiten mit dem Endpunkt-Operator.
  • Eine Windows-Client-zu-Windows-Server-Netzwerkverbindung mit den folgenden Eigenschaften:
    • Ein DNS-Name für den Windows Server-Inferenz-Endpunkt, der vom Client-Computer aus aufgelöst wird.
    • Eine Netzwerkroute und Firewall-Regeln, die es nur autorisierten Clients oder Subnetzen erlauben, sich mit dem Endpunktport zu verbinden.
    • Ein HTTPS-Zertifikat, dem der Client vertraut und dessen Subjekt-Name oder Subjekt-Alternativname mit dem DNS-Namen des Endpunkts übereinstimmt.
  • Die Endpunktbasis-URL, wie zum Beispiel https://inference.contoso.com/v1.
  • Die Anmeldeinformationen des Endpunkts und der Authentifizierungstyp, die vom Endpunktoperator angegeben werden.

Installieren Sie GitHub Copilot CLI

  1. Öffnen Sie PowerShell.

  2. Installiere das stabile GitHub Copilot CLI-Paket:

    winget install GitHub.Copilot
    
  3. Bestätigen Sie, dass die Installation erfolgreich ist:

    copilot --version
    

    Der Befehl liefert die installierte GitHub Copilot CLI-Version zurück.

Erhalten Sie eine Modell-ID vom Windows Server-Inferenz-Endpunkt

  1. Setzen Sie die Basis-URL, die der Endpunktoperator bereitgestellt hat:

    $BaseUrl = 'https://inference.contoso.com/v1'
    
  2. Geben Sie den API-Schlüssel oder Trägertoken ein, den der Endpunktoperator angibt. Verwenden Sie eine kurzlebige, am wenigsten privilegierte Berechtigung. Wenn Ihre Organisation einen genehmigten Secret-Store-Befehl bereitstellt, verwenden Sie diesen, um die Zugangsdaten abzurufen, anstatt sie direkt einzugeben. Der folgende Befehl wandelt den SecureString Wert in den Klartextwert $endpointCredential um, der für diese PowerShell-Sitzung im Speicher bleibt.

    $secureEndpointCredential = Read-Host 'Enter the endpoint credential' -AsSecureString
    $endpointCredential = [System.Net.NetworkCredential]::new('', $secureEndpointCredential).Password
    
  3. Senden Sie eine GET Anfrage an $BaseUrl/models. Fügen Sie Authorization: Bearer in einen $endpointCredential-Header ein und lesen Sie jede Modell-ID aus dem data-Array der Antwort:

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

    Der Befehl liefert eine oder mehrere Modell-IDs zurück. Kopiere die exakte ID eines Modells, das Streaming sowie Tool- oder Funktionsaufrufe unterstützt.

Konfigurieren Sie den GitHub Copilot CLI-Anbieter und das Modell

  1. Setzen Sie $BaseUrl auf die Basis-URL des Windows-Server-Endpunkts und $endpointCredential auf dessen API-Schlüssel oder Bearer-Token. In derselben PowerShell-Sitzung setzen Sie den Providertyp, die Endpunkt-Basis-URL und die exakte Modell-ID. Ersetze <MODEL_ID> sie durch eine ID, die der Windows Server-Endpunkt zurückgibt.

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

    Der Anbietertyp openai unterstützt OpenAI-kompatible Endpunkte, einschließlich vLLM.

  2. Löschen Sie alle Provider-Authentifizierungsvariablen, die die aktuelle PowerShell-Sitzung geerbt hat:

    Remove-Item Env:COPILOT_PROVIDER_API_KEY, Env:COPILOT_PROVIDER_BEARER_TOKEN, Env:COPILOT_PROVIDER_API_KEY_COMMAND -ErrorAction SilentlyContinue
    
  3. Konfigurieren Sie die vom Endpunkt-Operator angegebene Authentifizierungsmethode:

    • Für die Standard-OpenAI-API-Schlüssel-Authentifizierung verwenden Sie einen von der Organisation genehmigten Secret-Store-Befehl, wann immer einer verfügbar ist:

      $env:COPILOT_PROVIDER_API_KEY_COMMAND = '<APPROVED_SECRET_STORE_COMMAND>'
      

      Der Befehl muss die Zugangsdaten aus einem genehmigten geheimen Speicher abrufen, nur die Zugangsdaten ausgeben und sie nicht protokollieren oder speichern. COPILOT_PROVIDER_API_KEY_COMMAND hat Vorrang vor COPILOT_PROVIDER_API_KEY.

    • Wenn kein genehmigter Secret-Store-Befehl verfügbar ist, setzen Sie den API-Schlüssel direkt als kurzlebigen Fallback für die aktuelle PowerShell-Sitzung:

      $env:COPILOT_PROVIDER_API_KEY = $endpointCredential
      
    • Für die Inhaber-Token-Authentifizierung setzen Sie das Inhaber-Token:

      $env:COPILOT_PROVIDER_BEARER_TOKEN = $endpointCredential
      

    Important

    Fügen Sie keine API-Schlüssel in Skripte, Quellcode- oder Befehlsbeispiele ein. copilot und alle Prozesse, die gestartet werden, übernehmen Umgebungsvariablen der Provider-Authentifizierung. Verwenden Sie kurzlebige Anmeldedaten mit geringsten Privilegien und entfernen Sie die Variablen, nachdem Sie die GitHub Copilot CLI verlassen haben.

  4. Überprüfen Sie die unterstützten Provider-Variablen in Ihrer installierten Version:

    copilot help providers
    

Starte und verifiziere GitHub Copilot CLI

  1. Wechsel zu einem Verzeichnis, dessen Dateien du vertraust:

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

Important

Wenn Sie vor dem Start copilotaufhören oder ein früherer Befehl fehlschlägt, entfernen Sie die Provider-Authentifizierungsvariablen, löschen Sie die Anfrage-Header und entsorgen Sie die sichere Zugangsdaten, bevor Sie PowerShell schließen:

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()
}

Schließen Sie die PowerShell-Sitzung, nachdem die Bereinigung ausgeführt ist. Die unveränderliche Klartext-Zeichenkette $endpointCredential bleibt im Speicher, bis der Prozess abgeschlossen ist.

  1. Starte die GitHub Copilot CLI und führe die Verifikationsschritte in einem Block try aus, damit PowerShell die Variablen der Provider-Authentifizierungsumgebung entfernt und den SecureString Wert entsorgt, wenn du beendet oder der Befehl fehlschlägt:

    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. Bestätigen Sie die Eingabeaufforderung für das vertrauenswürdige Verzeichnis. Vertraue dem Verzeichnis für zukünftige Sitzungen nur, wenn du seinen Inhalt kontrollierst und erwartest, dass es weiterhin vertrauenswürdig bleibt.

  3. Wenn Sie von der GitHub Copilot CLI dazu aufgefordert werden, geben Sie /login ein und befolgen Sie die Anweisungen, um sich bei GitHub zu authentifizieren. Die GitHub-Authentifizierung ist unabhängig von dem API-Schlüssel, mit dem die Anfragen an den Inferenz-Endpunkt authentifiziert werden.

  4. Geben Sie diese Testaufforderung ein:

    Reply with exactly: Local inference test succeeded
    

    Das konfigurierte Modell auf dem Windows Server-Endpunkt gibt ohne Provider-, Authentifizierungs- oder Modellkompatibilitätsfehler zurückLocal inference test succeeded. Nachdem du die GitHub Copilot CLI verlassen hast, führt PowerShell den finally Block aus. PowerShell kann die unveränderliche Klartext-Zeichenkette $endpointCredential nicht zuverlässig aus dem Speicher löschen, also schließen Sie die PowerShell-Sitzung nach Abschluss des Befehls, um den Prozessspeicher freizugeben.

Fehlerbehebung von GitHub Copilot-CLI-Verbindungen zu einem Windows Server-Inferenz-Endpunkt

Angelegenheit Was soll überprüft werden?
Die Modellanfrage kann den Endpunkt nicht erreichen Überprüfen Sie die Endpunkt-Basis-URL, DNS-Auflösung, Port, Netzwerkroute, Dienststatus und TLS-Zertifikatsvertrauen. Die Basis-URL sollte das API-Präfix enthalten, das der Endpunkt-Operator bereitstellt, zum Beispiel /v1.
Die Modelle fordern Rückgaben 401 oder 403 Überprüfen Sie, ob die Berechtigung gültig ist. Für die API-Schlüssel-Authentifizierung verwenden Sie vorzugsweise COPILOT_PROVIDER_API_KEY_COMMAND mit einem Befehl für einen genehmigten Geheimnisspeicher. Verwende COPILOT_PROVIDER_API_KEY nur als kurzfristige Notlösung. Für die Bearer-Token-Authentifizierung setzen Sie COPILOT_PROVIDER_BEARER_TOKEN, wie vom Endpunktbetreiber angegeben.
GitHub Copilot CLI verwendet einen anderen Anbieter oder ein anderes Modell Setze den Anbietertyp, die Basis-URL, das Modell und die ausgewählte Authentifizierungsvariable in derselben PowerShell-Sitzung, die startet copilot. Verwenden Sie genau die Modell-ID, die der Endpunkt zurückgibt. Prüfen Sie außerdem $HOME\.copilot\providers.json; die Provider- oder Modell-Deklarationen in dieser Datei haben Vorrang vor den Variablen in COPILOT_PROVIDER_*.
GitHub Copilot CLI kann das Modell nicht finden Fragen Sie $BaseUrl/models erneut ab und vergleichen Sie den COPILOT_MODEL Wert mit dem id Wert, den der Endpunkt zurückgibt, einschließlich Großschreibung und Zeichensetzung.
Der Prompt schlägt fehl, nachdem der Endpunkt die Anfrage akzeptiert hat Bestätigen Sie, dass Modell und Endpunkt sowohl Streaming als auch Werkzeug- oder Funktionsaufrufe unterstützen. Überprüfen Sie die Endpunktprotokolle auf ein nicht unterstütztes Anfragefeld, Werkzeugschema, Kontextlimit oder Antwortformat.