Połącz GitHub Copilot CLI z punktem końcowym inferencji Windows Server

GitHub Copilot CLI to agent kodujący AI, który może wysyłać żądania modelu z obsługiwanego klienta Windows do kompatybilnego z OpenAI endpoint inferencyjnego hostowanego na Windows Server. Ta konfiguracja pozwala korzystać z modelu hostowanego przez organizację z terminala, podczas gdy Windows Server centralizuje hosting i obliczenia modelu.

Ten artykuł pokazuje, jak skonfigurować połączenie klienta i zweryfikować, czy skonfigurowany model reaguje. Nie wdraża ani nie zabezpiecza usługi inferencyjnej.

Prerequisites

  • Komputer kliencki działający na wersji Windows, którą obsługuje GitHub Copilot CLI, z:
  • Aktywna subskrypcja GitHub Copilot. Jeśli organizacja lub przedsiębiorstwo oferuje Twoją subskrypcję, jej administrator musi zezwolić na GitHub Copilot CLI.
  • Zaufany katalog roboczy, z którego można rozpocząć GitHub Copilot CLI.
  • Istniejący punkt końcowy zgodny z OpenAI w systemie Windows Server, który:
    • Jest dostępny z komputera klienta.
    • Wymaga uwierzytelniania. Ta procedura dotyczy zdalnych połączeń Windows Server. Rezerwuj punkty końcowe bez uwierzytelniania wyłącznie dla scenariuszy typu loopback, poza zakresem tej procedury.
    • Nasłuchuje tylko na docelowym interfejsie serwera, zezwala na połączenia przychodzące tylko z autoryzowanych komputerów klienckich lub podsieci i nie akceptuje bezpośrednich połączeń z publicznego internetu.
    • Obsługuje strumieniowanie oraz wywoływanie narzędzi lub funkcji. Sama kompatybilność z OpenAI nie gwarantuje wsparcia dla każdej funkcji GitHub Copilot CLI. Zweryfikowaj punkt końcowy i wybrane możliwości modelu z operatorem końcowym.
  • Połączenie sieciowe z klienta systemu Windows do serwera Windows Server, które ma:
    • Nazwa DNS dla punktu końcowego inferencyjnego Windows Server, który rozstrzyga się z komputera klienckiego.
    • Trasa sieciowa i reguły zapory, które pozwalają na połączenie tylko autoryzowanych klientów lub podsieci z portem końcowego.
    • Certyfikat HTTPS, któremu klient ufa i którego nazwa podmiotu lub alternatywna nazwa podmiotu odpowiada nazwie DNS punktu końcowego.
  • Podstawowy adres URL punktu końcowego, na przykład https://inference.contoso.com/v1.
  • Dane uwierzytelniające i typ uwierzytelniania punktu końcowego, które określa operator końcowy.

Zainstaluj GitHub Copilot CLI

  1. Otwórz program PowerShell.

  2. Zainstaluj stabilny pakiet GitHub Copilot CLI:

    winget install GitHub.Copilot
    
  3. Potwierdź, że instalacja się powiodła:

    copilot --version
    

    Polecenie zwraca zainstalowaną wersję GitHub Copilot CLI.

Uzyskaj identyfikator modelu z endpointu inferencyjnego Windows Server

  1. Ustaw bazowy adres URL podany przez operator końcowy:

    $BaseUrl = 'https://inference.contoso.com/v1'
    
  2. Wprowadź klucz API lub token nośnika, który operator końcowy określa. Użyj krótkotrwałego poświadczenia o najmniejszych uprawnieniach. Gdy Twoja organizacja wyda zatwierdzone polecenie do przechowywania sekretów, użyj go do pobrania poświadczenia zamiast wprowadzać je bezpośrednio. Poniższe polecenie konwertuje wartość SecureString na wartość zwykłego tekstu $endpointCredential, która pozostaje w pamięci w tej sesji programu PowerShell.

    $secureEndpointCredential = Read-Host 'Enter the endpoint credential' -AsSecureString
    $endpointCredential = [System.Net.NetworkCredential]::new('', $secureEndpointCredential).Password
    
  3. Wyślij GET zapytanie do $BaseUrl/models. Umieść Authorization: Bearer w nagłówku $endpointCredential i odczytaj identyfikator każdego modelu z tablicy data w odpowiedzi:

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

    Polecenie zwraca jeden lub więcej identyfikatorów modelu. Skopiuj dokładny identyfikator modelu, który obsługuje streaming oraz wywoływanie narzędzi lub funkcji.

Konfiguruj dostawcę i model CLI GitHub Copilot

  1. Ustaw $BaseUrl na podstawowy adres URL punktu końcowego systemu Windows Server, a $endpointCredential na jego klucz API lub token bearer. W tej samej sesji PowerShell ustaw typ dostawcy, bazowy adres URL punktu końcowego oraz dokładny identyfikator modelu. Zastąp <MODEL_ID> identyfikatorem zwróconym przez punkt końcowy systemu Windows Server.

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

    Typ openai dostawcy obsługuje punkty końcowe kompatybilne z OpenAI, w tym vLLM.

  2. Usuń wszelkie zmienne uwierzytelniające dostawców, które odziedziczyła bieżąca sesja PowerShell:

    Remove-Item Env:COPILOT_PROVIDER_API_KEY, Env:COPILOT_PROVIDER_BEARER_TOKEN, Env:COPILOT_PROVIDER_API_KEY_COMMAND -ErrorAction SilentlyContinue
    
  3. Konfiguruj metodę uwierzytelniania wskazaną przez operatora końcowego:

    • Dla standardowego uwierzytelniania klucza API OpenAI użyj zatwierdzonego przez organizację polecenia secret-store, gdy tylko jest dostępne:

      $env:COPILOT_PROVIDER_API_KEY_COMMAND = '<APPROVED_SECRET_STORE_COMMAND>'
      

      Polecenie musi pobrać dane uwierzytelniające z zatwierdzonego tajnego magazynu, wypisać tylko dane uwierzytelniające i nie rejestrować ani utrzymywać ich. COPILOT_PROVIDER_API_KEY_COMMAND ma pierwszeństwo przed COPILOT_PROVIDER_API_KEY.

    • Jeśli nie ma zatwierdzonego polecenia secret-store, ustaw klucz API bezpośrednio jako krótkotrwały zapas dla bieżącej sesji PowerShell:

      $env:COPILOT_PROVIDER_API_KEY = $endpointCredential
      
    • Dla uwierzytelniania tokenów na okaziciela ustaw token na nośnika:

      $env:COPILOT_PROVIDER_BEARER_TOKEN = $endpointCredential
      

    Ważna

    Nie umieszczaj kluczy API w skryptach, w przykładach kontroli wersji czy poleceń. copilot a wszystkie procesy, które uruchamia, dziedziczą zmienne środowiska uwierzytelniania dostawcy. Używaj krótkotrwałych, najmniejszych uprawnień i usuń zmienne po wyjściu z GitHub Copilot CLI.

  4. Przejrzyj obsługiwane zmienne dostawcy w zainstalowanej wersji:

    copilot help providers
    

Uruchom i zweryfikuj GitHub Copilot CLI

  1. Przejdź do katalogu, którego plikom ufasz:

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

Ważna

Jeśli zatrzymasz się przed rozpoczęciem copilotlub wcześniejsze polecenie zawiodło, usuń zmienne uwierzytelniające dostawcę, wyczyść nagłówki żądań i pozbądź się bezpiecznego poświadczenia przed zamknięciem 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()
}

Zamknij sesję programu PowerShell po zakończeniu czyszczenia. Niezmienny ciąg tekstu $endpointCredential jawnego pozostaje w pamięci aż do zakończenia procesu.

  1. Uruchom GitHub Copilot CLI i wykonaj kroki weryfikacji w blokutry, tak aby PowerShell usuwał zmienne środowiska uwierzytelniania dostawcy i usuwał SecureString wartość po zakończeniu lub niepowodzeniu polecenia:

    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. Potwierdź monit dotyczący zaufanego katalogu. Ufaj katalogowi w przyszłych sesjach tylko wtedy, gdy kontrolujesz jego zawartość i spodziewasz się, że pozostanie zaufany.

  3. Jeśli GitHub Copilot CLI Cię o to zapyta, wprowadź /login i postępuj zgodnie z instrukcjami, aby uwierzytelnić się do GitHub. Uwierzytelnianie w GitHubie jest oddzielne od klucza API, który służy do uwierzytelniania w punkcie końcowym inferencji.

  4. Wpisz ten monit testowy:

    Reply with exactly: Local inference test succeeded
    

    Skonfigurowany model w punkcie końcowym Windows Server zwraca Local inference test succeeded bez błędu dostawcy, uwierzytelniania ani zgodności modelu. Po zamknięciu GitHub Copilot CLI program PowerShell uruchamia blok finally. PowerShell nie jest w stanie niezawodnie usunąć niezmiennego ciągu tekstu $endpointCredential jawnego z pamięci, więc zamknij sesję PowerShell po zakończeniu polecenia, aby zwolnić pamięć procesu.

Rozwiązywanie problemów z połączeniami CLI GitHub Copilot z endpointem inferencyjnym Windows Server

Kwestia Co należy sprawdzić?
Żądanie modelu nie może dotrzeć do punktu końcowego Zweryfikowaj bazowy adres URL punktu końcowego, rozdzielczość DNS, port, trasę sieciową, status usługi oraz zaufanie do certyfikatów TLS. Podstawowy adres URL powinien zawierać prefiks API dostarczany przez operator końcowy, taki jak /v1.
Żądanie do modeli zwraca 401 lub 403 Sprawdź, czy dane uprawnienia są ważne. W przypadku uwierzytelniania kluczem API preferuj COPILOT_PROVIDER_API_KEY_COMMAND zatwierdzone polecenie przechowywania sekretów. Używaj COPILOT_PROVIDER_API_KEY tylko jako krótkotrwałego rozwiązania awaryjnego. Do uwierzytelniania za pomocą tokenu okaziciela ustaw COPILOT_PROVIDER_BEARER_TOKEN, zgodnie z określeniem operatora punktu końcowego.
GitHub Copilot CLI korzysta z innego dostawcy lub modelu Ustaw typ dostawcy, podstawowy adres URL, model oraz wybraną zmienną uwierzytelniania w tej samej sesji programu PowerShell, w której uruchamiasz copilot. Użyj dokładnego ID modelu, które zwraca punkt końcowy. Sprawdź też $HOME\.copilot\providers.json; deklaracje dostawcy lub modelu w tym pliku mają pierwszeństwo przed zmiennymi COPILOT_PROVIDER_*.
GitHub Copilot CLI nie może znaleźć modelu Wykonaj ponownie zapytanie $BaseUrl/models i porównaj wartość COPILOT_MODEL z wartością id, którą zwraca punkt końcowy, z uwzględnieniem wielkości liter i interpunkcji.
Monit kończy się niepowodzeniem po zaakceptowaniu żądania przez punkt końcowy Potwierdź, że model i punkt końcowy obsługują zarówno streaming, jak i wywoływanie narzędzi lub funkcji. Przejrzyj logi końcowe pod kątem nieobsługiwanego pola żądania, schematu narzędzia, limitu kontekstu lub formatu odpowiedzi.