前言¶
在 DSH 里跑多步智能体任务时,常见一类退化:模型在思考链里反复重新推导已经得出的结论、把工具调用写成纯文本、原地重复同一段话,或输出无意义的递增数字流。这类问题往往发生在单次生成流内部,下一步起手时上下文里并没有把「已经确立的结论」显式留在模型眼前,于是每轮工具往返后又要从头推一遍。
社区插件 dsh-cot-anchor(维护者 JiewiW,分类:记忆)针对的就是这一痛点:在工具结果返回后,从上一段思考中摘出已成立结论并插回上下文;同时在生成过程中按本地规则识别打转、重复、伪工具调用等形态,必要时软切本次请求,让回合从断点续跑。它不替代跨步骤的步数治理——那属于姊妹插件 dsh-step-governor 的职责。
这是什么¶
dsh-cot-anchor 是 DeepSeek Harness(DSH)插件,一句话定位:思考锚点——从模型上一段思考中提取已确立结论,在工具结果后注入,减少重复推导;并可识别打转与伪工具调用。
- 目录页:https://www.skillhub.cn/plugins/JiewiW/dsh-cot-anchor
- 源码:https://github.com/JiewiW/dsh-cot-anchor
- 当前 package 版本:0.2.4(MIT)
插件以当前 DSH 进程权限运行;安装前请自行查看仓库源码与许可证。
核心功能¶
结论回流(默认生效)¶
每次工具结果返回后,插件从最新思考中摘出已成立的结论(默认最多 3 条、每条 ≤ 220 字),以 user 角色追加在工具结果之后、下一次请求之前,并尾部写入会话日志,不改写已有内容,因此不会打穿前缀缓存。
工作流可以概括为:
模型思考 → 工具执行 → [插件] 摘出已成立的结论插回上下文 → 下一步思考
↑
只在工具边界注入
结论由规则从思考文本中摘句得到;入池前会剔除纯话语标记句与路线意图宣告句,但不会从模型输出里删除 Wait / Actually 等转折词,只避免它们被当成结论回灌。
生成中途打断(软切)¶
生成过程中每 32 个字符检查一次;发现打转、原地重复、伪工具调用、数字流等形态时,可立即切断本次请求,把已生成部分作为正常消息落盘、排好结论锚点,让回合从断点续跑。
软切依赖 DSH 内核的 agent/soft-cut 钩子:仅 0.1.5-rc.1 / rc.2 开箱可用;0.1.5-rc.3 起内核移除该钩子后能力会静默失效——以设置页显示为准,不要凭开关是开就认为在生效。新版内核可用随包工具移植软切机构(见下文「兼容性与软切内核」)。
两类机制都在单步边界内生效:软切只看当前一次生成流,进入下一步计数归零;治得了单流内冗余,治不了跨十几步的折返跑。
安装与启用¶
下面使用 README 中的官方安装命令(需替换 <你的profile>):
dsh plugin --profile <你的profile> add github:JiewiW/dsh-cot-anchor#v0.2.4
重启 DSH 实例后,设置页出现「COT 锚点」标签即表示插件已加载。结论注入无需任何配置;软切是否需要额外内核支持,以设置页提示为准。
peer 依赖(来自 package.json):@deepseek-ai/dsh 为 >=0.1.5-rc.1 <0.2.0 || >=0.2.0-rc.1 <0.3.0-0。
典型用法与设置要点¶
多数场景保持默认即可。设置页「COT 锚点」共 61 项、分组展示;下面只列常用项。
总开关¶
| 键 | 默认 | 说明 |
|---|---|---|
enableToolInject |
开 | 工具结果后注入结论锚点,主要价值所在 |
enableSoftCut |
开 | 允许生成中途打断;内核不支持时自动无效 |
enableExecDisciplineBlock |
开 | 命令执行纪律提醒;自 v0.2.1 起走运行时上下文快照固定段(每轮一次),不再按工具条数线性堆叠 |
软切判定(可逐项关闭)¶
全部关闭时插件只做结论注入。五项对应:enablePseudoTool(伪工具调用文本)、enableRepeat(逐字节重复)、enableChurn(措辞不同的「重新分析」)、enableTransition(转折句,易误判)、enableNumberRunaway(长数字流)。
打断太频繁时:先关 enableTransition,或调高如 churnMinHits(默认 18)等阈值。自 v0.2.4 起,转折句判定带 softCutGapThreshold(默认 80),用于减少「小结论 + 后续分析 + 转折宣告」被拦腰切断。
锚点内容¶
| 键 | 默认 | 说明 |
|---|---|---|
minReasoningChars |
250 | 思考短于此长度不提取 |
maxPoints |
3 | 最多几条结论 |
maxPointChars |
220 | 单条结论字数上限 |
可选 enableLlmRefine(默认关):每个助手回合多一次小模型调用提炼结论;provider/model 留空则跟随当前会话。CoT 采集相关项(enableHarvest 等)默认全关,开启会在本地留存思考文本,启用前请评估隐私。
成本与能力边界¶
默认仅结论注入时:每个工具结果后一条短消息,上界约 660 字符(3×220),无额外模型调用;注入块随上下文进入后续请求,在每一步都会占用少量窗口,但尾部追加不改写前缀,除首现一次外可参与缓存命中。README 在约 924 万 token 的长会话上给出注入占比约 0.23% 量级的实测口径说明,可在自有会话日志上按 source.summary 为 cot-anchor:* 的消息复算。
软切为纯本地字符串计算,零 token;可能增加少量回合数,且不减少回合步数。模型有时自知空转仍停不下来——注入前提是模型会读上下文并照做。
隐私方面:结论注入与软切判定均在本地完成;仅 LLM 提炼会把思考文本发往所配 provider(留空则跟随当前会话)。
兼容性与软切内核¶
| 能力 | 支持的 DSH 版本 |
|---|---|
| 结论注入、设置页 | 0.1.5 起 |
| 生成中途打断(软切) | 仅 0.1.5-rc.1 / rc.2 开箱可用 |
若设置页显示「当前内核没有掐断能力」,结论注入不受影响。需要软切可停留在上述 rc 版本,或使用随包移植工具:
node node_modules/dsh-cot-anchor/tools/apply-softcut-port.mjs --check # 查看状态
node node_modules/dsh-cot-anchor/tools/apply-softcut-port.mjs # 应用
移植后重启实例;完整步骤与风险见仓库内 docs/softcut-kernel-port.md。
适用场景与注意¶
适合:多工具往返、单流思考链冗长、反复「重新发现」同一结论的 DSH 智能体任务;希望在不改模型的情况下用上下文工程减轻重复推导。
不适合或需配合其他手段:跨步骤折返跑、步数与上下文膨胀治理——请结合 step-governor 等插件或工作流设计。
常见问题:模型好像没收到提醒时,确认 enableToolInject 已开且思考长度超过 minReasoningChars。
结尾¶
dsh-cot-anchor 把「已确立结论」固定在工具边界,并可选地在生成流内软切明显退化,面向的是单流 CoT 冗余而非全能长任务优化。DeepSeek Harness 生态以「一切皆插件」为理念;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。