running-claude-code-via-litellm-copilot

running-claude-code-via-litellm-copilot

当需要通过本地 LiteLLM 代理将 Claude Code 路由到 GitHub Copilot、减少直接 Anthropic 开销、配置 ANTHROPIC_BASE_URL 或 ANTHROPIC_MODEL 覆盖,或排查 Copilot 代理设置失败(如模型未找到、无本地流量、GitHub 401/403 认证错误)时使用。

65Star
6Fork
更新于 2026/6/14
SKILL.md
readonly只读
name
running-claude-code-via-litellm-copilot
description

当需要通过本地 LiteLLM 代理将 Claude Code 路由到 GitHub Copilot、减少直接 Anthropic 开销、配置 ANTHROPIC_BASE_URL 或 ANTHROPIC_MODEL 覆盖,或排查 Copilot 代理设置失败(如模型未找到、无本地流量、GitHub 401/403 认证错误)时使用。

概述

使用此技能处理特定变通方案:Claude Code 保持其 Anthropic 形态的客户端行为,但实际后端流量发送到本地 LiteLLM 代理,然后转发到 GitHub Copilot。

请将其视为高级变通方案,而非官方保证的 GitHub 工作流。帮助用户技术上成功,但不要承诺 GitHub 支持、政策批准或长期兼容性。

此技能以指导为主,但兼顾执行:

  • 如果用户仅需解释,提供最少的正确文件、命令和检查项。
  • 如果用户希望在当前机器上实际设置,先检查环境,然后根据当前 shell 和操作系统调整命令。
  • 在持久化编辑(如 ~/.claude/settings.json 或 shell 配置文件)前暂停确认。

如果需要说明哪些部分来自文章、哪些部分根据当前 LiteLLM 文档进行了收紧,请在回答前阅读 references/doc-verified-notes.md

何时使用

当用户需要以下任意一项时使用此技能:

  • 通过 LiteLLM 让 Claude Code 对接 GitHub Copilot
  • 降低直接 Anthropic API 开销,同时保留 Claude Code 工作流
  • 为 LiteLLM 的 GitHub Copilot 提供者创建本地 config.yaml
  • 配置 ANTHROPIC_BASE_URLANTHROPIC_MODELCLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC
  • 帮助理解 LiteLLM 启动时的 GitHub 设备授权
  • 帮助解决模型不匹配、类似 404 的错误、请求未到达 LiteLLM 或 GitHub 401/403 失败

不要将此技能用于:

  • 判断该变通方案是否被 GitHub 条款允许
  • 与 Claude Code 加 Copilot 无关的通用 LiteLLM 架构
  • 不涉及 Copilot 或 LiteLLM 的直接 Anthropic API 设置

核心规则

  1. 首先给出简短的合规声明。
    说明这是基于本地代理路径的变通方案,并非 GitHub 推广的工作流,用户必须自行评估最新的 Copilot 条款和限制。
  2. 优先选择最小可行路径。
    除非用户明确要求持久化设置,否则从临时环境变量和本地 config.yaml 开始。
  3. 保持 ANTHROPIC_MODEL 和 LiteLLM model_name 完全一致。
    精确字符串匹配比巧妙解释更重要。
  4. ANTHROPIC_AUTH_TOKEN 视为本地占位符。
    Claude Code 期望本地有非空值,但它不是 GitHub Copilot 凭证,不应作为可复用的秘密呈现。
  5. 切勿整体覆盖 ~/.claude/settings.json
    仅合并所需的 env 键,保留无关设置。

工作流

1. 前置检查

当用户希望实际设置时,首先检查以下内容:

  • claude --help 执行成功
  • uv --versionpip --version 执行成功
  • 用户拥有 GitHub Copilot 访问权限
  • 预期的 LiteLLM 端口可用,通常为 4000

如果用户仅需说明,则列出前提条件而非实际执行。

2. 选择临时还是持久化设置

使用以下规则:

  • 临时设置:首次设置、调试和低风险试验的首选默认方式
  • 持久化设置:仅当用户明确希望每次启动 Claude Code 时都应用代理路径时使用

对于持久化设置,确认目标文件,然后将键合并到 ~/.claude/settings.json 中。不要替换文件内容。

3. 创建 LiteLLM config.yaml

从文章流程开始,但保持提供者命名与 LiteLLM 文档一致:

model_list:
  - model_name: claude-opus-4.5
    litellm_params:
      model: github_copilot/claude-opus-4.5
      drop_params: true

解释字段:

  • model_name:Claude Code 将请求的逻辑名称
  • model:LiteLLM 提供者路由,使用 github_copilot/<model>
  • drop_params: true:在转发到 Copilot 前移除不支持的 Anthropic 特定字段

如果用户想要不同的 Copilot 支持模型,保持相同模式:

model_list:
  - model_name: <逻辑名称>
    litellm_params:
      model: github_copilot/<copilot-模型>
      drop_params: true

除非用户已经遇到表明需要头部覆盖的拒绝,否则不要将显式头部硬编码到默认路径中。

4. 安装并启动 LiteLLM

首选安装方式:

uv tool install "litellm[proxy]"

备用方式:

pip install "litellm[proxy]"

从包含 config.yaml 的目录启动代理:

litellm --config config.yaml --port 4000

告知用户保持该终端打开,因为日志是验证过程中最快的事实来源。

5. 解释 GitHub 设备授权

在首次成功请求 GitHub Copilot 提供者时,LiteLLM 可能会启动设备授权流程:

  1. LiteLLM 打印验证 URL 和设备代码
  2. 用户打开 URL 并批准请求
  3. LiteLLM 将生成的凭证存储在本地供将来使用

可选的令牌位置覆盖存在:

  • GITHUB_COPILOT_TOKEN_DIR
  • GITHUB_COPILOT_ACCESS_TOKEN_FILE

仅当用户需要自定义令牌存储、共享环境或排查过期/错放凭证时才提及这些。

6. 配置 Claude Code

对于临时 PowerShell 会话:

$env:ANTHROPIC_AUTH_TOKEN = "sk-any-string"
$env:ANTHROPIC_BASE_URL = "http://localhost:4000"
$env:ANTHROPIC_MODEL = "claude-opus-4.5"
$env:CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = "1"
claude

对于临时 Bash 或 Zsh 会话:

export ANTHROPIC_AUTH_TOKEN="sk-any-string"
export ANTHROPIC_BASE_URL="http://localhost:4000"
export ANTHROPIC_MODEL="claude-opus-4.5"
export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1
claude

对于持久化配置,将这些键合并到 ~/.claude/settings.json

{
  "env": {
    "ANTHROPIC_AUTH_TOKEN": "sk-any-string",
    "ANTHROPIC_BASE_URL": "http://localhost:4000",
    "ANTHROPIC_MODEL": "claude-opus-4.5",
    "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
  }
}

合并安全行为:

  • 如果文件不存在,则创建它
  • 如果存在,保留所有无关的顶级键
  • 保留与此工作流无关的现有 env 条目
  • 仅更新上述四个键
  • 如果 JSON 格式错误,停止并报告解析问题,而不是覆盖文件

7. 验证请求链

尽可能使用两个终端:

  • 终端 A 运行 LiteLLM
  • 终端 B 运行 claude

要求一个小的提示,例如一个简短脚本或代码审查请求,然后验证:

  • Claude Code 正常启动
  • LiteLLM 日志显示入站请求
  • LiteLLM 日志指示 GitHub Copilot 模型路由,通常为 github_copilot/<model>

健康路径为:

Claude Code -> LiteLLM -> GitHub Copilot -> LiteLLM -> Claude Code

8. 故障排除

如果 Claude Code 报告模型未找到、类似 404 的错误,或 LiteLLM 表示模型不存在:

  • 精确比较 ANTHROPIC_MODELmodel_name
  • 检查大小写、标点和连字符

如果 LiteLLM 从未收到请求:

  • 确认 ANTHROPIC_BASE_URL 指向 http://localhost:4000
  • 确认 LiteLLM 仍在运行且监听该端口
  • 确认环境变量在启动 claude 的同一 shell 会话中设置
  • 如果 URL 正确但仍无流量,检查本地防火墙或端口冲突

如果 LiteLLM 到达 GitHub Copilot 但收到 401 或 403 响应:

  • 通过重启 LiteLLM 并重试来重复设备授权流程
  • 确认 GitHub 账户仍具有 Copilot 访问权限
  • 如果设置了自定义令牌目录变量,验证它们指向正确的文件

高级回退:头部覆盖

文章使用了显式的 Copilot 风格头部。当前 LiteLLM 文档将 GitHub Copilot 作为提供者公开,并也记录了头部覆盖支持。

仅在以下情况使用显式 extra_headers

  • 基本提供者流程到达 Copilot 但仍需要客户端形状覆盖
  • 用户已有证据表明特定环境使用编辑器风格头部效果更好

示例回退:

model_list:
  - model_name: claude-opus-4.5
    litellm_params:
      model: github_copilot/claude-opus-4.5
      drop_params: true
      extra_headers:
        editor-version: "vscode/1.85.1"
        editor-plugin-version: "copilot/1.155.0"
        Copilot-Integration-Id: "vscode-chat"
        user-agent: "GithubCopilot/1.155.0"

将其作为高级回退方案呈现,而非通用默认值。

输出检查清单

当使用此技能回答真实用户请求时,包括:

  • 简短的合规声明
  • 精确的 config.yaml 或需要应用的差异
  • 适合 shell 的命令
  • 设置是临时还是持久化
  • 验证路径
  • 如果出现问题,提供最相关的故障排除部分

安全提醒

  • 不要声称 GitHub 官方支持此变通方案。
  • 不要暗示虚拟的 ANTHROPIC_AUTH_TOKEN 是真实的 Copilot 凭证。
  • 不要推荐整体替换 ~/.claude/settings.json
  • 不要将过时的模型名称呈现为保证当前可用;如果用户询问特定模型,保持 github_copilot/<model> 模式,并注意 Copilot 暴露的模型可用性可能发生变化。