GitHub Copilot CLI 是一款 AI 编码代理,可以将模型请求从支持的 Windows 客户端发送到托管在 Windows Server 上的兼容 OpenAI 的推理端点。 这种配置允许您在终端使用组织托管模型,而 Windows Server 则集中管理模型托管和计算。
本文将向您展示如何配置客户端连接并验证配置模型是否响应。 它不会部署或保护推理服务。
Prerequisites
- 一台运行 GitHub Copilot CLI 支持的 Windows 版本的客户端计算机,并满足以下条件:
- PowerShell 6 或更高版本。
- Windows 程序包管理器(WinGet)。
- 有效的 GitHub Copilot 订阅。 如果组织或企业提供您的订阅,其管理员必须允许 GitHub Copilot CLI。
- 一个可信的工作目录,用于启动 GitHub Copilot CLI。
- 一个现有的 Windows Server 兼容 OpenAI 端点,具备:
- 可从客户端计算机访问。
- 需要身份验证。 此过程适用于远程 Windows Server 连接。 将无需身份验证的端点保留用于仅限回环的场景,此类场景不在本流程范围内。
- 它只监听预期服务器网络接口,只允许来自授权客户端计算机或子网的入站连接,不接受来自公共互联网的直接连接。
- 支持流式传输和工具或函数调用。 仅靠 OpenAI 兼容性并不保证支持所有 GitHub Copilot CLI 功能。 用端点操作员验证端点和所选模型能力。
- 从 Windows 客户端到 Windows Server 的网络连接具有以下特点:
- 可从客户端计算机解析的 Windows Server 推理终结点的 DNS 名称。
- 网络路由和防火墙规则,允许只有授权的客户端或子网连接到终端端口。
- 客户端信任的HTTPS证书,其主体名或主体替代名与端点DNS名称相匹配。
- 端点基础 URL,例如
https://inference.contoso.com/v1。 - 端点凭证和认证类型由端点操作员指定。
安装 GitHub Copilot CLI
打开 PowerShell。
安装稳定的 GitHub Copilot CLI 包:
winget install GitHub.Copilot确认安装成功:
copilot --version该命令返回已安装的 GitHub Copilot CLI 版本。
从 Windows Server 推理端点获取模型 ID
设置端点操作员提供的基础URL:
$BaseUrl = 'https://inference.contoso.com/v1'输入端点操作符指定的API密钥或承载令牌。 使用短暂且权限最低的凭证。 当你的组织提供批准的秘密存储命令时,用它来获取凭证,而不是直接输入。 以下命令将该
SecureString值转换为明文值,明文$endpointCredential值会保留在本次 PowerShell 会话的内存中。$secureEndpointCredential = Read-Host 'Enter the endpoint credential' -AsSecureString $endpointCredential = [System.Net.NetworkCredential]::new('', $secureEndpointCredential).Password发送
GET请求至$BaseUrl/models。 在Authorization: Bearer请求头中包含$endpointCredential,并从响应的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 }该命令返回一个或多个型号ID。 复制支持流式流和工具或函数调用的模型的精确ID。
配置 GitHub Copilot CLI 提供者和模型
将
$BaseUrl设置为 Windows Server 端点的基础 URL,将$endpointCredential设置为其 API 密钥或持有者令牌。 在同一个PowerShell会话中,设置提供者类型、端点基础URL和精确模型ID。 用 Windows Server 端点返回的 ID 替换<MODEL_ID>。$env:COPILOT_PROVIDER_TYPE = 'openai' $env:COPILOT_PROVIDER_BASE_URL = $BaseUrl $env:COPILOT_MODEL = '<MODEL_ID>'该
openai提供者类型支持兼容 OpenAI 的端点,包括 vLLM。清除当前PowerShell会话继承的任何提供者认证变量:
Remove-Item Env:COPILOT_PROVIDER_API_KEY, Env:COPILOT_PROVIDER_BEARER_TOKEN, Env:COPILOT_PROVIDER_API_KEY_COMMAND -ErrorAction SilentlyContinue配置端点操作员指定的认证方法:
对于标准 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 后移除变量。请查看您已安装版本中支持的提供者变量:
copilot help providers
启动并验证 GitHub Copilot CLI
切换到你信任的文件目录:
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 字符串会一直留在内存中,直到进程退出。
启动 GitHub Copilot CLI,并在
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() } }确认可信目录提示。 仅当你控制该目录的内容,并且预计它在后续会话中将继续保持可信时,才在今后的会话中信任该目录。
如果 GitHub Copilot CLI 提示你,请输入
/login,并按照说明向 GitHub 进行身份验证。 GitHub 认证与认证推理端点的 API 密钥是分开的。请输入这个测试提示:
Reply with exactly: Local inference test succeededWindows Server 终结点上配置的模型返回
Local inference test succeeded,且未出现提供程序、身份验证或模型兼容性错误。 退出 GitHub Copilot CLI 后,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 。 对于 Bearer 令牌身份验证,请按照端点运营方的指定设置 COPILOT_PROVIDER_BEARER_TOKEN。 |
| GitHub Copilot CLI 使用不同的提供者或模型 | 在启动 copilot 的同一个 PowerShell 会话中,设置提供程序类型、基础 URL、模型和所选身份验证变量。 使用端点返回的准确型号ID。 还要检查 $HOME\.copilot\providers.json;该文件的提供者或模型声明优先 COPILOT_PROVIDER_* 于变量。 |
| GitHub Copilot CLI 找不到该模型 | 再次查询 $BaseUrl/models ,并将该 COPILOT_MODEL 值与 id 端点返回的值(包括大小写和标点)进行比较。 |
| 提示在端点接受请求后失败 | 确认模型和端点同时支持流式输出以及工具或函数调用。 检查终端日志中是否有不支持的请求字段、工具模式、上下文限制或响应格式。 |