ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

openclaw-cn 接入 GitHub Copilot:设备登录、令牌兑换与 Copilot Proxy 双方案实战

openclaw-cn 接入 GitHub Copilot:设备登录、令牌兑换与 Copilot Proxy 双方案实战
  • 人工智能
  • AI Agent
  • 即时通讯
  • 后端
  • 本地部署
  • 语音

【免费下载链接】openclaw-cn

中文社区版OpenClaw,同原版保持定期更新,已内置钉钉、企业微信、飞书、QQ、微信以及国内网络环境优化。你的专属个人AI助手。支持所有操作系统和平台。🦞

项目地址:https://gitcode.com/gh_mirrors/op/openclaw-cn
点击查看免费下载

导读

GitHub Copilot 不只是一个编辑器内的代码补全工具,它同时也是一个可供第三方应用调用的模型供应商。openclaw-cn(中文社区版 OpenClaw)内置了github-copilot供应商,允许你用自己的 GitHub 账户与 Copilot 订阅直接驱动 Claude、GPT、Gemini、Grok 等模型,而无需额外申请 API Key。本文围绕 GitHub Copilot 官方文档 展开,完整讲解两条接入路径的配置步骤、CLI 命令、可选参数与配置文件写法,并结合仓库源码说明登录流程、令牌兑换与缓存机制的底层实现。读完本文,你将能够在 openclaw-cn 中通过设备流程一键登录 Copilot,并把github-copilot/gpt-4o这类模型设为默认模型。

什么是 GitHub Copilot 供应商

GitHub Copilot 是 GitHub 推出的 AI 编程助手,其模型访问权限绑定你的 GitHub 账户与订阅计划。openclaw-cn 把 Copilot 视为一个模型供应商:你只需要拥有 GitHub 账号和有效的 Copilot 订阅,就能获得多个主流模型的访问权。

在 openclaw-cn 中,使用 Copilot 有两种方式:

方式供应商 ID是否需要 VS Code适用场景
内置供应商github-copilot否默认且最简单,使用原生设备登录流程
Copilot Proxy 插件copilot-proxy是已在 VS Code 中运行 Copilot Proxy,或需要经过代理路由

1) 内置 GitHub Copilot 供应商(github-copilot)

这是官方推荐路径。openclaw-cn 通过 GitHub 的**设备授权流程(device flow)**获取 GitHub token,然后在运行时将其兑换为 Copilot API token。整个过程不依赖 VS Code,只需要交互式终端。

2) Copilot Proxy 插件(copilot-proxy)

对应仓库中的 copilot-proxy 插件。该插件把Copilot ProxyVS Code 扩展当作本地桥接:openclaw-cn 连接代理的/v1端点,使用你在扩展中配置的模型列表。适合已经运行 Copilot Proxy 的场景,但需要启用插件并保持 VS Code 扩展持续运行。

CLI 登录:设备流程一键接入

内置供应商的登录命令位于 models-cli.ts,核心命令为:

openclaw-cn models auth login-github-copilot

执行后终端会显示一个授权 URL 和一次性代码,例如:

Visit: https://github.com/login/device Code: ABCD-EFGH

你需要访问该 URL、输入代码并完成授权。在完成授权之前请保持终端打开,否则设备代码过期后需要重新登录。

登录流程的可选参数

# 指定认证配置文件 ID(默认 github-copilot:github) openclaw-cn models auth login-github-copilot --profile-id github-copilot:work # 已有配置文件时跳过覆盖确认,直接覆盖 openclaw-cn models auth login-github-copilot --yes

参数说明(与 github-copilot-auth.ts 中的实现一一对应):

  • --profile-id <id>:认证配置文件的 ID,默认值为github-copilot:github。适合在同一个 GitHub 账户下区分工作/个人配置,或轮换多个订阅账户。
  • --yes:布尔开关。当profileId已存在时,默认会提示"重新运行将覆盖现有凭据",加上--yes可跳过确认直接覆盖。

设备流程的底层实现

从源码可以看到完整的设备授权链路(github-copilot-auth.ts):

  1. 发起POST https://github.com/login/device/code请求,携带固定的CLIENT_ID(Iv1.b507a08c87ecfe98)与scope: "read:user",拿到device_code、user_code、verification_uri、expires_in和interval。
  2. 以interval为轮询间隔,持续向https://github.com/login/oauth/access_token发起urn:ietf:params:oauth:grant-type:device_code类型的请求,直到拿到access_token。
  3. 轮询期间需要处理三种典型错误:authorization_pending(等待授权,继续轮询)、slow_down(请求过快,需额外等待)、expired_token/access_denied(代码过期或被拒绝,直接报错退出)。
  4. 拿到 GitHub token 后写入认证配置文件,并通过applyAuthProfileConfig把github-copilot供应商配置同步进模型配置,最终显示 "Done"。

需要特别注意的是,该命令要求交互式终端(TTY)。源码在函数入口处显式检查了process.stdin.isTTY,非 TTY 环境会直接抛出 "github-copilot login requires an interactive TTY."。因此在脚本化、后台或 CI 环境中无法直接执行此命令,请务必在真实终端中运行。

令牌兑换与缓存:运行时如何变成 Copilot API Token

登录时拿到的是 GitHub token,而调用模型需要的是 Copilot API token。openclaw-cn 在运行时完成兑换,核心实现在 github-copilot-token.ts:

  • 兑换接口:GET https://api.github.com/copilot_internal/v2/token,请求头携带Authorization: Bearer <githubToken>。
  • 缓存机制:兑换结果(token、expiresAt、updatedAt)写入状态目录下的credentials/github-copilot.token.json。再次运行时若缓存仍在有效期(源码中保留了 5 分钟的过期安全余量),直接复用缓存,不再请求网络。
  • 动态 Base URL:Copilot 返回的 token 是以分号分隔的键值串,其中包含proxy-ep=...字段。deriveCopilotApiBaseUrlFromToken会把proxy.xxx转换为api.xxx作为 API 地址;若无法解析则回退到默认地址https://api.individual.githubcopilot.com。这一点在 github-copilot-token.test.ts 中有对应的单测验证。
  • 运行时调用点:在 pi-embedded-runner 的 run.ts 与 compact.ts 中,每当模型供应商为github-copilot时都会调用resolveCopilotApiToken完成兑换。

此外,openclaw-cn 还支持通过环境变量直接提供 GitHub token,无需走交互式登录。从 resolveImplicitCopilotProvider 的实现看,它会依次读取COPILOT_GITHUB_TOKEN、GH_TOKEN、GITHUB_TOKEN,若这些环境变量为空则回退到认证配置中的首个github-copilotprofile。

设置默认模型

登录完成后,把 Copilot 的某个模型设为默认模型:

openclaw-cn models set github-copilot/gpt-4o

对应配置文件示例(JSON5):

{ agents: { defaults: { model: { primary: "github-copilot/gpt-4o" } } } }

配置路径的含义:github-copilot是供应商 ID,gpt-4o是模型 ID。除了gpt-4o,还可以尝试其他 ID,例如github-copilot/gpt-4.1、github-copilot/claude-sonnet-4.5等。

内置模型清单

openclaw-cn 在 github-copilot-models.ts 中维护了一份完整的 Copilot 可用模型清单(该清单独立于上游 pi-ai 内置列表,避免上游更新滞后)。从源码看,内置模型按厂商分为四组:

  • Anthropic Claude:claude-haiku-4.5、claude-opus-4.5、claude-opus-4.6(上下文窗口 200K)、claude-sonnet-4、claude-sonnet-4.5
  • Google Gemini:gemini-2.5-pro、gemini-3-flash-preview、gemini-3-pro-preview
  • OpenAI GPT:gpt-4.1、gpt-4o、gpt-5、gpt-5-mini、gpt-5.1、gpt-5.1-codex、gpt-5.1-codex-max、gpt-5.1-codex-mini、gpt-5.2、gpt-5.2-codex
  • xAI:grok-code-fast-1

这些模型定义统一使用openai-completions(或openai-responses,针对 GPT-5 系列)API 协议、成本记为零、支持文本与图片输入。另外buildCopilotModelDefinition提供了兜底逻辑:当请求的模型 ID 不在清单中时,会按通用参数(128K 上下文、16K 最大输出)自动生成一个临时定义,因此配置中出现较新的模型 ID 也不会直接失败。

方案二:Copilot Proxy 插件

如果你选择 Copilot Proxy 方案,仓库中提供了现成的 copilot-proxy 插件。

启用插件

内置插件默认处于禁用状态,需要先启用:

openclaw-cn plugins enable copilot-proxy

启用后需要重启 Gateway 才能生效。

认证配置

openclaw-cn models auth login --provider copilot-proxy --set-default

认证时插件会通过交互式向导询问两个问题(实现见 index.ts):

  1. Copilot Proxy base URL:代理服务地址,默认http://localhost:3000/v1。注意该地址必须包含/v1后缀,插件会自动为未以/v1结尾的地址补全。
  2. Model IDs(逗号分隔):要暴露给 openclaw-cn 的模型列表,默认包含gpt-5.2、gpt-5.1、claude-opus-4.5、claude-sonnet-4.5、gemini-3-pro、grok-code-fast-1等主流模型。

配置完成后,插件会写入copilot-proxy:local认证 profile,并把供应商配置(baseUrl、apiKey: "n/a"、authHeader: false、模型定义列表)以及默认模型写入模型配置。由于本地代理不做鉴权,apiKey固定为占位值且关闭了authHeader请求头注入。

使用前提

  • Copilot Proxy VS Code 扩展必须处于运行状态,否则/v1/chat/completions端点不可达;
  • 可用模型取决于你的 Copilot 订阅计划,若某模型被拒绝,可编辑配置中models.providers.copilot-proxy下的模型列表;
  • 该方案与内置供应商相比多了一层本地代理,适合需要复用 VS Code 内已有会话的场景。

使用注意事项

  • 必须使用交互式终端:设备流程登录依赖 TTY,请直接在终端执行,不要在 IDE 内嵌终端工具或后台进程中运行。
  • 模型可用性取决于订阅计划:GitHub Copilot 不同订阅(如 Copilot Pro、Copilot Business 等)开放的模型集合不同。若某模型在运行时被 API 拒绝,请换用其他模型 ID(例如从gpt-4o换成gpt-4.1),或参考上文内置清单逐个尝试。
  • 凭据存储与兑换时机:登录后 GitHub token 保存在 openclaw-cn 的认证配置中(auth-profiles.json),运行时才兑换为短期有效的 Copilot API token,并缓存到credentials/github-copilot.token.json;缓存过期后会自动重新兑换,无需重新登录。
  • provider 自动注入:只要认证配置中存在github-copilotprofile 或设置了相关环境变量,openclaw-cn 在生成models.json时就会自动注入github-copilot供应商(见 models-config.ts),无需手动编写 provider 定义;仅当你在配置中显式定义了该 provider 时,显式配置会优先生效。

总结

openclaw-cn 为 GitHub Copilot 提供了开箱即用的支持:内置供应商通过设备流程完成无 VS Code 依赖的登录,运行时自动把 GitHub token 兑换为 Copilot API token 并缓存复用;Copilot Proxy 插件则为已在使用 VS Code Copilot Proxy 的用户提供桥接方案。两条路径共享同一个模型命名空间github-copilot/<model-id>,配置上只需一条openclaw-cn models set命令即可切换默认模型。相关实现可进一步查阅 github-copilot-auth.ts、github-copilot-token.ts、github-copilot-models.ts 与 copilot-proxy 插件 源码,以及 模型供应商概念文档。

  • 人工智能
  • AI Agent
  • 即时通讯
  • 后端
  • 本地部署
  • 语音

【免费下载链接】openclaw-cn

中文社区版OpenClaw,同原版保持定期更新,已内置钉钉、企业微信、飞书、QQ、微信以及国内网络环境优化。你的专属个人AI助手。支持所有操作系统和平台。🦞

项目地址:https://gitcode.com/gh_mirrors/op/openclaw-cn
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进