DeepSeek Harness 升级前怎么留基线?dump-config 对比与漂移定位
升级 DeepSeek Harness 后“配置没动但行为变了”,通常是默认值、字段或配置层顺序发生了漂移。 最省时间的排查不是逐项点设置页,而是升级前留一份有效配置基线,升级后做一次 diff。官方提供的 --dump-config 与 --dump-config-schema 正好对应“值”和“字段”两类漂移。
DeepSeek Harness:升级前留哪几份基线
至少留两份:有效配置树与字段 schema;条件允许再留一份默认组合包基线。 三份各有用:(来源)
| 基线 | 命令 | 用途 |
|---|---|---|
| 有效配置 | --dump-config | 看升级后实际值变了什么 |
| 字段声明 | --dump-config-schema | 看字段、默认值、约束变了什么 |
| 模板基线 | --dump-default-config | 看组合包默认值本身有没有变 |
有效配置会叠加 profile 的 cordis.patch.yml、home 级 patch 与命令行 --patch,并带来源注释。它才是“现在真正生效的树”。
建议把基线放在 profile 目录之外,例如 /tmp/dsh-baseline/ 或单独的运维仓库;不要放在会被重建或清空的目录里。
DeepSeek Harness:升级后怎么 diff
diff 的目标不是“找出所有不同”,而是把差异归因到某一层。 按下面做:(来源)
# 升级前
dsh --profile web --dump-config > /tmp/dsh-baseline/config-before.yml
dsh --profile web --dump-config-schema > /tmp/dsh-baseline/schema-before.json
# 升级后
dsh --profile web --dump-config > /tmp/dsh-after/config-after.yml
dsh --profile web --dump-config-schema > /tmp/dsh-after/schema-after.json
diff -u /tmp/dsh-baseline/config-before.yml /tmp/dsh-after/config-after.yml
- 先看有效配置 diff — 关注值的变化,不要被注释和路径差异干扰。预期:能列出新增、删除、改值的行。
- 再看 schema diff — 关注字段增删、默认值变化与 partial 标记。预期:能解释“为什么同一个字段现在行为不同”。
- 最后回看默认基线 — 如果有效配置没变但 schema 变了,用
--dump-default-config判断是不是模板默认值变了。预期:区分“我的 patch 改了”与“新版本默认改了”。
diff 时建议先过滤注释行,再按插件名分组看。注释里带来源文件路径,路径变化会造成大量噪声。
DeepSeek Harness:三类 diff 结果怎么读
同样是“差异”,处理方式完全不同:默认值变化要评估,用户覆盖变化要回滚,字段删除要改配置。 三类:(来源)
- 默认值变化 — 你的 patch 没动,但最终值变了。预期:查新版本配置目录或 release notes,确认是否有意调整;必要时在 patch 里显式固定旧值。
- 用户覆盖变化 — 某个值被另一个层覆盖。预期:按来源注释找到具体 patch,调整层顺序或删掉重复覆盖。
- 字段增删或改名 — schema 里出现新字段、旧字段消失或标 partial。预期:按新 schema 改写配置,不要继续写已删除字段。
如果 diff 里出现大量“只是顺序变了”的行,先确认是不是升级改变了组合包顺序;顺序变化可能影响“后层覆盖前层”的结果。
DeepSeek Harness:三种基线策略
一次性升级、CI 流水线、多机部署,留基线的方式不同。 三种策略:(来源)
- 一次性升级 — 升级前手动导两份,升级后 diff 一次。预期:适合个人机器,成本最低。
- CI 流水线 — 每次构建都导出 schema,和上一版做 diff。预期:提前发现字段破坏性变化。
- 多机部署 — 每台机器导出有效配置,集中比对。预期:发现“同一版本不同机器行为不一致”。
多机场景尤其需要有效配置,而不是只看 schema;因为每台机器的 home patch 可能不同。
一份可以直接用的采集脚本:
tag="$1"
dsh --profile web --dump-config > "/tmp/dsh-$tag-config.yml"
dsh --profile web --dump-config-schema > "/tmp/dsh-$tag-schema.json"
printf '%s\n' "$tag" > "/tmp/dsh-$tag-version.txt"
dsh -V >> "/tmp/dsh-$tag-version.txt"
升级前后各跑一次,再把两份 YAML 做 diff -u。schema 是 JSON,建议先用 jq -S . 排序键再比,避免键顺序造成假差异。
DeepSeek Harness:注意事项与限制
dump 是检查工具,不执行插件,也不证明启动一定成功。 四点:(来源)
- 不要传应用参数 —
--port、--host这类参数会被 dump 拒绝,因为它展示的是解析应用参数之前的树。 - 可能含敏感信息 — 默认值、路径与插件错误可能带敏感数据,分享前脱敏。
- schema 可能 partial — 回调验证、不支持的正则等无法完整投影;partial 输出只能参考。
- dump 会初始化缺失 profile — 第一次对某个 profile 跑 dump 可能创建基础文件,这是正常行为。
另外,三种 dump 互斥,不要试图一条命令同时导出 YAML 和 schema。
保存基线时建议把版本号写进文件名,例如 config-before-0-11-2.yml。否则过几天回头看 diff,很容易忘了哪份对应哪个版本,反而增加排查成本。如果团队多人维护,基线文件里再记一条导出命令,别人才能用同样的层复现。
如果 diff 结果要贴进工单,附上导出命令与版本号,比只贴一段差异更有用;否则读者无法判断这是默认值变化还是某个 patch 造成的。
DeepSeek Harness 常见问题
Q:升级后没有 diff,但用户反馈行为变了,还查什么? 查运行时输入、模型路由与会话日志。配置基线只能排除“配置漂移”,不能排除模型、网络或插件版本变化。
Q:能不能把 diff 做成自动告警? 可以,但先过滤注释与路径,再按字段白名单比较;否则每次升级都会产生大量噪声。
Q:schema 里字段还在,但行为变了,为什么? 字段还在不代表默认值或底层实现没变。对比默认值注释,并查版本变更说明;必要时在 patch 里显式写值。
一句话收束: 升级前留“值”和“字段”两份基线,升级后先 diff 再归因;没有基线,所有“行为变了”都只能靠猜。
常见问题
DeepSeek Harness 里,至少保存两份:--dump-config 导出的有效配置树,以及 --dump-config-schema 导出的字段 schema。前者反映当前实际生效值,后者反映字段、默认值与约束;只留其中一份,升级后很难区分“值变了”还是“字段变了”。
DeepSeek Harness 里,因为 --dump-config 叠加的是组合包、profile patch、home patch 与命令行 patch 的最终结果;升级可能改变组合包默认值或字段投影,即使你的 patch 没动,最终值也会变。对比升级前后的 dump 能直接看到差异。
DeepSeek Harness 里,不建议直接提交。dump 可能包含默认值、路径甚至敏感配置;分享或入库前应脱敏,并确认其中没有凭据引用对应的明文。schema dump 的默认值与插件错误也可能含敏感数据。
DeepSeek Harness 里,先看 stderr 是否有找不到目标的 patch 或 schema 投影失败;--dump-config-schema 在 partial 投影时会保留部分输出并以 1 退出。不要用不完整的输出做完整基线,先修好配置层再重跑。
DeepSeek Harness 里,只能看模板基线,不能看你的实际配置。它不叠加 profile、home 与命令行 patch,适合判断“新版本默认值变没变”,但不能替代 --dump-config 的有效值对比。
相关术语
- 配置漂移
- 配置漂移是升级或环境变化后,最终生效配置与升级前基线之间出现的差异,可能来自默认值变化、字段增删或 patch 层顺序变化。— DeepSeek Harness 官方参考 - dsh CLI 行为
- 有效配置树
- 有效配置树是组合包层、profile patch、home patch 与命令行 patch 依次叠加后的最终配置,由 --dump-config 输出,并带每行的来源注释。— DeepSeek Harness 官方参考 - dsh CLI 行为
- schema 投影
- schema 投影是 --dump-config-schema 把插件 Config 声明转换为 JSON Schema 的过程;回调验证等无法完整投影的约束会标为 partial。— DeepSeek Harness 官方参考 - dsh CLI 行为
- partial
- partial 是 schema dump 的不完整标记,表示某些约束未被完整投影;出现 partial 时输出仍可用,但不应被当成运行时校验的完整等价物。— DeepSeek Harness 官方参考 - dsh CLI 行为
来源
- DeepSeek Harness 官方参考 - dsh CLI 行为· deepseek-ai
- DeepSeek Harness 官方参考 - 插件配置目录· deepseek-ai