首页 / 资讯中心 / 文章详情

DeepSeek Harness 安装与配置指南:Windows 下 dsh 开机自启与 TaoToken 接入

DeepSeek Harness 安装与配置指南:Windows 下 dsh 开机自启与 TaoToken 接入 ★ FEATURED ARTICLE
1. Windows 上跑 DeepSeek Harness 到底卡在哪dsh 安装与配置的真实场景DeepSeek Harness命令行叫 dsh是 DeepSeek 官方出的 Agent 工作台跑起来之后会在本机起一个 Web UI默认地址是http://127.0.0.1:3080你可以在浏览器里做对话、任务编排、工具调用这些事。它适合谁适合想在 Windows 本地把 Agent 工作流跑通、又不想每次都手动敲命令启动的开发者。说白了它就是一个「本地常驻的 Agent 控制台」。但真在 Windows 上装坑比想象中多。我见过最多的三类问题第一Node.js 版本不对dsh 要求 v20 及以上很多人机器上还是 v16 或者更老的npm install -g直接报 engine 不匹配第二装完了不知道怎么让它开机自己起来每次重启电脑都要手动开一个 PowerShell 敲dsh web用两天就烦了第三模型通道默认走的是 OpenRouter 那套配置Key 散落在环境变量和 settings.yaml 里换机器或者换 Key 的时候要翻好几个地方。这篇就按「装 → 配 → 自启 → 验证 → 排障」的顺序走一遍重点放在两件事上一是 Windows 计划任务实现 dsh 开机自启的完整脚本和注册命令二是把模型 API 通道统一改到 TaoToken 管理Key 只维护一份。中间所有配置文件、命令都是可以直接复制粘贴的路径和你机器上的%USERPROFILE%\.dsh\保持一致。先说清楚 dsh 的目录结构后面所有操作都围绕它配置目录是%USERPROFILE%\.dsh\里面会有settings.yaml模型配置、.envAPI Key、logs\运行日志自启脚本也建议放这里。Web 默认端口 3080命令是dsh包名是deepseek-ai/dsh。记住这几个后面看命令就不会晕。环境要求就两条Windows 10 / 11Node.js v20 及以上推荐 LTS。npm 跟着 Node.js 一起装。先检查版本node -v npm -v如果node -v出来是 v18 或者更低先去 nodejs.org 下个 LTS 装上装完重开一个 PowerShell 再验一次。这一步别偷懒版本不对后面全是玄学报错。2. 把模型通道切到 TaoTokendsh 统一管理 API Key 的前置准备dsh 默认的模型配置走的是 OpenRouter 那套 provider 写法settings.yaml里写baseURL: https://openrouter.ai/api/v1Key 放OPENROUTER_API_KEY。这套能用但如果你手上有多个项目、多个 Key管理起来就散。我的做法是把通道统一收到 TaoToken好处是 Key 只在一个地方维护换模型或者换 Key 的时候改一处就行dsh 这边只认一个 baseURL 和一个 Key。TaoToken 的 API 入口是https://taotoken.net/api官网是https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。它兼容 OpenAI 的 completions 接口格式所以 dsh 里 provider 的api字段填openai-completions就能对接不需要额外装适配层。前置准备分三步。第一步去 TaoToken 控制台建一个 API Key地址是https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite建完把 Key 复制出来形如sk-开头的一串。第二步确认你要用的模型 ID这个在模型列表或者文档里能查到比如deepseek-chat这类具体以你账号下可用的为准。第三步想清楚 Key 放哪我建议放%USERPROFILE%\.dsh\.env里用环境变量引用而不是直接写死在settings.yaml这样settings.yaml可以进 Git.env加进.gitignore就行。这里有个细节要注意dsh 的settings.yaml里 provider 配置用的是apiKeyEnv字段意思是「从这个环境变量名里读 Key」不是直接填 Key 本身。所以你在.env里写TAOTOKEN_API_KEYsk-xxx然后在settings.yaml里写apiKeyEnv: TAOTOKEN_API_KEY两边名字对上就行。如果你还想在接入前先验证一下模型通不通可以先用模型对话页面测一下https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite确认 Key 和模型 ID 都能用再往 dsh 里配能省掉一轮排查。另外提一句如果你后面要长期跑编码类 Agent 任务可以了解下 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite不过这篇的重点还是先把 dsh 本地跑起来通道配通。3. 可复制的 dsh 配置settings.yaml 与 .env 完整片段这一节是全文最核心的部分所有片段都可以直接复制。先装 dshnpm install -g deepseek-ai/dsh装完验证dsh --version where.exe dshwhere.exe dsh应该输出一个路径通常在%APPDATA%\npm\下面。如果这里报「找不到」说明 npm 全局 bin 目录不在 PATH 里把%APPDATA%\npm加进系统环境变量 Path 就行。接下来配模型通道。先建.env文件路径%USERPROFILE%\.dsh\.envTAOTOKEN_API_KEYsk-你的TaoToken密钥注意这个文件不要提交到 Git建议在项目根目录的.gitignore里加一行.dsh/.env或者直接忽略.env。然后改settings.yaml路径%USERPROFILE%\.dsh\settings.yaml。把原来 OpenRouter 那段替换成下面这样llm-pi-ai: providers: taotoken: apiKeyEnv: TAOTOKEN_API_KEY api: openai-completions baseURL: https://taotoken.net/api supportsDeveloperRole: false maxTokensField: max_tokens models: - id: deepseek-chat name: DeepSeek Chat agent-default-model: provider: taotoken model: deepseek-chat几个字段解释一下避免你改错。apiKeyEnv填的是环境变量名不是 Key 本身所以这里写TAOTOKEN_API_KEY和.env里的变量名一致。api填openai-completions因为 TaoToken 兼容 OpenAI 的 completions 格式。baseURL填https://taotoken.net/api注意结尾不要多加/v1dsh 会自己拼路径多写了反而 404。models下面id是实际请求时用的模型标识name是显示名随便起。agent-default-model指定默认用哪个 provider 和哪个模型这里指向taotoken和deepseek-chat。如果你更习惯用 Web UI 配也可以打开http://127.0.0.1:3080进 Settings → Models把 Base URL 填https://taotoken.net/apiAPI Key 填你的 Key模型 ID 填deepseek-chat。但 UI 配的不会写进settings.yaml的 provider 段换机器要重配所以我更推荐直接改文件。配完先别急着设自启手动前台起一次确认能通dsh web --no-open --port 3080--no-open是不自动开浏览器--port 3080是指定端口。起来之后另开一个 PowerShell 验证curl.exe -sS http://127.0.0.1:3080/ -o NUL -w HTTP %{http_code}n返回HTTP 200就说明服务在线。然后进 Web UI 发一条消息看模型能不能正常回。如果这一步就报错先别往下走去第 5 节排障。4. Windows 开机自启计划任务 脚本三件套完整部署手动起服务能用但每次重启都要敲命令不现实。Windows 上做开机自启最稳的是「计划任务 启动脚本」组合。我在%USERPROFILE%\.dsh\下放了三个脚本start-dsh-web.ps1负责检测和调度start-dsh-web.cmd负责实际拉起 node 进程stop-dsh-web.ps1负责停服务。日志统一写到%USERPROFILE%\.dsh\logs\dsh-web.log。先建日志目录New-Item -ItemType Directory -Force -Path $env:USERPROFILE\.dsh\logs然后是start-dsh-web.cmd路径%USERPROFILE%\.dsh\start-dsh-web.cmdecho off setlocal set NODEC:\Program Files\nodejs\node.exe set DSH%APPDATA%\npm\node_modules\deepseek-ai\dsh\lib\bin.js set LOG%USERPROFILE%\.dsh\logs\dsh-web.log if not exist %USERPROFILE%\.dsh\logs mkdir %USERPROFILE%\.dsh\logs echo %date% %time% starting dsh web on port 3080%LOG% %NODE% %DSH% web --no-open --port 3080 %LOG% 21这里NODE路径默认是C:\Program Files\nodejs\node.exe如果你装 Node.js 时改了路径这里要跟着改。DSH指向全局 npm 包里的bin.js路径是%APPDATA%\npm\node_modules\deepseek-ai\dsh\lib\bin.js一般不用动。接着是start-dsh-web.ps1路径%USERPROFILE%\.dsh\start-dsh-web.ps1$ErrorActionPreference SilentlyContinue $port 3080 $log $env:USERPROFILE\.dsh\logs\dsh-web.log # 检测端口是否已有服务 $conn Get-NetTCPConnection -LocalPort $port -State Listen if ($conn) { Write-Host dsh web already listening on $port exit 0 } # 校验 node 和 dsh 是否存在 $node C:\Program Files\nodejs\node.exe $dsh $env:APPDATA\npm\node_modules\deepseek-ai\dsh\lib\bin.js if (-not (Test-Path $node)) { Add-Content $log node.exe not found; exit 1 } if (-not (Test-Path $dsh)) { Add-Content $log dsh bin.js not found; exit 1 } # 调用 cmd 后台启动 Start-Process -FilePath $env:USERPROFILE\.dsh\start-dsh-web.cmd -WindowStyle Hidden这个脚本干三件事先看 3080 端口有没有在监听有就直接退出避免重复起再校验 node 和 dsh 文件在不在最后用Start-Process隐藏窗口调 cmd 脚本。stop-dsh-web.ps1路径%USERPROFILE%\.dsh\stop-dsh-web.ps1Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -match deepseek-ai\\dsh\\lib\\bin\.js.*web } | ForEach-Object { Stop-Process -Id $_.ProcessId -Force }它按命令行特征匹配 dsh web 的 node 进程全部结束掉。三个脚本就位后注册计划任务。以当前用户执行不需要管理员也行$taskName DeepSeekHarness-Web $scriptPath $env:USERPROFILE\.dsh\start-dsh-web.ps1 Unregister-ScheduledTask -TaskName $taskName -Confirm:$false -ErrorAction SilentlyContinue $action New-ScheduledTaskAction -Execute powershell.exe -Argument -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File $scriptPath $trigger New-ScheduledTaskTrigger -AtLogOn -User $env:USERNAME $trigger.Delay PT30S $settings New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 1) Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Settings $settings -Description Auto-start DeepSeek Harness web UI on port 3080触发条件是用户登录后延迟 30 秒PT30S失败重试最多 3 次、间隔 1 分钟。-AllowStartIfOnBatteries和-DontStopIfGoingOnBatteries是笔记本场景下别因为电池就停掉。注册完查状态Get-ScheduledTask -TaskName DeepSeekHarness-Web | Select-Object TaskName, StateState 是Ready就对了。想立刻验证不用重启手动触发一次Start-ScheduledTask -TaskName DeepSeekHarness-Web Start-Sleep -Seconds 5 curl.exe -sS http://127.0.0.1:3080/ -o NUL -w HTTP %{http_code}n返回 200 说明自启链路通了。日常运维命令也给你备着启动用powershell -NoProfile -ExecutionPolicy Bypass -File $env:USERPROFILE\.dsh\start-dsh-web.ps1停止用stop-dsh-web.ps1看日志用Get-Content $env:USERPROFILE\.dsh\logs\dsh-web.log -Tail 30。升级 dsh 用npm update -g deepseek-ai/dsh升完记得重启服务。5. 常见报错排查401、EADDRINUSE、开机没起来、模型不响应这一节按真实报错来你遇到哪个对哪个。401 Unauthorized / invalid api key。这个基本是 Key 的问题。先确认.env里TAOTOKEN_API_KEY的值没有多余空格和引号然后确认settings.yaml里apiKeyEnv写的是TAOTOKEN_API_KEY而不是别的名字。还有一个容易漏的点dsh 读.env是在启动时读的你改了.env必须重启服务才生效光刷新 Web UI 没用。重启命令就是先stop-dsh-web.ps1再start-dsh-web.ps1。如果还报 401去 TaoToken 控制台确认 Key 没过期、没被禁用。EADDRINUSE: address already in use 127.0.0.1:3080。说明 3080 已经有实例在跑。先停再起powershell -NoProfile -ExecutionPolicy Bypass -File $env:USERPROFILE\.dsh\stop-dsh-web.ps1如果停了还报可能是别的进程占了 3080查一下Get-NetTCPConnection -LocalPort 3080 -State Listen | Select-Object OwningProcess Get-Process -Id 上面查到的PID确认是无关进程就换端口启动命令里--port改成 3081 之类同时计划任务里的端口也要跟着改。开机后没自动起来。按顺序查先看计划任务状态Get-ScheduledTask -TaskName DeepSeekHarness-Web | Select-Object TaskName, State如果是Disabled就Enable-ScheduledTask。再看日志Get-Content $env:USERPROFILE\.dsh\logs\dsh-web.log -Tail 50日志里通常会写清楚是 node 找不到还是 dsh 找不到。最常见的原因是 Node.js 装在非默认路径start-dsh-web.cmd里的NODE变量还指着C:\Program Files\nodejs\node.exe改一下就行。还有一种情况是登录延迟 30 秒还没到你就去看等一会儿再看。模型不响应 / reading choices 报错。这类通常是settings.yaml里 provider 或 model 名字对不上。检查agent-default-model里的provider是不是taotokenmodel是不是和models列表里的id一致。另外baseURL结尾别多写/v1写https://taotoken.net/api就行。改完settings.yaml同样要重启服务。如果还不行去 Web UI → Settings → Models 里重新选一次模型有时候 UI 里缓存了旧配置。local proxy failed 类报错。这种一般是网络层的问题先确认本机能正常访问https://taotoken.net/api用curl.exe -sS https://taotoken.net/api -o NUL -w HTTP %{http_code}n 测一下。如果这里就不通那是网络环境的事跟 dsh 配置无关。如果通再回头看 dsh 的 baseURL 有没有写错。排障的时候有个通用技巧先手动前台起dsh web --no-open --port 3080报错会直接打在终端上比翻日志快。确认能起来再交给计划任务。6. 接入文档与 Key 管理入口配置和自启都跑通之后日常要动的其实就两件事Key 和模型 ID。Key 在 TaoToken 控制台管理地址https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite换 Key 或者加 Key 都在这里。换完记得同步更新%USERPROFILE%\.dsh\.env里的TAOTOKEN_API_KEY然后重启 dsh 服务。接口细节和参数说明看接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite里面会写清楚 baseURL、鉴权方式、模型列表这些。dsh 这边只要api填openai-completions、baseURL填https://taotoken.net/api剩下的按文档对就行。如果你用的是 Claude Code 这类工具TaoToken 也有对应的接入方式文档在https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude-code-anthropicutm_campaignrewrite思路和 dsh 一样都是把 baseURL 和 Key 指过来。dsh 这边配好之后settings.yaml里那套 provider 写法其实可以复用到别的兼容 OpenAI 格式的工具上改改apiKeyEnv和baseURL就行。最后留一个我自己的习惯把%USERPROFILE%\.dsh\整个目录做个备份尤其是settings.yaml和三个自启脚本。换机器的时候装完 Node.js 和 dsh把目录拷过去重新注册一次计划任务五分钟就能恢复。.env单独存别跟着目录一起传。
阅读完成 · 觉得有帮助?
咨询建站