返回全部 Skills

running-claude-code-via-litellm-copilot

开发工具

当通过本地 LiteLLM 代理将 Claude Code 路由到 GitHub Copilot 时使用,以减少直接 Anthropic 支出、配置 ANTHROPIC_BASE_URL 或 ANTHROPIC_MODEL 覆盖,或排查 Copilot 代理设置失败(例如 model-not-found、无 localhost 流量、GitHub 401/403 身份验证错误)。

113.8k

下载量

AI SkillHub 能力展示图

安装方式

命令行安装

在项目根目录执行以下命令,完成 Skill 安装。

npx bzskills add xixu-me/skills --skill running-claude-code-via-litellm-copilot

skill.md

name: running-claude-code-via-litellm-copilot
description: 当通过本地 LiteLLM 代理将 Claude Code 路由到 GitHub Copilot 时使用,以减少直接 Anthropic 支出、配置 ANTHROPIC_BASE_URL 或 ANTHROPIC_MODEL 覆盖,或排查 Copilot 代理设置失败(例如 model-not-found、无 localhost 流量、GitHub 401/403 身份验证错误)。

概述

当 Claude Code 保持其 Anthropic 风格客户端行为,但实际后端流量通过本地 LiteLLM 代理转发到 GitHub Copilot 时,使用此技能实现特定的变通方案。

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

此技能以指导优先,但兼顾执行:

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

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

何时使用

当用户希望实现以下任一目标时,使用此技能:

  • Claude Code 通过 LiteLLM 与 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 条款和限制。

  1. 优先采用最小可行路径。

除非用户明确要求持久性配置,否则先从临时环境变量和本地 config.yaml 开始。

  1. 保持 ANTHROPIC_MODEL 和 LiteLLM 的 model_name 完全一致。

精确字符串匹配比解释概念更重要。

  1. ANTHROPIC_AUTH_TOKEN 视为本地占位符。

Claude Code 在本地期望非空值,但它并非 GitHub Copilot 凭据,不应作为可重复使用的秘密提供。

  1. 切勿整体覆盖 ~/.claude/settings.json

仅合并所需的 env 键,保留无关设置。

工作流程

1. 预备检查

当用户希望进行实际配置时,首先检查以下项:

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

如果用户仅需说明,则列出先决条件而无需运行命令。

2. 选择临时 vs 持久化配置

按此规则选择:

  • 临时配置:首次设置、调试和低风险试验时的首选默认值
  • 持久化配置:仅在用户明确要求每次启动 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 官方支持此变通方案。
  • 不要暗示 dummy 的 ANTHROPIC_AUTH_TOKEN 是真正的 Copilot 凭据。
  • 不要推荐整体替换 ~/.claude/settings.json
  • 不要将过时的模型名称作为保证的当前可用模型提供;如果用户询问特定模型,保持 github_copilot/<model> 模式,并说明 Copilot 公开的模型可用性可能会发生变化。