DeepSeek Harness 一条 dsh 命令多种模式:web、headless、sdk、acp 怎么选

安装与快速上手发布于 2026-09-03作者: DeepSeek Plugin 插件市场
DeepSeek HarnessDSHdsh webheadlessSDK
npx @deepseek-ai/dsh web 只是 dsh 命令的入口之一:同一条 dsh 还能跑 headless、sdk、sdk-minimal、acp 模式。本文逐个讲清各模式用来做什么、参数怎么传(--profile、--port、--help 归属),以及何时该用哪个模式。

npx @deepseek-ai/dsh web 里的 web 其实只是 dsh 命令的一个入口:同一条 dsh 命令还能跑 headless、sdk、sdk-minimal、acp 等多种模式,web 是 --profile web 的别名。要分清的是「dsh 启动器只认 --profile 这类启动参数,其余参数交给被启动的应用」——搞懂这条分界线,你就知道带什么参数、该用哪个模式。本文把 dsh 的每个模式逐个讲清,并给出一份「何时用哪个」的判断清单。

先认清分界:启动器参数 vs 应用参数

dsh 启动器只解析自己的标志,其后所有不认识的 token 都交给被启动的 profile 去解析。 这是理解 dsh 多条命令的钥匙。官方给出的示例(来源):

bash
dsh --profile web --port 8080        # --port 属于 web 应用
dsh --profile tui --resume <id>      # 假设已装 tui profile,--resume 属于终端应用
dsh --profile headless "run the tests"  # 引号里的任务传给 headless 应用
dsh --profile web --help             # 看的是 web 应用的参数,不是启动器的
dsh --help                           # 启动器自己的帮助

代码层面:dshsrc/args.ts 负责命令语法,src/bin.ts 只加载选中的 runner。因此无效命令、来自另一模式的参数、配置错误、启动失败都会以非零码退出来源),你可以放脚本里判断。

dsh 的常用运行模式一览

dsh 是「唯一受支持的 Node 应用启动器」,profile 是插件 bundle 补丁层的有序堆叠;不同 profile 对应不同使用场景。 官方 Entry modes 表(来源):

命令用途
dsh web--profile web 的别名,启动交互式 Web UI
dsh --profile headless "任务"跑一次全新持久化会话,打印最终答案后退出
dsh --profile sdk通过 JSON-RPC stdio 服务 SDK 客户端(默认值)
dsh --profile sdk-minimal用独立极简 agent 树服务 SDK 客户端
dsh --profile acp通过 stdio 服务自动化客户端,直到断开
dsh plugin --profile <name> <pnpm 参数>转发给 profile 目录里的 pnpm 来管理插件

web、headless、sdk、sdk-minimal、acp 这五个 profile 会在首次使用时从内置模板自动初始化;其他 profile 必须通过 dsh plugin 创建(来源)。调用目录总被当作默认工作区根。

交互式模式:dsh web(对应 npx @deepseek-ai/dsh web)

dsh web 给人在浏览器里用,是官方 Quickstart 推荐的默认入口,等价于 npx @deepseek-ai/dsh web。 启动后:命令会打印访问地址(来源);在 Web UI 里先打开设置 → 模型输入 API 密钥并保存,模型路由立即可用、无需重启服务器;再点选择工作区添加并选中项目目录——选中之前会话输入框不可用(来源)。之后启动会话发任务,agent 可读写工作区文件、运行命令、委派工作,涉及审批的操作 Web UI 会先询问你。

日常开发、想一边看到 agent 逐步执行一边干预,就用这个模式。

一次性模式:dsh --profile headless

headless 不打开浏览器,跑一次新会话输出最终答案就退,适合脚本与 CI。 它的语义是「运行一个新鲜的持久化会话、打印最终回答、然后退出」(来源)。任务本身用引号包起来:

bash
dsh --profile headless "run the tests"

因为每次都是全新会话,它天然适合批处理、定时任务、流水线里的一次性作业,不需要你盯着一台服务器手动点。

给代码调用的模式:sdk / sdk-minimal / acp

这三类模式都是给程序调用、不是给人看界面的,通过 stdio 与进程通信。 区别在服务对象与 agent 树规模(来源):

  • dsh --profile sdk:通过 JSON-RPC stdio 服务 SDK 客户端,是 SDK 的默认选择。
  • dsh --profile sdk-minimal:用独立的极简 agent 树服务 SDK 客户端,适合只想用最小可用子集的场景。
  • dsh --profile acp:通过 stdio 服务自动化客户端,直到客户端断开为止——适合把 DSH 嵌进别的自动化工具里。

Python 的运行时 wheel 打包的就是同一个 dsh 命令:SDK 默认走 sdk,极简示例走 sdk-minimal来源)。如果你想用 Python 调 DSH,参考官方 Python SDK 指南;对应的不同 profile 就是在这里二选一。

何时用哪个模式:一张判断清单

选模式先问一句「我是人用还是代码用」,再问「要交互还是跑一次」。 按这个顺序判断:

  1. 人在浏览器里操作、要边跑边干预dsh webnpx @deepseek-ai/dsh web 或已全局安装用 dsh web)。
  2. 脚本 / CI / 定时跑一次就完dsh --profile headless "任务"
  3. 用 SDK(如 Python JS)写程序调 DSHdsh --profile sdk,极简场景用 sdk-minimal
  4. 把 DSH 嵌进自动化客户端工具dsh --profile acp,stdout 与客户端保持连接。
  5. 改端口 / 看某模式参数 → 把参数放在命令后,如 dsh --profile web --port 8080dsh --profile web --help
  6. 想装 / 卸插件dsh plugin --profile <name> <pnpm 参数>

装完 DSH 之后:用 DSH Plugin Hub 一键装插件

无论你选哪个模式,能力都来自插件——最省心的装法是 DSH Plugin Hub 的「设置 → 插件市场」。 装 Hub 本身一条命令:dsh plugin --profile web add dsh-plugin,装完重启 dsh web,打开 设置 → 插件市场 就是 DSH Plugin Hub 的插件市场首页,按分类浏览社区插件,卡片直接展示名称、描述、Star 与最近更新时间:

DSH Plugin Hub 插件市场界面

点进任意插件即可一键安装,后台串行执行、弹窗实时显示进度,装完大部分插件刷新页面即生效:

DSH Plugin Hub 一键安装插件

以上模式你都判断完、插件也接好了,接下来就能按需启动。想反过来弄懂 npx 这条命令到底下载了什么、数据存哪,可以看《DeepSeek Harness 用 npx 一键启动 Web UI:这条命令做了什么、数据存在哪里》。

来源:dsh CLI README官方 Quickstartnpm 包 @deepseek-ai/dsh

常见问题

dsh 命令到底有哪些运行模式?

dsh 是 DeepSeek Harness 的唯一启动器,常用模式有 dsh web(即 --profile web)、dsh --profile headless "任务"、dsh --profile sdk、dsh --profile sdk-minimal 和 dsh --profile acp,分别对应 Web UI、单次任务、SDK 最小 agent 树与自动化客户端。

dsh web 和 dsh --profile headless 有什么区别?

dsh web 启动交互式 Web UI,适合人在浏览器里逐步操作;dsh --profile headless "任务" 只运行一次全新的持久化会话、打印最终答案后退出,适合脚本或 CI 里跑一次性任务。

dsh 的 --profile 参数怎么用?web 为什么不用传?

--profile <name> 指定要启动的 profile。web、headless、sdk、sdk-minimal、acp 会在首次使用时自动初始化并拿到快捷别名(dsh web 等价于 dsh --profile web),其他 profile 必须先通过 dsh plugin 创建。想让 web 变端口就写 dsh --profile web --port 8080。

sdk 和 sdk-minimal、acp 模式分别给谁用?

sdk 通过 JSON-RPC stdio 服务 SDK 客户端,是默认值;sdk-minimal 用独立的极简 agent 树服务 SDK 客户端;acp 通过 stdio 服务自动化客户端直到断开。三者都是给代码调用,不是给人用浏览器。

参数跟在 dsh 后面,怎么知道哪些归启动器、哪些归应用?

dsh 只解析自己的启动参数,第一个它不认识的 token 之后全部交给 booted 的应用去解析。例如 dsh --profile web --port 8080 里 --port 属于 web 应用;dsh --profile web --help 看的是 web 应用帮助,dsh --help 看的是启动器帮助。

想在脚本里判断 dsh 跑没跑成功,怎么办?

无效命令、来自其他模式的参数、配置错误、启动失败,dsh 都会以非零退出码结束,你直接在脚本里检查退出码即可,无需解析输出文本。

相关术语

dsh web
dsh web 是 dsh --profile web 的别名,用来启动 DeepSeek Harness 的交互式 Web UI;脚本里写成 npx @deepseek-ai/dsh web 时由 npx 先拉取官方包再执行 dsh。dsh CLI README
headless
headless 是 dsh 的 profile 之一,用于运行一次全新的持久化会话:打印最终答案后退出,不打开浏览器,适合脚本或 CI 里的单次任务。dsh CLI README
exit code
exit code 是进程结束时的返回码;dsh 启动器在命令无效、参数来自其他模式、配置错误或启动失败时都以非零码退出,因此适合在脚本中据此判断成功与否。dsh CLI README

来源