CC Switch 中 Claude Desktop 第三方供应商接入实战:直连模式、模型映射与本地路由原理
本文以 CC Switch 的 Claude Desktop 供应商面板为主线,完整讲解如何把 Anthropic 兼容的第三方 API 接入 Claude Desktop:包括从 Claude Code 一键导入供应商、直连模式与模型映射模式两种工作模式的选择、本地路由(127.0.0.1:15721/claude-desktop)的开关逻辑,以及 3P profile 配置文件的落盘位置与故障排查方法。读完本文,你可以独立完成 Claude Desktop 与 Claude Code 的供应商复用,并结合 CC Switch 源码理解 profile 写入、网关 token 生成与请求模型映射的底层实现。
一、功能概览与适用范围
Claude Desktop 面板允许你在 CC Switch 上集中管理 Claude Desktop 的供应商配置。启用后可以做到:
- 在 Claude Desktop 中使用第三方 Anthropic 兼容供应商;
- 为非“三角色 ID”模型建立映射:旧式 Claude ID(如
claude-3-5-sonnet)以及 DeepSeek / Kimi / 豆包(DouBao)/ OpenAI / Gemini 等非 Claude 模型都需要映射; - 复用 Copilot / Codex OAuth / xAI OAuth 等账号型供应商;
- 在 Claude Desktop 官方模式与第三方供应商之间来回切换。
这里有一个容易混淆的概念:Claude Desktop 与 Claude Code 是两个独立的应用入口。Claude Code 读写 ~/.claude/settings.json,而 Claude Desktop 使用专用的 3P(third-party)profile 配置。在 CC Switch 中两者也分别显示为“Claude”和“Claude Desktop”两个入口,图标右下角的小徽章用于区分。另外,Claude Desktop 的 3P profile 不使用 CC Switch 的 MCP / Skills 同步能力,这一点在做同步规划时需要注意。
适用范围速查表:
| 项目 | 说明 |
|---|---|
| 支持系统 | macOS、Windows |
| 未支持 | Linux 上的 Claude Desktop 3P 配置写入 |
| 生效方式 | 切换供应商后需重启 Claude Desktop |
| 官方模式 | 使用 Claude Desktop 内置登录,无需 API Key 与端点 URL |
| 第三方模式 | 写入 CC Switch 管理的 3P profile |
| MCP / Skills | 不进入 Claude Desktop 3P profile 同步 |
从源码结构看,平台限制由 claude_desktop_config.rs 中的 is_supported_platform()(cfg!(any(target_os = "macos", windows)))决定:非 macOS/Windows 平台会直接返回“平台不受支持”的错误,这与文档表格中“Linux 未支持”的说明完全一致。
二、快速上手
步骤 1:进入 Claude Desktop 面板
在左侧应用切换器中选择 Claude Desktop。如果看不到该入口,检查:设置 → 一般 → 主页显示,确认 Claude Desktop 没有被隐藏。
步骤 2:导入或新增供应商
推荐:从 Claude Code 批量导入。 多数用户会先在 Claude Code 侧配好供应商,希望同一批供应商也能用于 Claude Desktop。CC Switch 在首次启动或首次打开 Claude Desktop 面板且其中没有供应商时,会提示 导入 Claude Code 现有供应商。
如果 Claude Code 侧已有较多供应商,可以借此一键批量导入到 Claude Desktop 面板,不必逐个重填端点 URL、API Key 与默认模型。导入规则如下:
- 已存在相同 ID 的供应商不会被覆盖;
- 模型名能直接使用三个角色 ID(
claude-sonnet-*/claude-opus-*/claude-haiku-*)直连的供应商,以直连模式导入; - 模型名不属于三个角色 ID(含旧式 Claude ID)或需要格式转换的供应商,在可判定情况下以模型映射模式导入;
ANTHROPIC_DEFAULT_SONNET_MODEL、ANTHROPIC_DEFAULT_OPUS_MODEL、ANTHROPIC_DEFAULT_HAIKU_MODEL会被转换成 Claude Desktop 的 Sonnet / Opus / Haiku 映射;- 旧式
[1M]后缀会被翻译成 Claude Desktop profile 中的supports1m标志——源码常量 ONE_M_CONTEXT_MARKER 注明了这一点:Claude Code 的环境变量习惯用[1M]后缀声明 1M 上下文,而 Claude Desktop 的 schema 不接受该后缀,因此在导入边界处翻译为supports1m字段; - 无法判断模型映射的供应商会被跳过。
导入后请核对每个供应商的模型映射是否与真实上游模型一致。除三个角色 ID 外的模型(Kimi、DeepSeek、GLM、豆包等非 Claude 模型或旧式 Claude ID)通常需要模型映射模式。
如果没有可导入的配置,或者想为 Claude Desktop 专属添加供应商,点击面板右上角的 + 按钮,可选三种方式:
- 预设供应商:从内置的 Claude Desktop 预设中选择(预设定义见 claudeDesktopProviderPresets.ts),只需填写 API Key;
- 自定义配置:手动填写名称、端点 URL、API Key、模型配置;
- Claude Desktop Official:恢复 Claude Desktop 官方登录模式。
对于已经接受三个角色 ID(claude-sonnet-* / claude-opus-* / claude-haiku-*)的原生 Anthropic Messages API 供应商,基本操作只有五步:
- 选择预设或自定义供应商;
- 填写 API Key;
- 确认 API 端点;
- 保持 需要模型映射 为关闭状态;
- 点击 添加。
步骤 3:切换并重启 Claude Desktop
在供应商卡片上点击 启用。切换后:
- 直连供应商:重启 Claude Desktop 即生效;
- 需要路由的供应商:保持 CC Switch 运行,打开 Claude Desktop 本地路由,再重启 Claude Desktop。
注意:Claude Desktop 不像 Claude Code 那样热加载配置。每次切换供应商,都需要把 Claude Desktop 完全退出后重新打开。
三、两种工作模式
3.1 直连模式
直连模式适用于供应商自身提供 Anthropic Messages API、Claude Desktop 可以直接访问的场景。此时 CC Switch 把 Claude Desktop 的 3P profile 指向供应商端点:
{
"inferenceProvider": "gateway",
"inferenceGatewayBaseUrl": "https://api.example.com",
"inferenceGatewayAuthScheme": "bearer",
"inferenceGatewayApiKey": "your API key"
}
这段 JSON 并非手写,而是由 build_gateway_profile() 生成。从源码可以看到,CC Switch 实际写入的字段还包括 coworkEgressAllowedHosts: ["*"] 与 disableDeploymentModeChooser: true,以及(当配置了模型规格时)inferenceModels 数组。
直连模式的适用条件:
- 供应商公开原生 Anthropic Messages API;
- 模型 ID 是 Claude Desktop 认识的角色名:
claude-sonnet-*、claude-opus-*、claude-haiku-*(或带anthropic/claude-前缀的同族名称); - 无需格式转换;
- 使用时不需要保持 CC Switch 本地路由常驻。
源码中的准入校验 validate_direct_provider() 对上述条件做了硬性约束:
api_format必须为空或anthropic,否则报“Claude Desktop 第一阶段只支持原生 Anthropic Messages API”;provider_type为github_copilot/codex_oauth/xai_oauth的账号型供应商不允许直连(这类供应商需要本地代理转换,应走模型映射模式);- 直连凭据来自供应商的
env配置:ANTHROPIC_BASE_URL作为网关地址、ANTHROPIC_AUTH_TOKEN作为 Bearer Token,两者缺一不可(见 direct_gateway_credentials())。
直连模式下的“手动指定 Claude Desktop 模型”是高级可选项:多数原生 Claude 模型供应商不需要,Claude Desktop 会自动拉取 /v1/models。只有当供应商的 /v1/models 不可用、或返回的模型名无法被 Claude Desktop 识别时才手动添加,且手填的模型名必须是 claude-sonnet-* / claude-opus-* / claude-haiku-* 形式(claude-3-5-sonnet-… 这类旧式 ID 会被拒绝)。这条规则对应 is_claude_safe_model_id():它要求去掉 claude- 或 anthropic/claude- 前缀后,剩余部分必须以 sonnet- / opus- / haiku- / fable- 开头且不能为空——注释里说明,claude-sonnet- 这类退化值会被拒绝,因为会触发 Claude Desktop 的 fail-all 校验、导致整组模型被拒收。直连模式下还禁止“route 名 → 其他模型”的映射(direct_inference_model_specs() 中一旦发现 upstream_model != route_id 就报错并提示改用本地路由模式)。
3.2 模型映射模式
当供应商模型不属于三个角色 ID(旧式 Claude ID、DeepSeek、Kimi 等非 Claude 模型),或需要 CC Switch 做 API 格式转换时,应启用 需要模型映射。开启后,Claude Desktop 连接的是 CC Switch 的本地网关:
http://127.0.0.1:15721/claude-desktop
这个地址不是硬编码在 profile 里就完事的:proxy_gateway_base_url_from_db() 在每次写入 profile 时读取本地代理实际监听地址与端口,再拼接 /claude-desktop 前缀(常量 CLAUDE_DESKTOP_PROXY_PREFIX),保证端口配置变化后 profile 仍指向正确的网关。
启用模型映射模式后,CC Switch 负责四件事:
- 向 Claude Desktop 暴露安全的 Claude 模型路由;
- 把 Desktop 中选择的模型角色映射为真实上游模型;
- 按供应商情况在 Anthropic / OpenAI / Gemini 请求格式之间转换;
- 使用 CC Switch 中保存的供应商凭据访问上游。
支持的 API 格式:
| 格式 | 用途 |
|---|---|
| Anthropic Messages | 原生或兼容 Anthropic 请求 |
| OpenAI Chat Completions | OpenAI 兼容 /chat/completions |
| OpenAI Responses API | OpenAI Responses 兼容端点 |
| Gemini Native generateContent | Gemini 原生 API |
这一点与后端路由注册一致:本地代理服务器在 proxy/server.rs 中为 Claude Desktop 3P 网关单独注册了 /claude-desktop/v1/models(GET)和 /claude-desktop/v1/messages(POST)两条路由,与 Claude Code / Codex 的路由相互隔离。
请求进来后的模型映射逻辑在 map_proxy_request_model():先按精确 route 匹配,找不到时尝试 Opus 别名兼容,再做“角色关键词回落”——Claude Desktop 的子 agent 等调用可能请求带发布日期的完整官方名(如 claude-haiku-4-5-20251001),而 manifest 暴露的是简短 route ID(claude-haiku-4-5),代码会按 opus/haiku/sonnet/fable 归入同档已配置路由,且只对 Claude Desktop 认可的安全模型名做这种宽松匹配,避免非 Claude route 被误映射。
模型映射模式下,Claude Desktop 只能看到 claude-sonnet-* / claude-opus-* / claude-haiku-* 三种角色路由,真实上游模型名不会写进 Claude Desktop profile——它保存在 CC Switch 的供应商配置里,在请求经过本地网关时完成映射。profile 中的 API Key 位置则放一个 CC Switch 自生成的网关 token:get_or_create_gateway_token() 在数据库设置键 claude_desktop_gateway_token 下生成形如 ccs-{uuid} 的一次性 token,用于区分来自 Claude Desktop 3P 网关的流量。
四、模型映射的配置
字段说明
| 字段 | 说明 |
|---|---|
| 模型角色 | Claude Desktop 认识的 Sonnet / Opus / Haiku 路由 |
| 菜单显示名 | 在 Claude Desktop 模型菜单中展示的名称 |
| 请求模型 | 实际发给供应商的上游模型 ID |
| 1M | 向 Claude Desktop 声明支持 1M 上下文 |
这些字段最终会落进 profile 的 inferenceModels 数组:带 labelOverride(菜单显示名)或 supports1m 的条目以对象形式写出,否则退化为纯字符串(见 inference_model_json())。
推荐配置
使用 Kimi:
| 模型角色 | 菜单显示名 | 请求模型 | 1M |
|---|---|---|---|
| Sonnet | Kimi K2 | kimi-k2 |
按供应商能力 |
使用 DeepSeek:
| 模型角色 | 菜单显示名 | 请求模型 | 1M |
|---|---|---|---|
| Sonnet | DeepSeek V4 Pro | deepseek-v4-pro |
按供应商能力 |
原因是当前 Claude Desktop 会拒绝 Sonnet / Opus / Haiku 角色族以外的模型,所以必须借 CC Switch 的路由功能做一次模型映射。
多角色映射
可以同时配置 Sonnet、Opus、Haiku 三个角色:
| 模型角色 | 推荐用途 |
|---|---|
| Sonnet | 默认主力模型 |
| Opus | 高质量或复杂任务 |
| Haiku | 高速、低成本模型 |
如果供应商只有一个模型,只填一个角色的请求模型即可:空角色会自动继承第一个填入的模型(优先 Sonnet),因此子 agent 调用 Haiku 时也不会落空。模型映射模式至少需要一个请求模型——后端 proxy_model_routes() 在校验阶段就会因“至少需要一个模型路由映射”而拒绝空配置。
还有一个细节值得注意:当某条映射的 route ID 不是合法的 Claude 安全模型名时,proxy_model_routes() 会调用 next_catalog_safe_route_id() 自动分配一个安全路由 ID(按 sonnet → opus → haiku → fable 顺序借用默认角色名,用完再递增 claude-sonnet-5-r2 之类),并把菜单显示名回退为上游模型名。这就是文档所说“空角色自动继承”与异常 route 仍能成功启用的底层机制。
五、本地路由开关
模型映射模式依赖 CC Switch 本地路由来做请求转换。本地路由功能强大但也稍显复杂,为避免误操作,主页面默认不显示路由开关,需要时手动开启:
设置 → 路由 → 本地路由 → 打开 在主页面显示路由开关
打开后回到 Claude Desktop 面板,主页面右上角会出现 Claude Desktop 本地路由开关。
状态说明:
| 状态 | 说明 |
|---|---|
| 开 | 本地网关运行中,通常为 127.0.0.1:15721 |
| 关 | 直连供应商可用;模型映射供应商无法正常工作 |
| 加载中 | 路由服务正在启动或停止 |
前端实现见 ClaudeDesktopRouteToggle.tsx:打开时调用 startProxyServer();关闭前会检查 takeoverStatus,若 Claude / Codex / Gemini / Grok Build 中任一应用的代理接管仍在使用本地路由,停止操作会被拦截并弹出警告“其它应用正在使用代理接管,请先在设置中关闭对应应用接管,再停止本地路由”——这正是文档中“其它应用使用代理接管时,本地路由的停止可能被阻止”的来源。开关的提示文案也会实时显示当前监听地址与端口(默认端口常量 15721 见组件第 34 行)。
只有 需要模型映射 的供应商依赖本地路由;直连供应商不需要此开关。
六、恢复官方 Claude Desktop
要回到 Claude Desktop 官方登录,操作三步:
- 选择 Claude Desktop Official;
- 点击 启用;
- 重启 Claude Desktop。
CC Switch 会把 Claude Desktop 的 1P 官方模式恢复原状,并删除它管理的 3P profile。官方模式既不需要 API Key,也不需要本地路由。从 Claude Code 导入供应商时,CC Switch 还会自动把 Claude Desktop Official 一并加进来,方便随时切回。
恢复动作的具体实现是 restore_official_at_paths_inner():把两个配置文件的 deploymentMode 写回 "1p"、移除 Claude-3p 配置中 CC Switch 写入的 enterpriseConfig 相关键(inferenceProvider、inferenceGatewayBaseUrl 等)、删除 profile 文件,并清理 _meta.json 中的 applied 记录。整个写入流程还带有文件级回滚:with_rollback() 会在写盘前对全部四个文件做快照,任何一步失败即自动恢复原状。
七、配置文件位置
CC Switch 写入 Claude Desktop 的 3P 配置目录如下。
macOS
~/Library/Application Support/Claude/claude_desktop_config.json
~/Library/Application Support/Claude-3p/claude_desktop_config.json
~/Library/Application Support/Claude-3p/configLibrary/_meta.json
~/Library/Application Support/Claude-3p/configLibrary/00000000-0000-4000-8000-000000157210.json
Windows
%LOCALAPPDATA%\Claude\claude_desktop_config.json
%LOCALAPPDATA%\Claude-3p\claude_desktop_config.json
%LOCALAPPDATA%\Claude-3p\configLibrary\_meta.json
%LOCALAPPDATA%\Claude-3p\configLibrary\00000000-0000-4000-8000-000000157210.json
源码中 current_platform_paths() 按平台分别组装这些路径;固定 profile ID 00000000-0000-4000-8000-000000157210 与 profile 名称 CC Switch 定义在 claude_desktop_config.rs 顶部。写入 3P 模式时,Claude 与 Claude-3p 两个目录的 claude_desktop_config.json 都会被打上 deploymentMode: "3p" 标记(apply_provider_to_paths_inner())。
这些文件由 CC Switch 自动管理,不建议手工编辑。若出现配置不一致,通常重新启用当前供应商即可修复(借助文件快照回滚机制保证半写状态可恢复)。
八、状态检查与故障处置
Claude Desktop 面板顶部可能显示“Claude Desktop 配置需要检查”。状态检测由 get_status() 完成,它比对 profile 实际 inferenceGatewayBaseUrl 与当前模式期望地址、检查 inferenceModels 中是否有非安全模型名、网关 token 是否已生成、路由映射是否缺失。对应处置表:
| 显示 | 处置 |
|---|---|
| 当前平台不支持 | 3P 配置写入目前仅支持 macOS / Windows |
| profile 含 Sonnet / Opus / Haiku 角色族以外的模型名 | 重新切换一次当前供应商,或编辑为使用模型映射 |
| 模型映射已启用但没有有效路由 | 编辑供应商,至少添加一条模型映射 |
| 本地路由 token 未生成 | 重新切换到该供应商,CC Switch 会写入新 token |
| profile URL 与当前供应商不一致 | 重新切换当前供应商,把 profile 指回正确 URL |
九、常见问题
切换显示成功,但 Claude Desktop 没变化? 把 Claude Desktop 完全退出后重启。Claude Desktop 通常在启动时读取 3P profile,切换后不会自动热加载。
模型映射供应商请求失败? 依次检查:
- CC Switch 是否保持运行;
- Claude Desktop 本地路由是否为开;
- 供应商的 API Key 与端点 URL 是否正确;
- 模型映射中是否填了请求模型;
- 切换供应商后是否重启了 Claude Desktop。
Claude Desktop 模型菜单不显示品牌名? 编辑供应商,在模型映射的 菜单显示名 中填写名称,然后重新启用供应商并重启 Claude Desktop。
直连模式为什么报错?
直连模式要求供应商提供原生 Anthropic Messages API,并接受 Claude Desktop 的三个角色 ID(claude-sonnet-* / claude-opus-* / claude-haiku-*)。供应商使用 OpenAI、Gemini 格式、非 Claude 模型 ID 或旧式 Claude ID(如 claude-3-5-sonnet-…)时必然失败,应打开 需要模型映射 改走本地路由。
CC Switch 可以关掉吗? 取决于模式:
- 直连模式:Claude Desktop 重启并读取配置后,无需保持本地路由运行;
- 模型映射模式:必须保持 CC Switch 运行,且 Claude Desktop 本地路由为开。
真实上游模型名会写进 Claude Desktop 吗? 模型映射模式下不会。Claude Desktop profile 只保存安全的 Sonnet / Opus / Haiku 角色路由与显示名;真实上游模型名保存在 CC Switch 的供应商配置中,在请求经过本地网关时映射。
十、小结与延伸阅读
Claude Desktop 面板的核心价值在于:用同一套供应商数据打通 Claude Code 与 Claude Desktop 两个入口,并通过“直连 + 本地网关映射”双模式覆盖从原生 Anthropic 到非 Claude 系模型的全部接入场景。理解 3P profile 的字段结构、127.0.0.1:15721/claude-desktop 网关路由与状态自检逻辑,能让绝大多数“切换后不生效”的问题在三步内定位。
延伸阅读(同为用户手册章节):
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0625
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00





