GitHub Copilot CLIをWindows Serverの推論エンドポイントに接続

GitHub Copilot CLIは、サポートされているWindowsクライアントからモデルリクエストをWindows Server上でホストされているOpenAI互換の推論エンドポイントに送信できるAIコーディングエージェントです。 この構成により、端末から組織ホストモデルを使い、Windows Serverがモデルホスティングと計算を集中管理できます。

この記事では、クライアント接続の設定方法と、設定済みモデルが応答するかどうかの検証方法を紹介します。 推論サービスを展開したり安全にしたりするわけではありません。

Prerequisites

  • GitHub Copilot CLIがサポートするWindowsバージョンを実行するクライアントコンピュータで、以下のようなものがあります:
  • アクティブなGitHub Copilot サブスクリプション。 組織や企業がサブスクリプションを提供している場合、その管理者はGitHub Copilot CLIを許可しなければなりません。
  • GitHub Copilot CLIを起動するための信頼できるワーキングディレクトリです。
  • Windows Server上の既存のOpenAI互換エンドポイントで、以下のようなものを搭載しています。
    • クライアントコンピュータからアクセス可能です。
    • 認証が必要です。 この手順はリモートWindows Server接続に適用されます。 認証なしのエンドポイントは、この手順外のループバックのみのシナリオのために予約してください。
    • 意図されたサーバーネットワークインターフェースのみを受信し、認可されたクライアントコンピュータやサブネットからのインバウンド接続のみを許可し、公共インターネットからの直接接続は受け付けません。
    • ストリーミングやツールや関数呼び出しをサポートします。 OpenAIの互換性だけでは、すべてのGitHub Copilot CLI機能のサポートを保証するわけではありません。 エンドポイントオペレーターでエンドポイントと選択したモデルの能力を検証します。
  • 以下の特徴を持つ、Windows クライアントから Windows Server へのネットワーク接続:
    • クライアントコンピュータから解決されるWindows Server推論エンドポイントのDNS名です。
    • ネットワークルートとファイアウォールルールで、認証されたクライアントやサブネットのみがエンドポイントポートに接続できるようにします。
    • クライアントが信頼し、その件名または別名がエンドポイントのDNS名と一致するHTTPS証明書です。
  • エンドポイントの基本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の推論エンドポイントからモデルIDを取得する

  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ヘッダーに含め、応答のdata配列から各モデルIDを読み込みます:

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

    コマンドは1つ以上のモデルIDを返します。 ストリーミングやツールや関数呼び出しをサポートするモデルの正確なIDをコピーしてください。

GitHub CopilotのCLIプロバイダーとモデルの設定

  1. $BaseUrlをWindows ServerエンドポイントのベースURLに設定し、APIキーまたはベアラートークンに$endpointCredentialしてください。 同じPowerShellセッション内で、プロバイダータイプ、エンドポイントのベースURL、正確なモデルIDを設定します。 <MODEL_ID>をWindows Serverエンドポイントが返すIDに置き換えます。

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

    openaiプロバイダータイプは、vLLMを含むOpenAI互換エンドポイントをサポートしています。

  2. 現在のPowerShellセッションが継承したプロバイダー認証変数をすべてクリアします:

    Remove-Item Env:COPILOT_PROVIDER_API_KEY, Env:COPILOT_PROVIDER_BEARER_TOKEN, Env:COPILOT_PROVIDER_API_KEY_COMMAND -ErrorAction SilentlyContinue
    
  3. エンドポイントオペレーターが指定した認証方法を設定してください:

    • 標準的なOpenAIのAPIキー認証には、利用可能な場合は組織承認のシークレットストアコマンドを使用してください。

      $env:COPILOT_PROVIDER_API_KEY_COMMAND = '<APPROVED_SECRET_STORE_COMMAND>'
      

      コマンドは承認された秘密ストアから認証情報を取得し、認証情報のみを出力し、ログや永続化は行わなければなりません。 COPILOT_PROVIDER_API_KEY_COMMAND は、COPILOT_PROVIDER_API_KEY よりも優先されます。

    • 承認されたシークレットストアコマンドが利用できない場合は、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. CLI GitHub Copilot起動し、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. trusted-directoryのプロンプトを確認してください。 ディレクトリの内容を管理し、信頼が保たれると期待する場合のみ、今後のセッションでディレクトリを信頼してください。

  3. GitHub Copilot CLI から入力を求められたら、/login を入力し、指示に従って GitHub への認証を行ってください。 GitHubの認証は、推論エンドポイントに認証するAPIキーとは別です。

  4. このテストプロンプトを入力してください:

    Reply with exactly: Local inference test succeeded
    

    Windows Serverエンドポイントで設定されたモデルは、プロバイダー、認証、モデル互換性エラーなしにLocal inference test succeededを返します。 CLI GitHub Copilot終了した後、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、モデル、選択した認証変数を、 copilot開始する同じPowerShellセッションで設定します。 エンドポイントが返す正確なモデルIDを使いましょう。 また、 $HOME\.copilot\providers.jsonを確認してください。そのファイルの提供者宣言やモデル宣言が COPILOT_PROVIDER_* 変数より優先されます。
GitHub Copilot CLIがモデルを見つけられません 再度 $BaseUrl/models クエリを行い、 COPILOT_MODEL 値とエンドポイントが返す id 値(大文字や句読点を含む)を比較します。
プロンプトは、エンドポイントがリクエストを受け入れた後に失敗します モデルとエンドポイントがストリーミングとツールや関数呼び出しの両方をサポートしているか確認してください。 エンドポイントログからサポートされていないリクエストフィールド、ツールスキーマ、コンテキスト制限、応答形式がないか確認してください。