Skip to content

Copilot SDK 按优先级依次尝试:显式传入 token → 环境变量 → 已存储的 OAuth → GitHub CLI。BYOK 模式完全跳过 GitHub 认证,直接用外部 AI 提供商的 API Key。在 CI/CD 环境中,通过环境变量传入 token 是最推荐的方式。

GitHub Copilot SDK 认证配置:GitHub 账号、OAuth、Token 与 BYOK

认证优先级

Copilot SDK 按以下顺序查找认证信息:

  1. 代码中显式传入的 token
  2. 环境变量 GITHUB_TOKENCOPILOT_TOKEN
  3. 已存储的 OAuth token(通过 Copilot CLI 登录保存)
  4. GitHub CLI(gh auth)的登录状态

方式一:交互式登录(最简单,适合本地开发)

依赖用户已用 gh copilotgh auth login 登录的状态:

typescript
import { createSession } from '@github/copilot-sdk'

// SDK 自动使用 CLI 的登录状态,无需任何配置
const session = await createSession()

适合本地开发和测试,不适合部署到服务器。

方式二:GitHub OAuth App(SaaS / 多用户应用)

为每个用户单独获取 OAuth token,用户用自己的 Copilot 配额:

typescript
const session = await createSession({
  auth: {
    type: 'oauth',
    clientId: process.env.GITHUB_CLIENT_ID,
    token: userOAuthToken  // 从你的 OAuth 流程获取的用户 token
  }
})

OAuth 流程:

  1. 创建 GitHub OAuth App,获取 Client ID
  2. 引导用户访问 GitHub 授权页
  3. 用户授权后,用授权码换取 access token
  4. 将 token 传入 SDK

方式三:环境变量 Token(CI/CD / 自动化)

适合自动化场景,无需交互登录:

bash
export GITHUB_TOKEN="your-github-token"
export COPILOT_TOKEN="your-copilot-token"  # 如果需要单独的 Copilot token
typescript
// SDK 自动读取环境变量,无需代码配置
const session = await createSession()

GitHub Actions 中可以用 ${{ secrets.GITHUB_TOKEN }} 注入 token:

yaml
- name: 运行 Copilot SDK 任务
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  run: npx tsx my-script.ts

方式四:BYOK(Bring Your Own Key)

使用外部 AI 提供商,完全绕过 GitHub 认证:

OpenAI

typescript
const session = await createSession({
  auth: {
    type: 'openai',
    baseUrl: 'https://api.openai.com/v1',
    apiKey: process.env.OPENAI_API_KEY,
    model: 'gpt-4o'
  }
})

Anthropic Claude

typescript
const session = await createSession({
  auth: {
    type: 'anthropic',
    apiKey: process.env.ANTHROPIC_API_KEY,
    model: 'claude-sonnet-4-6'
  }
})

Azure OpenAI

typescript
const session = await createSession({
  auth: {
    type: 'azure-openai',
    baseUrl: 'https://your-resource.openai.azure.com/',
    apiKey: process.env.AZURE_OPENAI_KEY,
    model: 'gpt-4o'
  }
})

Ollama(本地模型,无需 API Key)

typescript
const session = await createSession({
  auth: {
    type: 'ollama',
    baseUrl: 'http://localhost:11434',
    model: 'llama3'
  }
})

注意:BYOK 仅支持静态凭证(API Key),不支持托管身份(Managed Identity)或联邦身份。

禁用自动登录

默认情况下,如果找不到认证信息,SDK 会尝试引导用户交互登录。在自动化脚本中,这会导致挂起。设置 useLoggedInUser: false 禁用自动登录:

typescript
const session = await createSession({
  useLoggedInUser: false,
  auth: {
    type: 'token',
    token: process.env.GITHUB_TOKEN
  }
})

常见问题

Q: BYOK 和 Copilot 认证可以在同一个应用中同时使用吗?

A: 可以。创建两个不同的 Session,一个使用 Copilot 认证,另一个使用 BYOK,根据需求路由请求。

Q: GitHub Actions 中的 GITHUB_TOKEN 能用于 Copilot SDK 吗?

A: 取决于仓库的 Copilot 设置。如果仓库所在组织启用了 GitHub Actions 中使用 Copilot,则可以;否则需要使用个人 token 或 OAuth App token。

Q: 自动化脚本中应该用哪种 token 类型?

A: 对于 GitHub Actions,用 GITHUB_TOKEN 或 Personal Access Token;对于长期运行的服务,用 GitHub App 安装 token(有自动续期机制,比 PAT 更安全)。