前言¶
在 DeepSeek Harness(DSH)里跑智能体时,模型偶发会把推理或正文退化成 endless 的符号重复:单字符连写,或整块多字符单元反复出现。这类输出会写进会话归档,也可能通过写文件类工具落进仓库;会话一旦被污染,继续对话往往只会续写同一条流,而文件里的污染还会带到下一次会话。
单靠换模型或手动删文件,很难在「流式输出到达 UI 之前」就截断,也缺少统一的扫描与修复入口。社区插件 dsh-guard-degen(维护者 chunqing286,分类 admin-security)面向上述问题:在模型边界做流 containment,对写入做校验,并提供工件与会话的扫描、预览与修复能力。DSH 生态里插件各自独立;目录站点 SkillHub 插件页 与 GitHub 仓库并不等同于 DeepSeek / 幻方官方应用商店。
这是什么¶
dsh-guard-degen 是 DeepSeek Harness 的退化守卫(Degeneration guard):拦截失控符号流,并附带修复被污染工件与会话的工具链。npm 包名与仓库名均为 dsh-guard-degen,当前 README 与 package.json 所示版本为 0.1.1,许可证 MIT,要求宿主 DSH 版本 >=0.1.6-alpha.2 <0.3.0-0。
README 说明,在其测量中,此类退化在 MiniMax 系列模型上较为集中;检测规则针对的是符号 run(连续重复),而非单个合法标点,以避免把仓库里正常的 ★ 等标记误判为退化。
核心功能¶
插件 README 归纳了四块能力,下面按同一顺序说明。
1. 流 containment(Stream containment)¶
在输出到达 UI 之前检测符号 run,并按策略截断、折叠或删除。推理通道(reasoning)与文本通道(text)可分别配置,策略共四种:
| 策略 | 对退化 run 的处理 |
|---|---|
off |
不检测、不改动 |
truncate(默认) |
截断该通道,本轮以 degeneration 错误结束 |
sanitize |
折叠为标记 〔退化符号流×N〕,本轮继续 |
remove |
整段删除,不在流中留标记;删除内容仍记入 verdict 日志 |
除单符号 run 外,插件还支持多字符单元整段重复(例如 ⇒⇒§ 块反复出现)。stream.unitRun / stream.unitRepeats(默认开启 / 4)仅作用于流守卫;工件修复、工具守卫、会话遮蔽各有独立开关与阈值,互不影响。
2. 写入校验(Write verification)¶
写类型工具执行后,插件可回读文件:若发现污染,则阻止结果并把发现反馈给模型。对应配置项 postExecute.enabled 默认为 false(开启会产生 IO 成本);postExecute.roots 为空时限定在工作区内。
3. 重试与换模型(Retry and model switch)¶
请求失败时可按策略重试:retry.policy 默认 same-model,retry.maxSameModelRetries 默认 1;retry.switchModel.enabled 默认 false,启用后可切换到你在配置里显式指定的模型。
4. 工件与会话清理(Artifact and session cleanup)¶
扫描工作区与会话历史,生成报告;默认 仅预览(artifacts.apply 为 false),勾选条目后可 preview repair,界面以红/绿 diff 展示修复前后,确认后再写入。
会话遮蔽有两种内容模式:Collapse(〔退化内容已遮蔽×N〕)与 Remove(默认,删除 run 且不占位)。落地方式可选写入副本或原地改写归档(默认 sessions.mode 为 replace)。工具调用参数在遮蔽时保持字节一致,README 说明约 24% 落在 tool 参数内的污染符号会刻意保留,以免破坏配对。
安装完成后,Settings 会出现 Degeneration guard(与 Plugins 同级),下设 Config、Logs、Artifacts 三个独立页面:配置表单、verdict 日志(含 session 过滤与误报反馈)、工件/会话扫描与修复。当前会话视图行中另有 Degeneration guard 视图,范围限定为当前会话的工作目录与会话本身。
安装与启用¶
包已发布到 npm,推荐一条命令安装(将 <your profile> 换成宿主实际使用的 profile;dsh web 常用 web,桌面端 profile 名可能不同):
dsh plugin --profile <your profile> add dsh-guard-degen
也可从仓库安装:
dsh plugin --profile <your profile> add github:chunqing286/dsh-guard-degen
或在 UI:Plugins → Discover,添加索引源 https://cdn.jsdelivr.net/npm/dsh-plugin-catalog/index.json,搜索 “degeneration guard” 后 Install。
无论哪种方式,包内 cordis.patch.yml 会作为 bundle 层一并应用;宿主重载后 Settings 中即可看到 Degeneration guard。
手动安装时,可向 $DSH_HOME/profiles/<profile>/cordis.patch.yml 追加 insert 块,或在 profile manifest 里通过 bundles 与 dependencies 引用包名;相对路径安装需自行满足 @deepseek-ai/dsh-typert-protocol、@deepseek-ai/schemastery 等运行时依赖,npm 安装会自动拉取。
典型用法¶
设置页¶
- 打开 Settings → Degeneration guard → Config,确认
enabled(默认true)及stream.reasoning/stream.text策略是否符合预期。 - 若只需对部分模型启用守卫,配置
modelIncludes(空数组表示全部模型)。 - 在 Logs 中按 session 筛选 verdict,查看触发的规则与红/绿 diff;误报可使用页面内的 false-positive 反馈,或命令
/degen-ack将最新 verdict 记为误报并放宽该规则一步。
斜杠命令¶
README 列出以下命令(在 DSH 会话或宿主支持的入口中使用):
| 命令 | 作用 |
|---|---|
/degen-status |
守卫状态、规则表、近期 verdict |
/degen-scan [paths…] |
只读扫描工件(默认工作区) |
/degen-fix <file…> |
修复指定文件(改写前备份) |
/degen-clean |
遮蔽当前会话中的退化内容(默认原地改写归档) |
/degen-ack |
将最新 verdict 记为误报并放宽规则 |
工件与会话修复流程¶
- 进入 Artifacts 或会话内的 Degeneration guard 视图,执行扫描。
- 勾选需要处理的文件或会话,选择遮蔽/修复模式,点击 preview(repair 或 masking)。
- 确认红/绿 diff 无误后,再执行 apply;默认 preview 阶段不会写盘。
运行时修改的配置会写入 ~/.dsh/guard-degen/config.json,叠在 profile 配置之上。常用键包括:toolGuard.mode(默认 warn)、artifacts.mode(默认 remove)、sessions.maskMode(默认 remove)、logging.enabled(默认 true)。完整表格见 GitHub README 的 Configuration 节。
适用场景与注意¶
适合谁: 长期在 DSH 里接多模型、且遇到过推理/正文符号流退化、或仓库与会话已被重复符号污染的团队或个人。分类 admin-security 反映其侧重治理与边界控制,而非通用业务插件。
安全与权限: 插件以当前 DSH 进程权限运行;启用 postExecute、执行 /degen-fix 或 apply 修复时会读写工作区与会话归档。安装前应阅读源码与 MIT 许可证,确认备份策略(如 .degen-backup、~/.dsh/guard-degen/backups/)符合你的合规要求。README 强调:artifact 扫描与修复默认绑定 artifacts.roots(默认工作目录);浏览器端不能自行指定写目标或放宽检测阈值。
行为细节: 流守卫在已释放的 run 头部无法撤回时,会选择截断流而非只折叠尾部;单次调用干预次数受 stream.maxInterventionsPerCall(默认 1)限制,用尽后会截断并结束,避免 raw 符号进入对话。会话原地遮蔽后,聊天 UI 不会立刻刷新,需重新打开会话才能看到改写结果;运行中的会话仍会继续追加新消息。
结尾¶
dsh-guard-degen 把「退化符号流」从被动清理变成可配置的四层防线:流 containment、工具写入校验、失败重试/换模、以及可预览的工件与会话修复。若你在 Harness 里遇到过 ⇒ 一类 run 占满上下文或污染仓库,可以先从 npm 安装并在 Settings 里打开 Degeneration guard,用 /degen-scan 与 preview diff 评估影响再决定是否 apply。