LLM-Switch
LLM-Switch 是一个 VS Code 插件,用于统一管理 AI Provider,并把 Provider 的 API 地址、API key 和模型配置应用到 Claude、Codex、opencode。
主要功能
- 管理共享 Provider:新增、编辑、删除、拖拽排序。
- 为 Provider 配置 Claude、Codex、opencode 三类 Agent API 地址。
- 维护 Provider 模型参数,包括上下文窗口、压缩阈值和最大输出。
- 根据模型 ID 提供内置参数候选,并支持从接口拉取模型及其窗口元数据。
- 在 Agents 页面管理 Claude、Codex、opencode 的配置文件路径。
- 保存前展示配置变化预览和“写入 / 删除 / 保持不变”状态,包括 token/API key 明文变化。
- 保存 Agent 配置前自动备份旧配置文件,最多保留 5 份。
- 提供 VS Code 命令快速打开配置文件。
- 提供 VS Code 命令快速切换 Claude、Codex、opencode 模型。
- 提供 VS Code 命令单独设置 Claude、Codex、opencode effort。
Provider 管理
Providers 页面以表格管理 Provider,支持:
- 新增 Provider。
- 编辑 Provider。
- 删除 Provider,删除前会二次确认。
- 拖拽表格最左侧把手调整 Provider 顺序。
- 表格模型列最多展示 4 个模型 ID,超出后用
... 表示。
Provider 字段:
Provider 名称:必填,名称唯一;只允许英文字母、数字、下划线和中划线,长度 1-64,且必须以字母或数字开头。
API key:可留空;弹窗内支持显示/隐藏明文。
Claude API 地址:填写后,该 Provider 可用于 Claude。
Codex API 地址:填写后,该 Provider 可用于 Codex。
Codex wire_api:可选 responses 或 chat,保存 Codex 配置时写入 [model_providers.<provider>]。
opencode API 地址:填写后,该 Provider 可用于 opencode。
opencode npm:可选 @ai-sdk/openai-compatible、@ai-sdk/openai,也可选择自定义并填写 npm 包名。
拉取代理:仅用于拉取模型,默认系统代理模式,支持直连模式、系统代理模式、自定义代理;选择自定义代理时需要填写代理地址。
校验证书:仅用于拉取模型,默认不勾选。
模型 ID:模型的原始 ID;保存时忽略空 ID 行,非空 ID 不能重复,并按 ID 排序。
上下文窗口:正整数,可留空。
压缩阈值:默认 60;填写时使用 1-99 的整数百分比。
最大输出:正整数,可留空;填写时小于或等于上下文窗口。
模型参数采用紧凑台账编辑。输入模型 ID 后,插件按“精确 ID、忽略大小写、Provider 前缀、[1m] 后缀、明确别名、日期快照”的顺序识别内置参数。聚焦上下文窗口、压缩阈值或最大输出输入框时显示对应候选列表,选择候选后才会写入表单。内置候选是随插件发布的静态参数表,不在填写或保存时实时从官网拉取。
内置候选覆盖智谱 GLM、DeepSeek、通义千问、MiniMax、Moonshot Kimi 和 Codex/OpenAI 相关模型。未识别模型会显示以下通用候选:
- 上下文窗口:
200000
- 压缩阈值:
60
- 最大输出:
32000
新增模型默认填入压缩阈值 60。拉取模型时,插件优先读取模型对象中的上下文窗口和最大输出元数据,缺少元数据时按模型 ID 使用内置参数,再缺失时使用通用默认值。未识别模型默认使用上下文窗口 200000 和最大输出 32000。用户点击候选或手动输入后会覆盖默认值。当压缩阈值后的预留空间小于最大输出时,界面显示提示并允许保存。该提示用于说明客户端可能提前压缩。
当前最新模型的内置默认值为:GPT-6 Astra 272000/128000,Qwen3.8 Max、Qwen3.8 Flash 1000000/131072,GLM-5.3、GLM-5.3-Flash 1048576/131072。数值依次表示上下文窗口和最大输出。GPT-6 Astra 另外提供 872000 最大上下文候选。
Kimi K3 的内置默认值为 1048576/131072,并提供 1048576 最大输出候选;Kimi K2.7 Code、Kimi K2.7 Code Highspeed 和 Kimi K2.6 的内置默认值为 262144/32768。
拉取模型
Provider 弹窗中的 拉取模型 会从当前填写的 API 地址推导基础地址,并只尝试:
拉取规则:
- 如果 Provider 填了 API key,请求会携带
Bearer <API key>。
- 直连模式会强制绕过 Node 全局代理,直接连接目标 API 地址。
- 系统代理模式会优先使用 VS Code 的
http.proxy/http.proxyAuthorization,没有配置时读取 HTTPS_PROXY、HTTP_PROXY、ALL_PROXY,并遵守 NO_PROXY。
- 自定义代理模式会通过填写的代理地址请求;连接代理服务器本身时也会绕过 Node 全局代理。
- 勾选
校验证书 后会校验拉取模型请求中的 SSL 证书;默认不校验。
- 拉取结果会弹出模型选择窗口,可搜索、勾选、取消勾选。
- 模型对象可使用
id、name、model 或 slug 标识模型。contextWindow、context_length、context_window 可提供当前上下文窗口,缺少这些字段时读取 maxContextWindow、max_context_window、max_context_length、max_model_len。maxOutputTokens、max_output_tokens、max_completion_tokens、output_token_limit 可提供最大输出。插件也读取 limit.context、limits.context、limit.output、limits.output 和 top_provider 中的对应字段。
- 确认后按模型 ID 合并当前清单;已有模型保留参数,新模型优先使用接口元数据,缺少字段时按内置参数或通用默认值补入上下文窗口、压缩阈值和最大输出。
- 内置模型候选默认压缩阈值通常为 60%,GPT 系列内置候选默认上下文窗口为 372000、压缩阈值为 85%,并提供 Codex 文档 400000 与 API 文档 1050000 上下文窗口候选。
Agents 管理
Agents 页面包含 Claude、Codex、opencode 三个子 tab。每个 Agent 页面都显示当前配置文件路径,并支持:
- 直接修改配置文件路径,失焦后自动生效。
重置 为默认路径。
打开配置,文件不存在时只提示错误,不自动创建。
- 选择可用 Provider 和模型。
- 在保存前查看配置变化预览。
插件在 globalStorageUri/managedAgentConfig.json 记录最后一次下发的字段和值。切换 Provider、模型或取消某项设置时,插件删除仍等于上次下发值的字段,并保留用户之后手动修改的字段。
Provider 只有配置了对应 Agent 的 API 地址后,才会出现在该 Agent 的 Provider 下拉框中。
默认路径:
| Agent |
Linux / macOS |
Windows |
| Claude |
~/.claude/settings.json |
%USERPROFILE%\.claude\settings.json |
| Codex config.toml |
~/.codex/config.toml |
%USERPROFILE%\.codex\config.toml |
| Codex auth.json |
~/.codex/auth.json |
%USERPROFILE%\.codex\auth.json |
| opencode |
~/.config/opencode/opencode.json |
%USERPROFILE%\.config\opencode\opencode.json |
Claude
Claude 页面会写入 settings.json 的 env:
ANTHROPIC_BASE_URL
ANTHROPIC_AUTH_TOKEN
ANTHROPIC_DEFAULT_HAIKU_MODEL
ANTHROPIC_DEFAULT_OPUS_MODEL
ANTHROPIC_DEFAULT_SONNET_MODEL
ANTHROPIC_MODEL
ANTHROPIC_REASONING_MODEL
CLAUDE_CODE_AUTO_COMPACT_WINDOW(模型配置上下文窗口时写入)
CLAUDE_AUTOCOMPACT_PCT_OVERRIDE(模型配置压缩阈值时写入)
CLAUDE_CODE_MAX_OUTPUT_TOKENS(模型配置最大输出时写入,最高写入 64000)
CLAUDE_CODE_ATTRIBUTION_HEADER(可选)
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC(可选)
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS(可选)
ENABLE_TOOL_SEARCH(可选)
Claude 页面还会写入 settings.json 顶层字段:
每个 Provider 模型在 Claude 下拉框和快速切换中显示普通版和 [1M] 版。[1M] 选项实际写入 model-id[1m],由用户按上游模型能力选择。
Claude 使用主模型的参数更新 env。上下文窗口写入 CLAUDE_CODE_AUTO_COMPACT_WINDOW,压缩阈值写入 CLAUDE_AUTOCOMPACT_PCT_OVERRIDE,最大输出写入 CLAUDE_CODE_MAX_OUTPUT_TOKENS。CLAUDE_CODE_MAX_OUTPUT_TOKENS 属于 Claude Code 客户端设置,插件将模型最大输出压到 64000 后写入,避免超过 Claude Code 接受的范围。模型未配置上下文窗口、压缩阈值或最大输出时,插件清理对应配置。
运行设置使用“不设置 / 启用 / 禁用”或“不设置 / effort 值”选择,配置中缺少对应字段时默认选择“不设置”。effortLevel 支持 low、medium、high、xhigh、max。“沙箱环境”写入 env.IS_SANDBOX,启用值为 "1",禁用值为 "0"。其他运行设置写入对应 env。插件管理的字段遵循配置所有权规则。
Codex
Codex 页面会写入 config.toml:
model_provider
model
[model_providers.<provider>]
[model_providers.<provider>].name
[model_providers.<provider>].base_url
[model_providers.<provider>].wire_api
[model_providers.<provider>].requires_openai_auth
model_context_window
model_auto_compact_token_limit
service_tier
model_reasoning_effort
sandbox_mode
approval_policy
Codex 页面还会写入 auth.json:
Codex 的 model_provider 和 [model_providers.<provider>] 使用 Provider 名称。
Provider 配置了 API key 时,requires_openai_auth 写入 true;API key 为空时写入 false,并清理 auth.json 中的 OPENAI_API_KEY。
Codex 使用所选模型的上下文窗口。上下文窗口和压缩阈值都已填写时,插件计算 model_auto_compact_token_limit;GPT 系列内置候选默认使用 model_context_window = 372000 和 85% 压缩阈值,并可在候选列表选择 Codex 文档 400000 或 API 文档 1050000 上下文窗口。模型未配置上下文窗口时,插件写入 model_context_window = 372000 和 model_auto_compact_token_limit = 350000。Codex 不写入最大输出窗口配置。
Codex 运行设置默认选择“不设置”。service_tier 支持 auto、default、flex、priority;model_reasoning_effort 支持 minimal、low、medium、high、xhigh、max;sandbox_mode 支持 read-only、workspace-write、danger-full-access;approval_policy 支持 untrusted、on-request、never。
opencode
opencode 页面会写入 opencode.json:
model
provider.<provider>.npm
provider.<provider>.name
provider.<provider>.options.baseURL
provider.<provider>.options.apiKey
provider.<provider>.models
provider.<provider>.models.<model>.limit.context
provider.<provider>.models.<model>.limit.output
provider.<provider>.models.<model>.options.reasoningEffort
compaction.reserved
opencode 的 npm 值来自 Provider 中配置的 opencode npm。
opencode 使用以下换算:
compaction.reserved = contextWindow - floor(contextWindow × compactThresholdPercent / 100)
opencode 会写入 Provider 中的全部模型 ID,模型参数按需写入。填写上下文窗口时写入 limit.context,填写最大输出时写入 limit.output,两者都未填写时仍写入模型 ID,但不生成 limit。limit.output 表示模型可生成的最大 token,插件保留 Provider 模型中配置的值,并通过 Provider 模型校验保证最大输出不大于上下文窗口。压缩阈值和上下文窗口都已填写时,插件计算 compaction.reserved;未填完时清理压缩配置。所选模型的 reasoningEffort 支持 none、minimal、low、medium、high、xhigh、max。
快速切换模型
插件提供三个快速切换模型命令:
LLM-Switch: Quick Switch Claude Model
LLM-Switch: Quick Switch Codex Model
LLM-Switch: Quick Switch Opencode Model
快速切换行为:
- 候选项来自支持对应 Agent 的 Provider 和模型列表,并显示模型参数摘要。
- 候选项显示为
Provider / model。
- Quick Pick 会显示当前配置的模型。
- 当前匹配项会标记为
当前。
- Claude 如果多个模型环境变量不一致,会提示当前模型不一致,并显示各模型出现次数。
- 选择 Claude 模型后,会把 5 个 Claude 模型环境变量统一切换到所选模型。
- Claude 候选包含普通版和
[1M] 版。
- 选择 Claude、Codex 或 opencode 模型后,会继续选择 effort;取消 effort 选择会停止本次切换。
- 选择 Codex 模型后,会修改 Codex
model_provider、model、model_providers、model_reasoning_effort 和 auth.json。
- 选择 opencode 模型后,会修改 opencode
model、所选模型的 options.reasoningEffort 和对应 Provider 配置。
配置备份
保存 Agent 配置时,如果写入内容和当前文件内容不同,插件会先备份旧文件。
备份规则:
- 备份文件保存在原配置文件同目录。
- 命名格式为
<原文件名>.bak.<数字>,例如 settings.json.bak.1。
.bak.1 是最近一次保存前的内容。
- 旧备份依次移动到
.bak.2、.bak.3、.bak.4、.bak.5。
- 最多保留 5 个备份,超过后删除最旧备份。
- 内容没有变化时不会生成新备份。
- Codex 的
config.toml 和 auth.json 会分别备份。
VS Code 命令
| 命令标题 |
命令 ID |
作用 |
LLM-Switch: Open Manager |
llm-switch.openManager |
打开 LLM-Switch 管理页面。 |
LLM-Switch: Open Claude Config |
llm-switch.openClaudeConfig |
打开 Claude 配置文件。 |
LLM-Switch: Open Codex Config |
llm-switch.openCodexConfig |
分栏打开 Codex config.toml 和 auth.json。 |
LLM-Switch: Open Opencode Config |
llm-switch.openOpencodeConfig |
打开 opencode 配置文件。 |
LLM-Switch: Quick Switch Claude Model |
llm-switch.quickSwitchClaudeModel |
快速选择 Provider 模型并应用到 Claude。 |
LLM-Switch: Quick Switch Codex Model |
llm-switch.quickSwitchCodexModel |
快速选择 Provider 模型并应用到 Codex。 |
LLM-Switch: Quick Switch Opencode Model |
llm-switch.quickSwitchOpencodeModel |
快速选择 Provider 模型并应用到 opencode。 |
LLM-Switch: Set Claude Effort |
llm-switch.setClaudeEffort |
设置 Claude effortLevel。 |
LLM-Switch: Set Codex Effort |
llm-switch.setCodexEffort |
设置 Codex model_reasoning_effort。 |
LLM-Switch: Set Opencode Effort |
llm-switch.setOpencodeEffort |
设置 opencode 所选模型的 options.reasoningEffort。 |
存储位置
- 插件声明为 workspace 扩展;Remote SSH 场景下运行在远程 Extension Host。
- Provider 数据保存在扩展运行环境的
globalStorageUri/providers.json,其中包含 API key。
- Agent 配置文件路径保存在扩展运行环境的
globalStorageUri/agentConfigPaths.json。
- 插件管理的 Agent 字段和值保存在扩展运行环境的
globalStorageUri/managedAgentConfig.json。
- Claude、Codex、opencode 的实际配置写入各自的配置文件。
开发
安装依赖:
npm install
编译:
npm run compile
运行编译和模型参数测试:
npm test
在 VS Code 中按 F5 启动 Extension Development Host,然后执行 LLM-Switch: Open Manager 打开管理页面。
Git 忽略
项目不会提交 node_modules/、dist/、.vsix 等依赖或构建产物。运行或打包前请在本地安装依赖并编译。