DSH 是 DeepSeek 开源的 Agent 框架,走的是一条不太一样的路:一切都是插件。 模型负责想,外面那层负责跑——读写文件、开终端、连浏览器;而这外面一层的每个零件,包括界面本身,都是可以单独装卸的 npm 包。
好处是你能把它捏成自己要的形状;代价是第一次打开时会有点懵:没有「下一步」按钮,没有新手引导,左边一排设置项看不出优先级。 这篇就是补上那段引导:装好 → 拿到 Key → 跑通第一个任务 → 装三个真正有用的插件。中间不展开原理,只给能跑的命令。
读完你会得到什么:一个能跑 Web 界面的 DSH、一个可用的 API Key、一个被设成工作区的目录,以及三个你装完就能感觉到差别的插件。全程约 20 分钟,其中 15 分钟在等下载和开通。
1 · 先搞清楚你在装什么
DSH 本身不是一个安装包。它是 Node.js 上的一个 npm 包,核心那句 Agent = Model + Harness 里的 Harness,就是它。所以更准确的说法是:你装的是一个运行时,然后让它在本地起一个 Web 服务,你在浏览器里跟它说话。
也因此,只要机器上有 Node.js,剩下的都是一条命令的事。现在有两条路可以走:
| 方式 | 适合谁 | 装好后 |
|---|---|---|
| 官方 CLI(npx) | 想跟着官方版本走、能接受敲命令的人。推荐从这里开始。 | 终端里跑 dsh web,浏览器打开本机地址 |
| 桌面客户端 | 完全不想碰终端、或者需要托盘常驻 / 完成通知的人。 | 双击图标即用,运行时已打包在里面 |
只从官方渠道下载。官方发布只有 npm 包和 GitHub 源码仓库两处,没有所谓「官网直链安装包」。搜索结果里那些打包好的「DSH 安装包下载站」,来源和版本都不受控。
DSH 目前还在开发者预览阶段,版本迭代很快,接口和插件生态都还会变。这不是劝退,只是提醒你:遇到教程和实际界面对不上时,先怀疑版本,用 dsh --version 对一下。
2 · 安装:三行命令
唯一的前置条件是 Node.js(LTS,18 以上)。下面按系统给,第一行是「没装就顺手装上」,第二行才是 DSH 本体。
Windows
打开 PowerShell(右键开始菜单 →「终端」),整段粘进去:
# 没装 Node.js 就先用 winget 装一个
if (-not (Get-Command node -ErrorAction SilentlyContinue)) {
winget install OpenJS.NodeJS.LTS
}
# 启动(每次都会去 registry 取最新版)
npx @deepseek-ai/dsh web
装完 Node 之后要重开一个终端,否则 PATH 还没刷新,第二行会报 node 不是内部或外部命令。
macOS
用 Homebrew 装 Node,再启动。没有 Homebrew 的话,去 nodejs.org 下 LTS 的 pkg 也可以:
command -v node >/dev/null 2>&1 || brew install node
npx @deepseek-ai/dsh web
Linux / WSL
Debian、Ubuntu 系用 NodeSource 的源最省事。注意 WSL 里跑的 DSH 是 WSL 里的一个进程,
工作区要选 Linux 侧的路径(/home/you/project),从 Windows 盘符访问的性能会明显差一些。
command -v node >/dev/null 2>&1 || (
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - &&
sudo apt-get install -y nodejs
)
npx @deepseek-ai/dsh web
把 dsh 变成全局命令(可选,但建议)
npx 每次启动都要重新解析一遍包,慢,而且版本会飘。用久了就把它装成全局命令:
npm install -g @deepseek-ai/dsh
dsh --version # 确认装上了,顺便记下版本号
dsh web # 以后都用这条启动
装全局命令后如果提示「找不到 dsh」,是 npm 的全局 bin 目录不在 PATH 里。用 npm prefix -g 看路径,把它加进环境变量即可。插件管理还会调用 pnpm,没装的话先 npm i -g pnpm。
3 · 第一次启动
命令跑完,终端会打出一行本机地址,端口号可能和下面不同:
dsh web listening on http://127.0.0.1:3080
复制到浏览器打开。第一天你会看到三样东西:左边是会话列表,中间是对话区,右上角是设置入口。先别急着发消息——现在还没有 Key,发出去只会得到一句报错。
顺序应该是:填 Key → 选工作区 → 发第一个任务。
| 现象 | 原因与处理 |
|---|---|
| 3080 端口被占用 | 换端口启动:dsh web --port 8080,然后开新地址。 |
| 页面打开是白的 | 多半是内核没起来。回终端看有没有红色堆栈,通常是 Node 版本太旧或全局包损坏,重装一次 @deepseek-ai/dsh。 |
| 能开但一会儿就断 | 终端窗口被关掉了,或者机器休眠。DSH 是前台进程,终端一关服务就停。 |
4 · 获取 API Key
模型是要花钱的,所以这一步绕不开。整个过程大概五分钟。
注册并登录开放平台
打开 platform.deepseek.com,注册账号并登录。记住是「开放平台」,不是聊天网页版——两边的账号体系不同。
充值一点点
左侧「充值」入口,最小额度就够。没有余额的话,Key 建得出来,但请求会直接返回余额不足。
创建 API Key
左侧「API keys」→ 创建。名字随便写,比如 dsh-local。生成的 sk- 开头的字符串只显示这一次,关掉就看不到了。
填进 DSH
回到 DSH 界面:设置 → 模型,把 Key 粘进去保存。保存后界面上应该能看到可用模型列表。
验证一下
随便发一句「你好」,能正常回话就通了。报 401 是 Key 错,报余额相关是没充钱。
如果不用 Web 界面(比如跑无头模式、或者写脚本),Key 也可以直接放在配置文件里:
DEEPSEEK_API_KEY: sk-你的key
macOS / Linux 上要给这个文件 chmod 600,权限太松 DSH 会拒绝读取。另外:Key 等于钱包——别贴进截图、别提交到 Git、也别发到群里让人帮你「看看为什么报错」。
5 · 设置工作区
这一步比看起来重要。Agent 能做的所有文件操作,都被限制在你指定的目录里——选错了,它要么什么都改不了,要么在一个你不想被改的地方动手。
建议第一次就做三件事:
- 新建一个空目录当试验田,别一上来就选你的主力项目。
- 在 DSH 里把这个目录添加为工作区,然后确认界面显示的是绝对路径。
- 发一个不痛不痒的验证任务,比如「在根目录建一个 hello.txt,写一句话进去」。能建出来,说明读写权限是通的。
之后你对 Agent 说的每一句「改一下这个文件」,作用范围都在这块地里。这也是为什么后面装沙箱类插件时,你需要再回来检查一次这里的设置。
6 · 插件:选三个就够
插件生态很大,但入门阶段装太多只会互相打架,还拖慢每次启动。下面三个是我自己留在配置里、并且几乎每天都会碰到的。它们解决三个不同层面的问题:安全、上下文、体验。
先确认你能正常装包,然后一个个来:
dsh plugin --profile web add <包名> # 装
dsh plugin --profile web list # 看装了什么
dsh plugin --profile web remove <包名> # 卸
Agent 跑命令前的最后一道闸。危险的删除、越界的写入、可疑的下载,会在执行前被拦下来问你一句。 它不提升能力,只是把「手滑一次就没了」的概率压到接近零——装它的理由就这一条,够了。
长会话的续命装置。它把已经聊完的段落压成摘要,只留下还需要的部分,让几十轮之后的工作不至于因为挤爆上下文而突然「失忆」。 写代码、读大仓库这类长任务,开与不开是两个体验。
可视化的插件市场。装了它之后,找插件、看说明、点安装都在界面里完成,不用再靠记忆敲包名。 对新手最实际的帮助是:你能看见有哪些插件存在,而不是先在搜索引擎里猜。
装完要重启。插件是在启动时加载的,装完不会立刻生效——关掉终端重开一次 dsh web。这也是排查「插件装了但没反应」的第一招。
怎么判断一个插件值不值得装
生态里同类的包很多,质量差得也挺远。我的判断顺序是这样:
- 它替你省下的是哪一步?如果那一步你一天做不了一次,就不值得为它增加一次启动开销。
- 出错时会怎样?插件是在你的机器上跑代码的。安全类、文件类插件,优先选有明确边界和拒绝行为的。
- 还维护吗?看最近一次发布的时间,比看 Star 数有用得多。
还有一个反直觉的建议:装完一个插件,先用一周再装下一个。同时装五个,出问题时你根本不知道该卸哪个。
7 · 把它跑成一个完整工作流
到这儿零件都齐了。用一个真实的小任务串一遍,你会更清楚它擅长什么、不擅长什么:
在工作区里发任务
「看一下这个目录的结构,告诉我它是干什么的。」——先让它读,别急着让它写。
看它打算怎么做
它会先列计划再动手。这一段值得看:计划错了,后面做得越快错得越远。
让它改一个最小的地方
「把 README 的第一段改写得更短。」改动小、可验证,适合建立信任。
要求它自己验证
「跑一遍测试,把结果贴出来。」——不让它验证,它就只会说「已完成」。
这套流程的核心不是命令,而是语气:先读后写、小步验证、要求证据。 对 Agent 和对实习生,其实是一回事。
8 · 常见错误对照表
把第一次安装最可能撞上的几个坑先放这儿,省得你再去搜:
| 报错 / 现象 | 大概率原因 | 怎么修 |
|---|---|---|
node: command not found |
Node 没装或不在 PATH | 重开终端;仍不行就重装 LTS 版 Node |
ERR_PNPM_FETCH_404 |
镜像源落后于官方 registry | 加参数重试:--registry=https://registry.npmjs.org |
'pnpm' 不是内部或外部命令 |
插件管理依赖 pnpm | npm i -g pnpm |
| 401 / invalid api key | Key 抄错,或复制时带了空格 | 重新生成一个,只粘贴 sk- 之后的部分 |
| 请求一直失败,日志提到余额 | 账户没充值 | 开放平台充值后重试 |
| 插件装了但界面没变化 | 没重启,或装到了别的 profile | 重启 dsh web;确认加的是 --profile web |
| Agent 说没有权限改文件 | 工作区没设对,或文件在沙箱外 | 检查工作区绝对路径,把目标目录加进去 |
9 · 接下来可以去哪
走完这一遍,DSH 对你来说就不再是黑盒了:你知道它是个本地服务、知道能力从哪来、知道出问题先看哪儿。 再往下有三个方向,选一个顺手的就好:
- 想用得更好——继续挖插件,但一次只加一个,加完用一周。
- 想动手写——插件就是一个导出
apply函数的 TypeScript 模块,注册工具的部分不到二十行,找个下午就能跑起来。 - 想接进工作流——先把它用在「写测试」「改文档」「读陌生代码库」这三类任务上,收益最直接。
最后一句经验:它最大的价值不是替你打字,是替你试错。 那些你懒得跑一遍的命令、懒得读的文件,扔给它;但结论要自己看一遍。这个习惯养成了,工具才真的开始省时间。
必须用 DeepSeek 的模型吗?
不一定。DSH 的模型层是可替换的,配置里可以接别的 provider。但入门阶段建议就先用 DeepSeek,把变量降到最少——出了问题你能确定不是配置的锅。
会不会消耗很多额度?
取决于任务大小。读一个大仓库比改一行字贵得多。新手建议先在开放平台把余额告警打开,前几次任务盯着点用量,一两天就知道自己的节奏了。
能在公司电脑上装吗?
技术上都行,但要注意两点:它会读写你指定的目录,也会执行命令,所以别把工作区设成包含敏感数据的路径;另外公司网络可能拦 npm registry,装不上时先问 IT。
和 Claude Code、Cursor 有什么不同?
最大的结构差异是「一切皆插件」:连界面都是可换的,能力边界靠拼装而不是靠官方发版。这带来灵活度,也意味着你需要自己判断该装什么。对只想写代码的人,它并不一定更省事。