为什么需要本项目?
AI CLI 工具配上不支持图片的第三方模型,这事儿有多坑,只有踩过坑的人才懂。Claude Code、OpenCode 这类工具,本身很能打,但一旦套上 DeepSeek 这种不支持多模态的模型,图片理解就成了一个黑洞区域。
传统方案的死结
大多数人的第一反应,是在全局 CLAUDE.md 里写规则,强行要求模型用某个 Skill 或 MCP 去处理图片。这个思路听起来没毛病,但实际跑起来就会碰上一个绕不过去的硬伤:
Claude Code 在系统层面硬编码了一条指令——粘贴图片时必然调用 read 工具,直接把图片原样丢给模型。这条系统指令的优先级高于 CLAUDE.md,所以不管你在规则文件里怎么写,它都拦不住。
结果呢?Ctrl+V 一张截图,模型拿到的是海量 base64 数据——不支持图片的模型要么直接报错,要么胡说八道。整段对话就此报废,根本无法继续。
更让人头疼的是,日常 Debug 时很少有人会先把截图存成文件再传给工具——直接截图、粘贴到剪贴板、Ctrl+V 三步搞定才是天经地义的工作流。传统方案只适合“先保存为文件,再给路径”的场景,跟真实使用习惯完全不搭。
本项目的解法
两套机制组合拳:图片整流器 + 图片分析技能。
| 场景 | 传统方案 | 本项目 |
|---|---|---|
| Ctrl+V 粘贴剪贴板图片到 Claude Code | ❌ 系统硬编码 read,直接发给模型,对话烂掉 |
✅ 整流器在袋里层拦截,替换为文本提示,引导模型调用 Skill |
| 给定图片文件路径 | ⚠️ CLAUDE.md 规则勉强可用,但不同 CLI 行为不一致 |
✅ 整流器统一拦截,不依赖 MD 文件规则 |
| OpenCode 粘贴剪贴板图片 | ❌ OpenCode 不生成临时文件,路径都拿不到 | ✅ Skill 脚本自动检测:有路径读文件,没路径直接从剪贴板读取 |
| 多 Provider 切换 | ❌ 单个模型挂了就挂了 | ✅ Fallback 机制,30+ Provider 自动切换 |
两层防线的分工
图片整流器(袋里层) —— 在请求发出前进行拦截。它会扫描 messages 中的 base64 图片块,移除原始数据,替换为一段文本提示,引导模型去调 Skill。整个过程在模型看到请求之前就完成了。
图片分析技能(CLI 工具) —— 被模型调用后,智能判断图片来源:传了本地路径就读文件,没传路径就从系统剪贴板直接读。兼容 Claude Code(粘贴会生成临时文件)和 OpenCode(粘贴不生成临时文件)两种行为。
原项目简介
CC Switch 本质上是一款管理 AI CLI 工具的桌面应用, Claude Code, Codex, Gemini CLI, OpenCode 这类 CLI 工具的管理器都有了但它还能搞定 Provider 管理; MCP/Skills ...manage and usage statistics are also included in order to seamlessly organize everything within a single place and control panel; This fork adds functionality specifically designed for scenarios where AI CLI toolsinterface with third-party APIs that lack multimodal (visual understanding) support, solving那個 pain point regarding图片输入, 虽然 CC Switch 原本是管理 CLI工具的角色, 但这个 fork在此基础上增加了针对图片输入的处理能力直击痛点: 大量第三方 API 供应商不支持多模态输入/视觉理解。
本分支新增功能
1. 图片整流器
核心要解决的问题: 大量第三方 API 供应商(尤其是中转站、非官方接口)根本不支持多模态。一旦请求的 messages 数组里出现 type: "image" 的 base64 图片块,这些供应商要么报错,要么行为怪异。
解决方案: 整流器在袋里层充当拦截器,在请求转发之前抢先一步。它扫描 messages[*].content,一旦发现 type: "image" 块,就直接移除 base64 数据(通常有好几 MB),替换成一段文本提示,引导模型调用指定的 skill 来处理图片。
关键特性:
- 自动检测并替换 messages 中的
type: "image"块 - 有图片缓存引用时会自动提取文件路径拼入提示
- 可配置调用的 skill 名称(默认
image-analysis) - 与下方的图片分析技能无缝配合
配置方式: 在 CC Switch 的「路由设置 → 整流器区域 → 图片整流器」中打开开关,还能按需修改 skill 名称。
2. 图片分析技能
一个独立的 Python 命令行图片视觉识别工具,兼容任何能执行 Shell 命令的 AI CLI。换句话说,只要你的 CLI 能跑命令,它就能用。
核心能力:
- 支持本地图片(jpg/png/gif/webp/bmp)、网络图片 URL、系统剪贴板(macOS AppleScript)
- 多图对比——多次使用
--image参数即可 - Fallback 机制:按配置顺序依次尝试所有 provider,失败自动切换,第一个成功的结果会标注
[provider名]后返回
预置了 30+ AI Provider,这里列举部分:
| 平台 | 代表模型 |
|---|---|
| 火山引擎 | 豆包 Seed 2.0 Pro/Lite/Mini、Vision 250815 |
| 硅基流动 | Qwen3.6-35B-A3B、Qwen3.6-27B |
| 阿里百炼 | Qwen3.6 Plus/Flash、Qwen3.5 Omni、Kimi K2.6、MiniMax M2.5 |
| 智谱 | GLM-4.6V-Flash |
| 商汤 | SenseNova-6.7-Flash-Lite |
与图片整流器的联动逻辑:当某模型不支持图片时,整流器将图片块替换成文本提示,引导模型去调用 Skill;模型收到指令后自动通过 CLI 完成实际视觉分析。整个过程对用户透明,你不需要手动去执行 Python 脚本。
3. dev.sh — 开发启动脚本
封装了 pnpm tauri dev / pnpm tauri build 的便捷脚本:
./dev.sh # Debug 模式(默认)
./dev.sh debug # Debug 模式(含请求体打印)
./dev.sh release # Release 模式
./dev.sh build # Release 编译
脚本中预置了 CARGO_HTTP_PROXY,方便国内网络环境下编译 Rust 依赖。
安装
从源码编译:
git clone https://github.com/piaomiaoguying/cc-switch.git
cd cc-switch
./dev.sh build
使用流程
第一步:注册 AI Provider 并获取 API Key
项目预置了多个平台的视觉模型,都有免费额度。选自己习惯的平台注册即可:
| 平台 | 代表模型 | 注册地址 |
|---|---|---|
| 阿里百炼 | Qwen3.6 Plus/Flash、Qwen3.5 Omni 等 | dashscope.aliyun.com |
| 智谱 | GLM-4.6V-Flash | open.bigmodel.cn |
| 硅基流动 | Qwen3.6-35B-A3B 等 | siliconflow.cn |
| 火山引擎 | 豆包 Seed 2.0 Pro/Lite/Mini | console.volcengine.com |
| 商汤 | SenseNova-6.7-Flash-Lite | platform.sensenova.cn |
注册后获取 API Key,填入 Skill 配置文件:
cp skills/image-analysis/scripts/config.example.json skills/image-analysis/scripts/config.json
# 编辑 config.json,将各个平台的 API Key 填入对应字段
第二步:配置全局 CLAUDE.md
在全局 CLAUDE.md(路径 ~/.claude/CLAUDE.md)中加入以下规则,禁止直接使用 read 工具读取图片:
## 图片处理规范
禁止使用 `read` 工具读取任何图片文件(如 .png, .jpg, .jpeg)
必须使用 image-analysis 这个 skill 来分析图片
当模型返回不支持直接接收图片输入时,自动调用 image-analysis 这个 skill 来分析图片
第三步:导入 Skill 到 AI CLI
推荐通过 CC Switch 统一管理 Skill,避免手动复制文件夹的麻烦:
- 将
skills/image-analysis配置文件夹放在 CC Switch 目录下 - 打开 CC Switch → Skills 管理
- 在 Claude Code 和 OpenCode 对应的 Skill 开关处,开启
image-analysis
这样 CC Switch 会自动将 Skill 同步到各 CLI 的 Skill 目录。
第四步:配置 CC Switch 路由与整流器
这一步最关键,需要打开三层开关:
① 打开本地路由
进入 CC Switch → 路由设置:
- 打开本地路由总开关
- 打开 Claude Code 的路由开关(容易漏掉:总开关开了但 Claude Code 开关没开)
② 配置图片整流器
在路由设置界面往下滑,找到整流器区域:
- 打开整流器总开关
- 打开图片整流器开关
- 在 Skill 名称输入框中填入
image-analysis
完成
以上配置完成后,正常启动的 Claude Code 实例通常能立即生效。如果老的实例没反应,重启一个新实例即可。此时模型的网络请求会经过 CC Switch 袋里,CC Switch 会对会话数据进行拦截修改。
之后的整体流程是这样的:
Ctrl+V 粘贴图片 → CC Switch 袋里拦截 → 移除 base64,替换为文本提示
→ 模型收到文本,调用 image-analysis Skill → Skill 读取图片并返回分析结果
从实际体验来看,这套方案最大的价值在于:它跟人的自然工作流完全对齐——不需要提前存文件、不需要手动切工具、不需要担心不同 CLI 之间行为不一致。对于经常跟不支持多模态的模型打交道的人来说,算是真正解决了核心痛点。
