
1. 为什么纯文本模型在 Claude Desktop 里“看不见”图片你在 Claude Desktop 里通过 3p Gateway 接入了 DeepSeek文本对话一切正常。然后你随手拖进去一张报错截图问“这个错误怎么解决”DeepSeek 回你一句“我看到了你上传了一张图片但我无法读取图片内容。”这不是 DeepSeek 的错。DeepSeek 的文本模型本身就不具备视觉输入能力它的输入通道里没有 image block 这个类型。Claude Desktop 把图片按 Anthropic Messages 格式打包发出去DeepSeek 收到之后只能忽略或拒绝图片部分。问题出在链路中间缺了一段从图片到文本的翻译层。我试过直接在 Claude Desktop 里换一个支持视觉的模型来用但那样就失去了 DeepSeek 在代码和推理上的优势。更合理的做法是在 Claude Desktop 和 DeepSeek 之间加一个本地代理让它拦截请求、检查有没有图片、有图片就先调视觉模型生成描述、把描述塞回请求里再转发给 DeepSeek。这篇文章要交付的就是这套视觉代理的最小可用配置一份可复制的settings.json/config.toml骨架、本地代理的启动参数、以及一次端到端的读图验证动作。适合正在用 Claude Desktop 3p Gateway 接 DeepSeek、又需要处理截图和图片问答的开发者。2. 前置准备TaoToken 与视觉模型接入在配置本地代理之前你需要先确认两件事DeepSeek 的 Anthropic 兼容接口能通以及视觉模型的 API Key 已经就位。DeepSeek 侧走的是 Anthropic 兼容路径base URL 是https://api.deepseek.com/anthropic。Claude Desktop 的 3p Gateway 会把 Anthropic Messages 请求拼到这个地址后面所以你的代理最终转发目标就是https://api.deepseek.com/anthropic/v1/messages。视觉模型侧代理需要调用一个 VL 或 OCR 模型来读图。你可以用 ModelScope 或硅基流动的视觉服务代理从环境变量读取对应的 Key。如果你还没有视觉模型的 Key可以通过 TaoToken 的模型对话页面先验证一下视觉模型能不能正常读图确认链路通之后再写进代理配置。TaoToken 在这里的角色是帮你快速验证模型可用性而不是替代你的代理层。你可以先在模型对话里上传一张截图看视觉模型返回的描述质量如何再决定用哪个模型别名写进代理配置。注意视觉模型的 Key 不要写死在代码或配置文件里用环境变量注入代理进程启动时读取。3. 可复制配置settings.json 与 config.toml 骨架本地代理的核心配置分两块Claude Desktop 侧的 3p Gateway 配置以及代理自身的运行配置。3.1 Claude Desktop 3p Gateway 配置Claude Desktop 的 3p 配置库目录在C:\Users\你的用户名\AppData\Local\Claude-3p\configLibrary其中_meta.json负责声明当前启用哪个 provider{ appliedId: 00000000-0000-4000-8000-000000157210, entries: [ { id: 00000000-0000-4000-8000-000000157210, name: Vision Proxy } ] }provider JSON 文件00000000-0000-4000-8000-000000157210.json负责网关地址和鉴权{ inferenceProvider: gateway, inferenceGatewayBaseUrl: http://127.0.0.1:9980/anthropic, inferenceGatewayAuthScheme: bearer, inferenceGatewayApiKey: 你的 DeepSeek API Key, inferenceModels: [ {name: claude-sonnet-4-6}, {name: claude-opus-4-8}, {name: claude-haiku-4-5} ], coworkEgressAllowedHosts: [*], disableDeploymentModeChooser: true }关键字段是inferenceGatewayBaseUrl它指向本地代理的 Anthropic 兼容入口。Claude Desktop 后续会把/v1/messages拼到这个 base URL 后面代理再转发到 DeepSeek。inferenceModels里写的是 Claude-facing 的模型名代理内部会做映射把它们转成 DeepSeek 实际的模型名。这样 Claude Desktop 的模型下拉列表保持自然底层转发也能正常工作。3.2 代理运行配置 config.toml代理自身的配置建议用 TOML 管理放在项目根目录或用户配置目录下[proxy] host 127.0.0.1 port 9980 anthropic_path /anthropic admin_path /admin [upstream] base_url https://api.deepseek.com/anthropic timeout_seconds 120 [vision] provider siliconflow model qwen3-vl-8b timeout_seconds 60 max_image_size_mb 10 enable_rewrite true [vision.aliases] paddleocr PaddlePaddle/PaddleOCR-VL-1.5 qwen3-vl-8b Qwen/Qwen3-VL-8B-Instruct qwen3-vl-32b Qwen/Qwen3-VL-32B-Instruct [cache] enable true dir C:\\Users\\你的用户名\\.claude\\vision_proxy_http [log] level info dir C:\\Users\\你的用户名\\.claude\\vision_proxy_http[vision]段里的provider和model决定用哪个视觉服务。enable_rewrite控制是否开启图片改写调试阶段可以先关掉确认请求能正常转发后再打开。3.3 环境变量注入代理进程启动前需要把视觉模型的 Key 注入环境变量# Windows PowerShell $env:SILICONFLOW_API_KEY你的硅基流动Key $env:MODELSCOPE_API_KEY你的ModelScope Key # macOS / Linux export SILICONFLOW_API_KEY你的硅基流动Key export MODELSCOPE_API_KEY你的ModelScope Key代理启动时会读取这些变量管理页面里也能看到 Key 是否已经被当前进程读取。3.4 启动代理# 假设代理可执行文件为 vision_proxy ./vision_proxy --config ./config.toml # 或者用 Python 启动 python -m vision_proxy --config ./config.toml --port 9980启动后你应该能看到类似输出[INFO] Vision Proxy listening on 127.0.0.1:9980 [INFO] Anthropic endpoint: http://127.0.0.1:9980/anthropic [INFO] Admin page: http://127.0.0.1:9980/admin [INFO] Upstream: https://api.deepseek.com/anthropic [INFO] Vision provider: siliconflow / qwen3-vl-8b如果端口被占用改config.toml里的port同时记得同步更新 Claude Desktop provider JSON 里的inferenceGatewayBaseUrl。4. 验证请求一次端到端读图动作配置写完之后不要急着在 Claude Desktop 里试。先用 curl 直接打代理的 Anthropic 入口确认链路能通。4.1 纯文本请求验证curl -X POST http://127.0.0.1:9980/anthropic/v1/messages \ -H Content-Type: application/json \ -H x-api-key: 你的DeepSeek Key \ -H anthropic-version: 2023-06-01 \ -d { model: claude-sonnet-4-6, max_tokens: 256, messages: [ {role: user, content: 用一句话说明什么是本地代理} ] }如果返回正常的文本回答说明代理到 DeepSeek 的转发链路已经通了。4.2 带图片的请求验证准备一张本地图片转成 base64然后构造带 image block 的请求# 先把图片转成 base64 base64 -w 0 test.png test_b64.txt # 构造请求 curl -X POST http://127.0.0.1:9980/anthropic/v1/messages \ -H Content-Type: application/json \ -H x-api-key: 你的DeepSeek Key \ -H anthropic-version: 2023-06-01 \ -d { model: claude-sonnet-4-6, max_tokens: 512, messages: [ { role: user, content: [ { type: image, source: { type: base64, media_type: image/png, data: $(cat test_b64.txt) } }, { type: text, text: 这张图里有什么 } ] } ] }代理收到请求后会做几件事解析 Anthropic Messages 格式、检测到 image block、调用视觉模型生成图片描述、把 image block 改写成 text block、转发给 DeepSeek。如果一切正常你会看到 DeepSeek 返回的回答里包含了对图片内容的描述而不是“我无法读取图片内容”。4.3 管理页面确认打开http://127.0.0.1:9980/admin你可以看到检查项预期状态视觉 providersiliconflow 或 modelscope视觉模型qwen3-vl-8b 或你配置的别名API Key 读取已读取图片改写开启最近一次请求包含 image block改写后请求image block 已变成 text block如果“最近一次请求”里没有 image block说明 Claude Desktop 或 curl 没有正确发出图片。如果“改写后请求”里 image block 还在说明代理的改写逻辑没生效检查enable_rewrite是否为 true。5. 本篇常见错排查5.1 代理启动报错“端口被占用”9980 端口被其他进程占用。用netstat -ano | findstr 9980找到占用进程或者直接改config.toml里的port。改完之后记得同步更新 Claude Desktop provider JSON 里的inferenceGatewayBaseUrl否则 Claude Desktop 还是会往旧端口发请求。5.2 Claude Desktop 里模型回答“我看不到图片”按链路顺序排查第一Claude Desktop 有没有真的发出 image block。打开管理页看“最近一次请求”如果里面没有 image block说明 Claude Desktop 没有把图片传出来检查你是不是在支持图片的对话界面里上传的。第二代理有没有识别到图片。如果“最近一次请求”里有 image block但“改写后请求”里没有 text block 替换说明代理的图片提取逻辑没触发检查enable_rewrite和视觉 provider 配置。第三视觉 API Key 有没有读取成功。管理页里看 Key 状态如果是“未读取”检查环境变量名是否和config.toml里写的一致。第四视觉模型有没有返回描述。看代理日志里有没有视觉模型的调用记录和返回内容。如果视觉模型超时调大vision.timeout_seconds。第五改写后的请求里 image block 是否已经变成 text block。如果还是 image blockDeepSeek 依然读不到。5.3 视觉模型返回的描述质量差不同视觉模型擅长的场景不一样。截图、代码界面、表格类图片PaddleOCR-VL 的 OCR 能力更强普通视觉问答用 Qwen3-VL-8B 就够复杂图表再切到 Qwen3-VL-32B。在config.toml里改vision.model即可切换不需要改代理代码。5.4 修改配置后 Claude Desktop 没生效Claude Desktop 不一定会实时重新读取 3p 配置。改完_meta.json或 provider JSON 之后重启一次 Claude Desktop。这个步骤看起来笨但最可靠。5.5 想恢复原来的 3p 配置代理在修改配置前会自动备份到configLibrary\vision-proxy-backups。管理页里有 Restore Selected Backup恢复前也会先给当前状态做一次备份避免恢复错了回不去。6. 继续接入与长期使用建议如果你只是想让 DeepSeek 在 Claude Desktop 里能读图上面的配置已经够用了。代理跑在127.0.0.1:9980Claude Desktop 的 3p Gateway 指向它视觉模型通过环境变量注入 Key图片描述有缓存请求日志落在本机用户目录下。日常使用中如果你需要长期跑编码任务或 Agent 工作流可以考虑用 Coding Plan 来管理模型调用配额和路由策略避免每次手动切换模型别名。如果你还需要验证其他视觉模型的效果模型对话页面可以快速上传图片做对比测试。接入文档里有完整的 API 参数说明和错误码对照配置过程中遇到字段不明确的地方可以直接查。API Key 的管理在 API Keys 页面建议给代理单独建一个 Key方便排查和轮换。这套方案的核心思路是不改 Claude Desktop 主程序不改 DeepSeek 模型本身只在中间加一层本地代理把图片问题翻译成文本问题。代理的配置骨架和验证动作都已经在上面了你可以直接复制config.toml和 provider JSON改掉路径和 Key启动代理然后在 Claude Desktop 里上传一张截图试试。