1. 第一次跑 DeepSeek Harness,卡在哪一步
DeepSeek Harness(命令行里叫dsh)是深度求索官方开源的 Agent 运行时,MIT 协议,主打「一切皆插件」。它不是一个云端平台,而是装在你本机、直接在你项目目录里干活的代码智能体:能读文件、改代码、跑命令、拆子任务,交互形态是 CLI + Web UI 双份,默认地址http://127.0.0.1:3080。适合谁?适合想在自己仓库里让 AI 帮忙修 Bug、写测试、做重构的开发者,也适合想把 Agent 底座私有化、自己写插件扩展的团队。
但第一次上手的人,十有八九会卡在同一个地方:Node.js 版本不对、npx拉包卡住、Web UI 起来了却选不了工作区、模型 Key 填了没反应。这篇就把从环境准备到npx拉起 CLI、再开 Web UI 的整条链路拆开讲,每一步都给可复制的命令和config.toml骨架,最后附上「怎么确认它真的在响应」的检查动作。你照着走一遍,基本能一次跑通。
需要先说明一点:Harness 只是 Agent 外壳,推理还是要走模型 API,按所选模型的用量计费。所以除了装工具,你还得准备一个能用的 API 通道,后面我会用 TaoToken 的统一 Key 做接入示例,省得你为每家模型单独配一遍。
2. 前置准备:Node.js 与 TaoToken 统一 Key
2.1 Node.js 环境怎么选
dsh通过 npm 分发,所以第一件事是装 Node.js。建议直接上 LTS 版本,别用太老的。检查一下:
node -v npm -v如果node -v输出低于 18,或者命令直接找不到,就去 Node.js 官网下 LTS 安装包。macOS 用brew install node,Windows 用官方 msi 安装器最省事。装完重开一个终端再验一次,环境变量才会生效。
npx是随 npm 一起装的,不用单独装。它的作用是「临时下载并运行一个包」,所以你不需要全局npm install,直接npx @deepseek-ai/dsh就能拉起最新版。这也是官方推荐的快速体验方式。
2.2 为什么建议用 TaoToken 做统一通道
Harness 支持 DeepSeek 原生、Anthropic、OpenAI 目录提供方,也支持自定义 OpenAI 兼容端点。如果你只用一个模型,直接在设置里填对应 Key 就行。但实际开发里经常要在几个模型之间切,每家一个 Key、一套计费、一个后台,管理起来很碎。
TaoToken 的思路是给你一个统一的 Key 和 API 通道,把多家模型收敛到一个 OpenAI 兼容端点上。对 Harness 来说,你只要在「自定义提供方」里填一个 Base URL 和一个 Key,就能在多个模型间切换,不用反复改配置。官网在https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=,API 端点是https://taotoken.net/api。
先去控制台把 Key 建出来,路径是 API Keys 页面,建完复制保存,后面配置要用。这个 Key 只写不回显,丢了就重建一个。
3. 可复制配置:npx 启动 CLI 与 Web UI
3.1 一条命令拉起 Web UI
最省事的启动方式:
npx @deepseek-ai/dsh web默认会在http://127.0.0.1:3080起服务,本机启动时通常会自动打开浏览器。如果你是 SSH 连到远程机器上跑,它只会打印宿主机 URL,需要你自己做端口转发。不想自动开浏览器就加参数:
npx @deepseek-ai/dsh web --no-open第一次执行npx会下载包,网络慢的话多等一会儿,别急着 Ctrl+C。
3.2 从源码跑(需要 pnpm)
想改代码或跟最新提交,就走源码:
git clone https://github.com/deepseek-ai/deepseek-harness.git cd deepseek-harness pnpm install pnpm run build pnpm dsh webpnpm run build准备构建产物,pnpm dsh web直接用已构建产物运行,不会重复构建。注意dsh进程会把「启动时所在目录」当作默认文件系统位置,所以最好在你想操作的项目目录里启动,或者启动后在 UI 里手动加工作区。
3.3 config.toml 骨架
Harness 的配置分两层:凭据存在$DSH_HOME/.credentials.yaml(只写不回显),模型来源和路由写在$DSH_HOME/settings.yaml。如果你习惯用 TOML 管理,可以按下面这个骨架整理自己的配置笔记,字段名以官方文档为准:
# ~/.dsh/config.toml 个人配置骨架示例 [server] host = "127.0.0.1" port = 3080 open_browser = true [workspace] # 默认工作区,留空则启动后在 UI 里手动选择 path = "/Users/you/projects/demo" [provider.taotoken] # 自定义 OpenAI 兼容提供方 type = "openai-compatible" base_url = "https://taotoken.net/api" api_key_env = "TAOTOKEN_API_KEY" models = ["deepseek-chat", "claude-sonnet", "gpt-4o-mini"] [provider.taotoken.compat] # 自建/网关类端点常见兼容开关 supports_developer_role = false max_tokens_field = "max_tokens"把 Key 放进环境变量,别硬编码进文件:
export TAOTOKEN_API_KEY="sk-你的Key"Windows PowerShell 用$env:TAOTOKEN_API_KEY="sk-你的Key"。这样配置和密钥分离,换机器只改环境变量。
3.4 在 Web UI 里接模型
启动后进「设置 → 模型」。用 TaoToken 的话,点「添加自定义提供方」,填:
| 字段 | 填写内容 |
|---|---|
| Provider ID | taotoken |
| 基础 URL | https://taotoken.net/api |
| API 协议 | OpenAI 兼容 |
| 凭据 | 你的 TaoToken Key |
| 模型 | 至少填一个,如 deepseek-chat |
保存后模型路由立即生效,不用重启服务。如果你用 DeepSeek 原生,直接在 DeepSeek 卡片填 Key 即可;用 Anthropic、OpenAI 就选对应目录提供方。
注意:DeepSeek 原生 chat 路由是纯文本。要图片输入,得在自定义提供方的
settings.yaml里给该模型标input: [text, image]。自建网关若拒绝请求,通常要在路由上设compat.supportsDeveloperRole: false和compat.maxTokensField: max_tokens。
4. 验证请求:确认 CLI 与 Web UI 真的在响应
4.1 检查服务是否起来
Web UI 启动后,先确认端口在监听:
curl -I http://127.0.0.1:3080返回 200 或 302 就说明服务活着。如果连接被拒,多半是端口被占或进程没起来,换个端口再试:
npx @deepseek-ai/dsh web --port 30814.2 检查 CLI 是否可用
另开一个终端,确认dsh命令能响应:
npx @deepseek-ai/dsh --help能看到子命令列表(web、run等)就说明 CLI 链路通了。如果报「command not found」,检查 Node.js 是否装好、npx是否在 PATH 里。
4.3 发一条真实请求验证模型通道
Web UI 里选好工作区后,会话输入框才会激活。发一句最简单的:
Summarize this repository and identify its main packages.Agent 会读工作区文件做总结。如果它开始列文件、给结论,说明模型通道和工具调用都正常。要是卡住不动或报鉴权错误,回到「设置 → 模型」检查 Key 和 Base URL,重点看 Base URL 有没有多写或少写/v1之类的路径。
再补一个能落地的验证:让它建个文件。
在当前工作区新建 snake.html:用 HTML + CSS + JavaScript 写一个贪吃蛇小游戏(单文件,Canvas 实现,方向键控制,实时显示得分)。创建完成后检查文件是否已正确写入。跑完去文件管理器看snake.html在不在,双击能玩就说明「读 + 写 + 执行」整条链路都通了。这一步比看日志直观得多。
5. 本篇常见错排查
npx 拉包卡住或超时。多半是网络问题,重试一次,或者先npm config get registry看源对不对。公司网络有代理的话,按内网规范配 npm 代理,别乱设全局变量。
Web UI 起来了但选不了工作区。全新 UI 默认不选中任何工作区,必须手动「添加并选中」后会话输入框才可用。这是设计如此,不是 Bug。
模型填了 Key 没反应。先确认 Base URL 完整,OpenAI 兼容端点通常要带/v1或按文档给的路径。再看 Key 有没有多余空格。TaoToken 的端点就是https://taotoken.net/api,别自己拼错。
自建网关返回 400。大概率是兼容字段问题,按前面说的设compat.supportsDeveloperRole: false和compat.maxTokensField: max_tokens。
Agent 执行命令被拦。这是权限策略在起作用,敏感操作会在 Web UI 里向你申请审批,点同意即可。官方建议运行前先读项目根目录的 SAFETY 说明(中文版SAFETY.zh.md),Agent 会真实改文件、跑命令,重要项目先建分支或用测试目录。
端口冲突。3080 被占就换端口,--port参数直接指定。
6. 接下来怎么走
跑通之后,日常最常用的还是 Web UI,浏览器里选工作区、发指令、审批敏感操作,体验最顺。如果你要把它接进脚本或 CI,就走 CLI 形态,用dsh run之类的子命令做非交互调用。想长期在本地做编码和 Agent 任务,建议把 TaoToken 的 Key 配成环境变量,模型切换只改配置不改代码,省心。
接入和排障相关的入口我放这儿:API Keys 在https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite,接入文档在https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite。想先在网页里试模型效果,用模型对话https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=chat&utm_campaign=rewrite;要长期跑编码和 Agent 任务,看 Coding Planhttps://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite;控制台在https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite。
最后一句实在话:Harness 还在开发者预览阶段,迭代快、可能有破坏性变更,升级前先看 release note,别在生产目录直接跑。