《DeepSeek Harness,桌面版》的标题卡,其眉题为“DeepSeek,桌面 Harness”,副标题为“它是围绕同一个 Web UI 的 Electron 外壳。窗口只是简单的部分。打包才是故事所在。”,三个圆角胶囊形标签分别写着“0.2.1-rc.2”、“Electron + Web UI”和“Windows、macOS 各两套”,页脚一行写着“核对于 2026 年 10 月 21 日,三个安装程序已上线,31 个 GitHub 发布版本,零个二进制资产”。
Guides & Insights

DeepSeek Harness 桌面应用:安装程序究竟在你的机器上放了什么

作者

Rowan Sterling

发布日期

最新模型 · 20查看全部模型 →
基准测试:Artificial Analysis · 每日更新
返回全部文章

DeepSeek Harness 桌面应用是一个 Electron 外壳,包裹着与你从 npx @deepseek-ai/dsh web 得到的相同的 Web 界面;它以三个针对不同平台的安装程序形式发布,而该 harness 目前版本为 0.2.1-rc.2。这样的描述听起来有些轻蔑,但并非本意。把一个可用的界面封装进桌面容器只需一个周末的工夫;而把它封装进一个拥有自己的运行时目录、在你关闭窗口后仍让你的任务保持运行、在没有稳定版本的发布通道上自我更新,并在上述每一项操作中都保留你的会话的容器里,这才是需要数月投入的部分,也是值得一读的部分。如果你想通过一个存在于窗口中而非终端里的 harness 来运行 DeepSeek-V4.1-Flash,这就是那个构建版本,而有趣的问题全都关乎窗口周围发生了什么。

在展开细节之前,有两件事需要说明。第一,本文取代我们此前“没有桌面应用”的说明——该说明在2026年8月撰写时是正确的,但现在已经不正确。第二,这是一个公开预览版,DeepSeek 自己的网站上仍如此标注,而其打包方式也带有这一标签所暗示的粗糙之处。安装程序可以正常工作。但它周边的分发却比你想象的要单薄。

桌面版构建实际上是什么

桌面应用是一个轻薄的 Electron 层,其职责是启动 Host 进程并让窗口指向它。窗口不会自行布局聊天界面:它会加载应用内打包的 Web 入口,位于 dsh-app://app/,而你会看到的更新对话框来自第二个打包来源,位于 dsh-app://shell/。一个子 Node 进程以 Electron 的 RunAsNode 模式启动,以启动共享配置文件运行器;外壳会将 HTTP 转发到经过身份验证的 Web Host,并在转发过程中丢弃 transfer-encoding、connection 和 keep-alive 标头。插件包响应会被标记为 no-store,这是一个小细节,但有一个可见的后果:更改插件后,下一次重新加载就会显示更改。

因为 URL 是 dsh-app://而不是 localhost,所以没有需要记住的固定端口,也没有需要绕开的端口冲突。桌面端 Host 默认监听由操作系统分配的端口。如果需要特定端口,可以通过 webserver.config.port 覆盖项来设置,但默认值有意不是固定常量,并且 Host 绑定到 127.0.0.1。如果你一直遵循较早的说明,这一点很重要:8 月安装指南中流传的数字 19387 并不是桌面端口,把它当作桌面端口会让你去寻找一个并不存在的服务。

版本固定比乍看起来更严格。Electron 与 @deepseek-ai/dsh始终采用完全相同的版本——不是版本范围,也不是兼容的主版本——因此对 harness 的升级就是一次桌面版发布,并且不存在受支持的组合能让新版 dsh搭配旧版窗口。Electron 进程会获取一个进程生命周期内的单实例锁,并独占 $DSH_HOME/profiles/desktop。这种独占是真实的:CLI 无法启动那个配置档,而通过 npm 安装的 dsh也无法修改它。这两种安装确实共享的是对你而言重要的状态——会话、设置、凭据、工作区和存储,全部位于 $DSH_HOME 下。它们不共享的是可执行包、插件激活、锁文件或 node_modules,这就是为什么将插件安装到桌面配置档与安装到 CLI 配置档并不是同一操作。

三个安装程序,一个更新通道,没有稳定版本

Two-column fact card titled 'Three installers, one update channel, no stable release'. The left column, headed 'Files on download.deepseek.com', lists Windows 64-bit .exe at 289.4 MB as 0.2.1-rc.2 linked from the page, macOS Apple silicon .dmg at 265.0 MB as 0.2.1-rc.2 linked from the page, and macOS Intel .dmg at 289.5 MB as 0.2.1-rc.1 'served, but no link anywhere on the page', followed by rows reading 'All three responses HTTP 200', 'All three last modified 17 Oct 2026' and 'Intel build lags by one release candidate'. The right column, headed 'Update and distribution channels', lists Windows x64 updater nightly.yml, macOS arm64 updater nightly-mac.yml, macOS x64 updater nightly-mac.yml, latest.yml any target 404, GitHub releases '31, all prerelease', release assets 0, and npm latest 0.2.1-rc.2. The footer reads 'Read on 21 October 2026. Nightly here is a channel name, not a build time: the Windows and Apple-silicon feeds both serve 0.2.1-rc.2, dated 17 October.'

存在三个安装程序,且三者均有响应。Windows 64 位可执行文件为 289,385,456 字节,并以 HTTP 200 提供。Apple Silicon 磁盘映像为 264,990,950 字节,同样返回 200。Intel Mac 磁盘映像为 289,480,824 字节,同样返回 200。三者最后修改时间均为 2026 年 10 月 17 日。下载页面仅链接了其中两个。Intel 构建版本已上线、可访问,并且在 deepseek.com/en/harness/ 上没有任何指向它的链接——如果你使用的是 Intel Mac 并按照页面指引操作,你完全有理由认为没有适合你的构建版本。

Screenshot of the DeepSeek Harness page at deepseek.com/en/harness, showing the 'Preview' eyebrow, the large DeepSeek Harness wordmark, the line 'Ready to use. Right now.' with the subheading 'Everyday tasks, coding, or your own harness, it starts here', the sentence announcing the public preview and open-source release, a 'Download for Windows' button, and a product screenshot showing a session list beside a chat panel introducing the harness as built on Cordis's 'everything is a plugin' architecture.

Intel 版本也落后一个版本。它的更新源列出的是 0.2.1-rc.1;Windows 和 Apple-silicon 的更新源列出的都是 0.2.1-rc.2。一个候选发布版本在功能上并不算大的差距,但它确实是一个信号,说明哪些目标平台会先构建、哪些会最后验证,而这正是你在把工作会话托付给某个平台之前想要知道的事情。

更新通道正是分发情况变得薄弱的地方。各源按目标区分,路径为 /dsh-desk/feeds/<target>/,位于同一主机上。Windows x64 解析 nightly.yml;两个 macOS 目标都解析 nightly-mac.yml。向这三者中的任意一个请求 latest.yml 或 latest-mac.yml,都会得到 404——没有稳定通道,没有 beta 通道,也无法退出唯一存在的通道。DeepSeek 自己的发布说明证实了这一安排,而不是予以反驳:每个版本都会发布 nightly 源,只有稳定版本才会发布 latest 源,指向相同产物。“Nightly”在这里是通道名称,而不是构建节奏——Windows 和 Apple-silicon 的源都提供同一个 0.2.1-rc.2 构建,日期为 10 月 17 日,其中 Windows 包的时间戳为 09:22 UTC,Apple-silicon 包为 09:57 UTC。因此,你会得到自动更新器机制、带抖动的轮询、退避至一小时上限,以及除了预览通道当前所提供的内容之外,无法请求任何其他内容。

GitHub 从另一个角度说明了同一点。deepseek-ai/deepseek-harness 仓库——在 2026 年 10 月 21 日查看时拥有 256,559 个星标和 30,921 次复刻——在同一天有 31 个发布版本,每个都被标记为预发布版本,而且每个都没有附加任何二进制资产。Releases 页面上没有任何可下载的内容。如果你想要构建版本,可以从 download.deepseek.com 或从 npm 获取;在 npm 上,@deepseek-ai/dsh 目前将 latest 解析为 0.2.1-rc.2。该仓库是变更日志的权威来源,却是获取构建产物的死胡同;这种情况足够不寻常,值得直接说明,因为看到 31 个发布版本时,人的本能会期待其中某个版本附带安装程序。

安装程序会写入什么,以及它拒绝改动什么

Windows 安装程序是原生 NSIS 包,而不是 MSI 的包装器,并且其行为也如同前者。你可以选择浅色、深色和自动配色方案——可在安装时通过 /THEME=light、/THEME=dark 或 /THEME=auto 选择——一个可编辑的目标目录,以及仅限于当前用户的安装范围。驱动器根目录会被拒绝作为目标目录,而非空目标目录只有在它已经是已注册安装时才会被接受,也就是安装程序拒绝覆盖无关文件夹。更新时,静默路径最多等待十秒让正在运行的应用程序退出;如果它仍在运行,则以退出代码 2 停止。这是诚实的失败,而不是损坏的安装,并且它会出现在任何未先退出应用的脚本化部署中。

卸载程序划定了大多数卸载程序都会搞错的界线。它会删除 Electron 的 userData 目录以及位于 %APPDATA% 下的产品目录,以及位于 %LOCALAPPDATA% 下的更新程序缓存。它不会触碰 harness 主目录——~/.dsh,或 DSH_HOME 指向的任何位置——其中保存着你的会话、设置、凭据和插件。传入 --updated 或 /KEEP_APP_DATA 也会保留 Electron 数据。因此,卸载并重新安装是一种受支持的方式,可在不丢失工作成果的情况下修复损坏的窗口;这是有意为之的设计决策,而非意外。

值得了解这些随附的运行时,因为它们体积很大,而且位于应用目录之外。带有 numpy、pandas、python-docx、python-pptx、openpyxl、Pillow、lxml 和 XlsxWriter 的 Python,以及 Node 和 pnpm,会安装到 $DSH_HOME/dsh-runtimes/dsh-primary-runtime——通常位于~/.dsh/...(两个平台均如此)——在工作区首次声明需要它们时。这就是为什么使用一周后的磁盘占用空间不同于安装后的磁盘占用空间,也是为什么保留 $DSH_HOME 的卸载操作也会保留数百兆字节的运行时。

设置会在启动时读取一次,来源为 desktop/settings.json,该文件位于 Electron 的 userData 目录内;在 Windows 上,这意味着 %APPDATA%\@deepseek-ai\dsh-desktop\desktop\settings.json,而在 macOS 上,这意味着 ~/Library/Application Support/@deepseek-ai/dsh-desktop/desktop/settings.json。 DSH_HOME不会重定位此文件——这一点值得指出,因为它是唯一一项不遵循其他所有配置都遵循的那个变量的配置。该文件中的更新设置以毫秒为单位:intervalMs 默认值为 600,000,而 maxBackoffMs 默认值为 3,600,000,且必须至少为 intervalMs。抖动默认值为 0.2,会被限制在零到一的范围内,并且下限为一秒,同时绝不超过退避上限。更新 HTTP 流量受每连接 60,000 毫秒的不活动截止时间约束,不过正在进行的下载没有总时长截止时间——慢速链路不会在下载中途被切断。

关闭窗口不会关闭应用程序

在两种平台上,关闭窗口都会将其隐藏。在 macOS 上,这通过Command-W实现;在 Windows 上,则是关闭按钮、Alt-F4,或从任务栏选择“关闭”。Windows 会在首次隐藏前请求确认,并在 Electron userData 目录下写入一个background-close-confirmed标志,因此只会询问一次,而不是每次都询问。Windows 在整个运行期间还会保留托盘图标。macOS 则完全不提供菜单栏图标,这使得隐藏状态在那里真正不可见——应用正在运行,任务正在运行,而在你使用以下方式重新打开它之前,屏幕上没有任何提示:dsh://open或托盘,具体取决于平台。

隐藏之后仍然保留的部分,才是有用的部分。正在运行的任务会继续运行,下次窗口显示时,它呈现的仍是同一份文档、同一个会话、同样的草稿和同样的滚动位置。这与关闭后再重新打开的浏览器标签页行为不同;如果你的工作涉及长时间运行的 agent 任务,这正是桌面版值得存在的原因:你可以关闭窗口,让任务继续完成。

退出是一个独立的操作,有其自身的逻辑。在退出之前,shell 会检查 Host 是否有正在运行的 agent,包括子代理和等待审批的代理、排队中的消息、正在运行或正在停止的作业,以及已设定的定时提醒。如果这些都不存在,就会静默退出。如果存在任何一项,你会看到一个原生确认对话框,标题为 退出 DeepSeek Harness?,并根据检查结果给出三种说明之一:任务将被中断、计划任务将不会运行,或两者兼有。从未达到就绪状态的 Host 不可能启动任何任务,因此在这种状态下退出会直接进行,不会询问。“关闭”和“退出”之间的区别正是该设计的核心,并且它在两个平台上都成立,尽管其中只有一个平台会向你显示常驻图标。

dsh 命令,以及至关重要的顺序

安装程序可以将 dsh放到你的 PATH中,这样你就能针对桌面应用所使用的同一个 harness 主目录运行 CLI。该控件是 管理 dsh 命令…,它就在菜单中 检查更新…的正下方,包含三项操作:安装、修复和移除。在 macOS 上,它会在 /usr/local/bin/dsh 写入一个启动器,并在需要时提示管理员授权;在 Windows 上,它会将该命令注册到当前用户的 PATH 中。

有两条顺序规则很容易被忽略,事后才发现又会很麻烦。第一条:在卸载桌面应用程序之前先运行“移除”,因为卸载程序不会清除 dsh 注册信息。如果先卸载,就会留下一个指向已不存在二进制文件的 PATH 条目。第二条:如果你将应用程序移动到其他位置,请在 macOS 上使用“修复”,或在 Windows 上从新位置执行“安装”,而不要想当然地认为注册信息会跟随应用一起移动。

桌面配置文件的插件管理有其自身的特殊之处。由于 Electron 独占$DSH_HOME/profiles/desktop,在其运行期间,不能在应用打开时向该配置文件安装插件。受支持的流程是:先启动一次桌面应用,退出它,然后再运行dsh plugin --profile desktop add <package> 从命令行。该包会进入桌面配置文件,并在你下次打开窗口时生效。

包装上已经告诉你的内容并不完整

README 的已知限制部分坦诚得不同寻常,其中两条会最先影响到你。

• 账户登录尚未连接。“登录”按钮处于禁用状态。首次运行时会打开一个 600×700 的欢迎窗口,其中包含 API 密钥表单;“保存并继续”会将密钥写入开发凭据存储,而“稍后设置”会在不保存密钥的情况下打开实际工作区。在出现“登录”按钮的位置点击它,会在系统浏览器中打开已配置的平台页面,由 Host 负责 PKCE 交换和临时回环回调——相关基础机制已经存在,但账户绑定尚未实现。实际上,请准备好自带密钥。

• 发布签名和公证被列为需要使用生产发布环境的事项。 这是 README 在谨慎表述,也正是用实际测量比一句话更有说服力的地方。已发布的 Windows 可执行文件带有有效的 Authenticode 签名,并具备扩展验证链:GlobalSign Root CA–R3,向下经过 GlobalSign Code Signing Root R45 和 GlobalSign GCC R45 EV CodeSigning CA 2020,直到一张颁发给 Hangzhou DeepSeek Artificial Intelligence Co., Ltd. 的叶证书,其管辖地列为 CN / Zhejiang / Hangzhou,业务类别为私营组织。该签名上的 RFC-3161 时间戳为 2026-10-17T09:22:04Z,与 Windows 更新源中的发布日期相差不超过一分钟,且下载文件的 SHA-512 摘要与该更新源中公布的哈希逐字节一致。因此,无论 README 如何描述该流程尚未完全生产化,目前在 Windows 上,该二进制文件已签名、已加时间戳且哈希匹配。macOS 方面则是另一个问题,我们未在那里验证公证;不要将 Windows 的结果推而广之。

崩溃报告,以及一个值得了解的细节

崩溃报告会以 crash-<UTC time>-<source>.log 的形式写入 ~/Library/Logs/DeepSeek Harness(macOS 上)或 logs 目录(Windows 上位于 Electron userData 路径下),并只保留最近十个。这个保留数量小得足以产生影响:如果某个问题反复出现,而你几天没有查看,那么本可解释首次失败的日志就已经不在了。如果你在调试间歇性出现的问题,请复制该目录。

损坏配置的恢复路径同样具体。shell 会将 cordis.patch.yml重命名为cordis.patch.yml.bak-<timestamp>,而不解析它,因此该文件会被保留而不是被修复,应用会从默认值启动。如果你手动编辑过该文件,你的修改就保存在 .bak 中,而且它仍然可读。

这让先前“不要桌面应用”的建议该何去何从

我们在 2026 年 8 月发布过指南,称该 harness 没有桌面应用,Windows 用户应运行终端版本——这在当时是准确的,如今已经过时。终端版本仍然可用,对于服务器、容器或任何脚本化场景来说仍然是正确选择。变化在于,桌面版本并不是玩具式的封装:它拥有独立的配置文件,关闭窗口后任务仍能继续运行,能够自我更新,并以对你有帮助的方式与 CLI 共享状态。如果你因为早先的文章说桌面版本不存在而一直推迟使用它,那么这个理由已经不存在了。

安装步骤本身已包含在我们的安装演练中,因此这里有意不再重复。但那份演练无法告诉你的是:三个安装器当中哪一个在下载页面上没有链接、哪一个目标版本落后了一个发布版本、没有可供选择的稳定更新通道,以及尽管 README 声称签名属于未来版本的功能,Windows 二进制文件却已经签名。这些事实决定了桌面构建是否适合安装,也正是本页面单独存在的原因。

如果你不想安装任何东西

为了访问一个模型而安装一套运行框架,为这点小工作量付出的维护面实在太大了;而且桌面应用还只是预览版,只有一个更新通道,还有一个没人会去链接的 Intel 构建版本。如果你真正想要的是 DeepSeek-V4.1-Flash——也就是该框架默认使用的模型,0.2.1-rc.2 发行说明中新增支持的那个——那么一个 API 端点就能做到,无需安装程序、无需配置文件目录,也无需记住有个托盘图标一直在运行。

Screenshot of the OrcaRouter models directory showing the header '213 models, 16 providers', the search and filter controls, a 'How to call any model' panel on the right, and a grid of model cards including a DeepSeek V4.1 Flash card.

要做的比较并不是抽象意义上的桌面应用与 API 之争。而是要看这项工作是否需要这样一个智能体:它能在窗口关闭后仍保持工作区打开,在你的机器上运行脚本,并让会话持续数小时——如果是这样,那么上述打包问题就值得忍受,而桌面版是获得该行为的唯一途径;或者这项工作是否只是一连串发往某个已在别处提供服务的模型的请求。对于第二种情况,模型目录 是更短的路径,本文中没有任何内容会改变这一点。

本文中的对比1

根据本文内容识别 · 基准测试:Artificial Analysis · 每日更新