用 DeepSeek 驱动 Claude Code 全家桶:CLI + 桌面版两次配置完整复盘

发布时间:2026/9/1 17:25:21
用 DeepSeek 驱动 Claude Code 全家桶:CLI + 桌面版两次配置完整复盘 把 DeepSeek 接进 Claude 生态dsh web Claude 桌面版配置复盘2026-08・Windows 11 Home・官方 Harness 网页版一次跑通、桌面版 接了网关却死活不能对话 的完整排查记录 涉及deepseek-ai/dsh (DeepSeek Harness CLI)、Claude Desktop (第三方网关 / 3p 模式)、DeepSeek Anthropic 兼容端点背景与目标手头有 DeepSeek 的 API KeyDeepSeek 官方提供了Anthropic 兼容端点https://api.deepseek.com/anthropic目标是把两个工具接入 DeepSeekdsh web—— DeepSeek 官方 Harness 的网页版类 Codex 的浏览器 UIClaude Desktop 桌面版—— 图形界面含 Chat / Code 两个可用界面第一部分配置一次通过第二部分折腾了两天最后靠反编译桌面版代码定位到根因。本文完整记录两次配置的最终方案和踩坑过程。第一部分dsh web官方 Harness 网页版工具简介dshdeepseek-ai/dsh是 DeepSeek 官方的Harness CLI核心基于 Cordis 的 profile 系统运行dsh web命令会启动一个本地 Web 服务在浏览器中呈现类 Codex 的编码代理界面。npm i -g deepseek-ai/dsh配置文件结构默认数据目录为~/.dsh/目录结构如下~/.dsh/ ├── .credentials.yaml # API Key 凭据引用 ├── settings.yaml # UI 状态与引导流程配置 └── profiles/ └── web/ # web profile首次使用自动从模板初始化 ├── package.json # dsh.profile.bundles 组合包声明 ├── cordis.yml # 空根配置不建议修改 └── cordis.patch.yml # 用户自定义覆盖层修改配置写在这里凭据文件~/.dsh/.credentials.yaml示例version: 1 refs: DEEPSEEK_API_KEY: sk-你的 DeepSeek Keyweb profile的package.json模板自带无需手动修改{ dsh: { profile: { bundles: [deepseek-ai/dsh-base, deepseek-ai/dsh-web-app] } } }配置层级规则配置树从空根开始按以下顺序逐层叠加生效dsh.profile.bundles中各组合包的内置默认 patchprofile 自身的cordis.patch.ymlweb profile 的覆盖层默认为空数组[]home 级$DSH_HOME/cordis.patch.yml全局覆盖配置--patch命令行参数叠加层日常自定义配置只需写入~/.dsh/profiles/web/cordis.patch.yml即可不要修改cordis.yml根文件。启动与使用方式cd 你的项目目录 # 启动目录即为默认 workspace 根目录 dsh web # 启动本地服务默认地址 http://localhost:8080自动打开浏览器常用启动参数dsh --profile web --port 8080 # 显式指定端口 dsh web --no-open # 启动后不自动打开浏览器手动访问 localhost:8080 dsh web --host 0.0.0.0 # 绑定所有网卡支持局域网访问日常使用只需在终端执行dsh web即可通过浏览器访问嫌麻烦可以配置 alias 或写成后台服务脚本。调试技巧不启动服务也能查看合并后的完整配置树dsh --dump-config # 查看当前生效配置 dsh --dump-default-config # 查看默认配置本部分小结官方 Harness 工具开箱即用流程为装包 → 填写 API Key → 执行dsh web。不存在模型名映射之类的兼容问题原生 DeepSeek 模型名可直接使用和下文 Claude 桌面版的接入难度形成鲜明对比。第二部分Claude 桌面版3p 第三方网关模式整体架构Claude Desktop 支持第三方网关部署模式内部称为 3p mode。核心配置文件都位于%LOCALAPPDATA%\Claude-3p\路径下注意不是%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\该 MSIX 目录仅为空壳%LOCALAPPDATA%\Claude-3p\ ├── claude_desktop_config.json # 全局配置deploymentMode 设为 3p └── configLibrary\ ├── _meta.json # 元数据appliedId 指向当前生效的 profile └── uuid.json # 具体 profile网关地址 模型列表 界面开关profile 配置模板{ inferenceProvider: gateway, inferenceCredentialKind: static, inferenceGatewayBaseUrl: https://api.deepseek.com/anthropic, inferenceGatewayApiKey: sk-你的 DeepSeek Key, modelDiscoveryEnabled: false, inferenceModels: [ { name: claude-opus, labelOverride: DeepSeek V4 Pro, supports1m: true }, { name: claude-sonnet, labelOverride: DeepSeek V4 Flash, supports1m: false } ], chatTabEnabled: true }这里有两个核心坑点模型名必须使用 Claude 风格命名claude-opus/claude-sonnet。桌面版 UI 会校验模型名不识别deepseek-v4-pro[1m]这类原生名称而网关侧内置了别名映射claude-opus→v4-pro、claude-sonnet→v4-flash两边配合才能正常联通。自定义名称如anthropic/claude-deepseek-v4-pro会被网关直接返回 400 错误。必须设置modelDiscoveryEnabled: false关闭模型自动发现否则桌面版会尝试向网关拉取官方模型列表导致失败。无法对话 问题排障本篇核心故障现象网关配置正确、应用可以正常启动但一提交消息就报错Error: chorus: cowork submit blocked — preflight failed根本原因桌面版在 3p 模式下有三个独立界面surface各自有独立的开关且默认值差异很大界面配置键profile 扁平键默认值说明ChatchatTabEnabled关闭普通对话界面直接走网关 → 3p 模式可用CoworkcoworkTabEnabled开启代理式工作区依赖 Anthropic 官方后端 → 3p 模式不可用CodeisClaudeCodeForDesktopEnabled开启内嵌 Claude Code CLI → 3p 模式可用应用启动后默认停留在Cowork 界面而 Cowork 的消息提交必须走官方后端校验因此每次都会 preflight 失败。但真正可用的 Chat 界面默认是关闭的需要手动显式开启。排障弯路改错配置文件最初误以为界面开关在~/.claude/settings.json中桌面版和 CLI 确实共用该文件的部分配置写入chatSurface: {enabled: true}后重启应用完全无效。且 CLI 的 settings 校验器不识别这个键需要用脚本绕过校验才能写入。定位真相反编译 app.asar桌面版主进程代码打包在以下路径的 asar 文件中C:\Program Files\WindowsApps\Claude_1.40609.0.0_x64__pzs8sxrjxfjjc\app\resources\app.asarasar 文件头部是简单的 JSON 索引只需几十行 Node 脚本就能解析并提取出.vite/build/*.js主进程代码无需安装专门工具// 核心原理asar 头 8 字节前缀 JSON 头每个文件的 offset 为绝对偏移量 const buf fs.readFileSync(asarPath); const l buf.readUInt32LE(4); // 读取头部 JSON 长度 const header JSON.parse(buf.slice(8, 8 l).toString(utf8)); // 文件数据起始位置 8 l再根据 header 中每个文件的 size/offset 切片读取从提取出的代码中追踪到关键配置链路// 配置读取链路主进程 function Ske(){ ... JSON.parse(readFileSync(pl(), utf8)) } // pl() 对应 configLibrary/_meta.json function Cke(e){ ... JSON.parse(readFileSync(fl(t), utf8)) } // fl(t) 对应 configLibrary/appliedId.json // 界面开关判定逻辑 function Ys(e){ return e.chatSurface?.enabled true } // Chat 界面必须显式为 true // 特性清单最终判定 chatTab: Ys(W()) ? supported : unavailable结论主进程的界面开关读取的是configLibrary目录下的 profile 文件使用扁平键chatTabEnabled而非~/.claude/settings.json。修复方法在 profile 配置中添加chatTabEnabled: true可以同时写上嵌套写法chatSurface: {enabled: true}白名单过滤器会自动保留正确的配置项从系统托盘完全退出应用后再重启Chat 界面就会正常出现对话功能恢复正常。排查中的其他发现Missing HCS services: HNS, vmcompute, vfpext报错这是 Cowork 界面的 VM 沙箱依赖 Hyper-V 服务导致的Windows 11 家庭版默认没有该服务。该报错仅影响 Cowork 界面与 Chat/Code 功能无关可以直接忽略。验证开关是否生效桌面版渲染进程的命令行参数中包含--desktop-features...其中的chatTab.status就是开关的最终判定结果值为unavailable或supported。该值由主进程计算得出只杀掉渲染进程不生效必须完全重启主进程。管理员权限运行的注意事项如果桌面版以管理员权限启动普通权限的 shell 无法通过 taskkill 杀掉进程会提示拒绝访问只能通过系统托盘图标退出。~/.claude/settings.json是 Claude CLI 的配置源和桌面版的界面开关无关不要混淆修改。最终可用状态汇总入口状态用途dsh web✅ 正常可用官方 Harness 网页版执行dsh web启动浏览器访问使用桌面版 Chat✅ 正常可用快速问答、文案撰写支持切换 V4 Pro / V4 Flash 模型桌面版 Code✅ 正常可用内嵌 Claude Code可在项目目录中直接读写代码文件桌面版 Cowork❌ 不可用3p 模式无官方后端支持 无 Hyper-V直接无视即可经验总结官方工具与第三方接入难度天差地别dsh 是 DeepSeek 官方工具填好 API Key 就能运行Claude 桌面版属于逆向接入需要跨过三层关卡网关识别模型名 → UI 识别模型名 → 功能是否依赖官方后端缺任何一层都会出现各种莫名其妙的报错。配置写了但不生效 先排查配置文件路径不要怀疑重启方式不对。Electron 类应用的配置源很可能藏在 userData 下的某个 profile 文件里而非表面上的 settings.json。asar 包并没有那么难破解不需要专门的逆向工具用 Node 写几十行代码就能解析几分钟就能从报错字符串反查到对应的判定逻辑。学会区分 致命报错 和 噪声报错preflight failed是真正影响功能的核心问题而Missing HCS services、billing 503、Failed to fetch这类报错在 3p 模式下都属于正常噪声无需处理。配置客户端前先用 curl 验证网关联通性 —— 一次成功的 HTTP 200 响应就能排除掉一半的变量。