前言
前两篇我们聊了「怎么挑模型」和「codex 怎么切模型」。这一篇换个主角:deepSeekHarness(下面简称 dsh)。
codex 管的是“写代码”这一块,而 dsh 更像是一个本地的 AI 工作台:统一管理多家模型的渠道、统一下发上下文和思考强度、支持多模态、还能挂插件。如果你手上有一堆 API Key(官方的、中转的、公司的),dsh 基本就是那个“总闸”。
这篇记录我部署和配置的全过程,重点在自定义渠道怎么接、配置怎么写——这两块官方文档讲得比较粗,坑也比较多。
一、部署方式:强烈建议源码模式
dsh 有多种安装方式,但我的建议只有一条:用源码模式部署。
原因很简单,也是我踩过坑之后的血泪总结:
能看到配置项的定义。配置文件里那些
reasoningEfforts、input、compat到底是什么、有哪些取值,看源码比看文档快一百倍。出问题好排查。一键安装包报错时你两眼一抹黑,源码模式可以直接看日志、加断点、改代码验证。
方便魔改。想加一个自己渠道的特殊兼容处理(比如某个网关不认某个字段),源码模式下改一行就行。
项目地址(源码就在这儿):github.com/deepseek-ai/deepseek-harness
1、实际部署步骤(Windows)
仓库拉到本地之后,进到目录里执行这三条命令就行:
进入目录:
E:\dsh\deepseek-harness安装依赖:
pnpm install打包前端:
pnpm run build启动:
pnpm dsh web
下面是我实际跑的四步截图,顺便把几个「看着吓人其实没事」的警告说明一下。
① 源码目录结构
② 安装依赖
pnpm install
WARN Unsupported platform——那是 linux 平台的原生包(landlock-run)在 Windows 上装不了,不影响使用。看到 Done in 2.1s using pnpm 就是装好了。③ 打包前端文件
pnpm run build
build:libhost、build:lib:client……中间那些 npm warn Unknown user config 无视即可。④ 启动服务
pnpm dsh web
启动成功会打印访问地址,形如 http://127.0.0.1:3080/?token=xxxxx,浏览器直接打开就能用(token 是自动生成的,连在后面一起复制)。
二、渠道接入:官方 vs 自定义
dsh 里的模型渠道分两类,理解这两类的区别非常关键:
| 类型 | 怎么接 | 适用场景 |
|---|---|---|
| 官方渠道 | 界面里直接选(内置了各家的目录和协议),填个 API Key 就能用 | 省事,适合新手;但只能用官方支持的模型和协议 |
| 自定义渠道 | 界面「添加自定义提供方」,或直接写 settings.yaml 的 providers 段 | 中转平台、公司内网网关、私有部署模型;灵活度最高,但配置要自己填 |
配置文件位置(Windows):
C:\Users\你的用户名\.dsh\settings.yaml
1、官方渠道:设置 → 模型 → 添加提供方
打开 设置 → 模型,所有渠道都在这儿管。右上角「打开配置文件」可以直接跳到 settings.yaml,下面两个按钮对应两种接法:
+添加提供方:从内置列表里挑,官方和常见平台走这个;
+添加自定义提供方:中转平台、公司网关、私有部署走这个。

2、纯自定义渠道:添加自定义提供方
这个表单就四项,填完保存即可:
显示名称:自己起名,我习惯带渠道来源,一眼能看出是哪条线;
API 地址:填到
/v1为止(多一层少一层都会 404);API 协议:
openai-completions/openai-responses/anthropic-messages,按渠道实际支持的选;模型目录:逐个加模型,每个都要填 模型 id + 上下文窗口 + 最大输出 token——这三项填错,要么报错要么输出被截断。
https://api.zjh336.cn/v1、协议 openai-completions,模型目录里挂着 deepseek-v4-flash-0731(1M 上下文 / 131072 输出)、deepseek-v4-pro-0813、glm-5.2、qwen3.8-27b。settings.yaml 的 providers 里——所以「界面配」和「直接改配置文件」是等价的。这也是下面那节要讲的重点。三、自定义渠道配置详解(重点)
自定义渠道的核心就是 settings.yaml 里的 providers。结构长这样(这是脱敏后的真实结构):
llm-pi-ai: providers: rhythm: # 渠道名,随便起,别和内置的重复 apiKeyEnv: RHYTHM_API_KEY # key 放环境变量里,不要明文写进配置 api: openai-completions # 协议:openai-completions / openai-responses / anthropic-messages baseURL: https://tokenrhythm.studio/v1 compat: supportsDeveloperRole: false # 网关不认 developer 角色,系统提示词回到 system models: - id: deepseek-v4-flash-0731 contextWindow: 1000000 # 上下文窗口 maxTokens: 131072 # 单次最大输出 input: # 多模态必须显式声明! - text - image reasoningEfforts: # 思考强度映射:左=dsh 档位,右=发给上游的值 low: low high: high max: max - id: deepseek-v4-pro-0813 # 结构同上 - id: glm-5.3-flash # 结构同上 - id: deepseek-flash # 结构同上
glm-5.3-flash:我在另一个渠道里只声明了 off / high 两档,而这条渠道里是 low / high / max 三档。以网关实际支持什么为准,别照抄。1、三个高频配置项(务必搞懂)
这三个是我配置过程中改动最多的,单独拎出来说:
① supportsDeveloperRole
作用:是否支持
developer角色。为什么关键:OpenAI 新协议里系统提示词用的是
developer角色,但很多第三方网关不认这个角色,一送就报错。怎么配:网关不认就设
false——dsh 会自动把系统提示词回退成system角色。
supportsDeveloperRole 改成 false 试试,十有八九就好了。② input(多模态开关)
作用:声明该模型支持哪些输入类型。
取值:
[ text ]、[ text, image ]。怎么配:不写默认就是纯文本。想让模型看图,必须显式加上
image,否则前端根本不会给你上传图片的入口。
③ reasoningEfforts(思考强度映射)
作用:把 dsh 界面上的思考档位,映射成上游 API 真正接受的值。
格式:左边是 dsh 的档位(
off/low/medium/high/xhigh/max),右边是发给上游的值。技巧:右边写空值表示“关闭思考”;不同模型支持的档位完全不一样(见下表)。
| 模型 | 支持的档位 | 说明 |
|---|---|---|
| GPT 系(5.6 等) | off(none)/low/medium/high/xhigh/max | 档位最全,部分 pro 档只有 medium/high/xhigh |
| Claude 4.7+ | xhigh / max | 官方新等级;4.5 一代是预算式 low/medium/high |
| DeepSeek V4 系 | flash: low/high/max;pro: high/max | 都不支持关闭思考,别配 off |
| GLM 5.3 / 5.3-Flash | off / high | 开/关两档,flash 不在官方目录时按同家族声明 |
| Gemini flash 系 | off / high | 官方无分级,只有开/关 |
| Kimi K3 | off / low / high / max | —— |
2、上下文配置
contextWindow:上下文窗口,决定自动压缩什么时候触发。填小了会提前压缩丢上下文,填大了可能超上游限制报错。以渠道文档为准。maxTokens:单次最大输出。这个值各家差异巨大——有的模型能给到 131072,有的只有 4096,填错要么截断要么报错。
我的原则:宁可填小一点也别填大,因为上游报错的时候你根本不知道是哪个参数的问题。
3、Claude 专属:forceAdaptiveThinking
如果你接的是 Claude 较新的模型,可能会见到 compat 下面这一项:
compat: forceAdaptiveThinking: true # 官方 adaptive-thinking 模型:等级走 effort # 不写这一项会「退化」为预算式思考
踩坑提示:这行注释不是我编的——不显式声明,模型会退化成“预算式思考”,也就是你给它 high,它按预算自己估,而不是按官方等级走。想要体验一致,记得加上。
RHYTHM_API_KEY,配置里不出现明文)。四、多模态与插件
1、多模态怎么用起来
三步走,缺一不可:
模型本身支持图片(去渠道文档确认);
settings.yaml里给该模型加上input: [ text, image ];重启 / 重新加载配置,界面上才会出现贴图入口。
我本地在 settings.yaml 里声明了图片输入的模型有:GLM-5.3-Flash、DeepSeek 的 vision 系(deepseek-v4-flash-vision-exp)、GPT 系、Claude 系,另外还有几个 qwen / mimo 的型号。声明了才代表这个渠道认图片输入,具体能不能用得实测。
2、插件安装
插件用命令行装,装完在「设置 → 插件 / 插件市场」里管理:
pnpm dsh plugin --profile web add dshmarket
--profile web:装到 web 端(不加这个参数会装到别的 profile 上,装完在界面里找不到);add dshmarket:插件名,这里是「插件市场」那个。
装完重启一下 pnpm dsh web,设置里的插件市场就有内容了。
市场里排在前面的几个,我挑了几个看着实用的:
| 插件 | 干什么的 |
|---|---|
dsh-task-board | 侧边栏多列任务看板:卡片交给真实智能体会话去执行,支持 cron 定时,关掉浏览器也照样跑 |
dsh-git-graph | 输入框上方给一个 Git 分支选择器,并把分支泳道和提交历史画成图谱,可以沿着时间线找任意一次变更 |
dsh-remote-web-ui | 用手机 / 电脑远程操控 dsh web 工作区:扫码配对、令牌连通、SSE 实时同步,有移动端和完整桌面 GUI 两种形态 |
DSH-better-sidebar | 侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,还支持三方插件注册新 Tab |
dsh-skill-explorer | 技能(Skill)浏览与探索 |
安装就是在卡片上点「安装」;命令行装也一样:
pnpm dsh plugin --profile web add <插件名>
五、部署与配置常见问题
六、小结
部署用源码模式,看得见配置定义、排查快;
自定义渠道就是往
settings.yaml的providers里加一段;三个必懂配置:
supportsDeveloperRole(网关角色兼容)、input(多模态声明)、reasoningEfforts(思考强度映射);上下文和 maxTokens 以渠道文档为准,宁可小不要大;
插件用
pnpm dsh plugin --profile web add <插件名>安装,装完在「设置 → 插件市场」里管理(写这篇时市场里已经有 3.4k 个插件)。









还没有评论,来说两句吧...