dsh-recap
DSH recap plugin: distills every model request (turn:step) of a session into one sentence, appended incrementally with a cache-friendly prompt (history sentences first, new delta last). Side-effect-free for the agent loop.
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Howardzhangdqs/dsh-recap说明文档
阅读完整 README ↗配置
挂载行配置(cordis.yml,部署级)
| 键 | 默认 | 说明 |
|---|---|---|
trigger | step-end | 触发时机:step-end(每个请求结束时触发,句子随请求生成)/ turn-end(turn 结束后经防抖合并成批)/ manual(仅手动) |
debounceMs | 1500 | 触发后的防抖窗口 |
textBlockLimit | 4096 | Δ 内单条消息文本的截断上限(字节,UTF-8 安全) |
toolResultLimit | 2048 | 工具结果的截断上限 |
toolArgsLimit | 1024 | 工具调用参数的截断上限 |
historyMaxSentences | 400 | 提示词携带的最大历史句数(超出时折叠最旧的句子) |
storeMaxEntries | 500 | 每个会话的落盘条数上限(超出时压缩存储文件) |
maxPending | 200 | 待总结 Δ 的数量上限(超出时合并最旧的条目,即背压保护) |
requestTimeoutMs | 60000 | 单次总结调用的超时时间 |
retryBackoffMs | 30000 | 限流退避基数:生成请求遇到 RATE_LIMIT(如 zai 的 429/1305「访问量过大」)时,该条 Δ 会原样重新排到队首等待重试——不记录失败条目,回顾链不会留下永久缺口。等待时长按指数增长(连续限流时每次翻倍,上限为基数的 32 倍);等待期间,对应位置的行内状态标识(chip)会显示「限流等待中,Ns 后重试…」 |
maxTokens | 120 | 单句输出的 token 上限 |
toolsEnabled | false | 是否注册模型工具(默认关闭:工具 schema 会随会话请求发送) |
storeDir | ~/.dsh/recap/sessions | 存储目录覆盖 |
⚠️ 截断与提示词结构相关的参数是缓存前缀的组成部分——回顾链生成途中修改这些参数会使前缀缓存失效(一次性代价)。
用户设置(设置页 recap 分区,实时生效)
| 键 | 默认 | 说明 |
|---|---|---|
enabled | true | 总开关(关闭时暂停生成,Δ 继续积累) |
interval | 1 | 总结粒度:每 N 个请求的新增数据合并总结为一句(1 表示每个请求一句)。调大后句子标识为 [T](对应所覆盖的请求区间);调小后,下一个请求立即恢复细粒度总结 |
provider + model | 未设置 | 总结专用路由(两者必须成对设置);未设置时先跟随会话路由,再退到宿主默认模型 |
effort | off | off(关闭思考)→ low(低思考)→ follow(跟随适配器默认)三级阶梯:路由拒绝当前档位时自动降档,并按路由记住生效档位;模型没有 effort 词表时最终省略该字段 |
「关闭思考」(off)真正生效的条件
effort: off 是否显式发送「禁用思考」,由路由的适配器与模型声明决定,不在本插件:
- DeepSeek 官方路由:适配器内置映射,
off→thinking: {type: "disabled"},开箱即用。 - pi-ai 路由(zai 等):模型的 effort 档位来自 settings 文档(
llm-pi-ai.providers..models[].reasoningEfforts),且未声明的档位一律视为不支持:-
条目完全没有
reasoningEfforts、又不在 pi-ai 内置目录中的模型,会被视为非思考模型——请求中不写入thinking字段(是否思考取决于服务端默认行为); -
要显式关闭思考,需在模型条目中声明
off档;YAML 空值写法(off:留空)表示「支持关闭:发送时省略参数」,zai 格式会序列化为thinking: {type: "disabled"}。注意:只声明off一个档位会被校验拒绝,必须同时声明至少一个思考档位:reasoningEfforts: off: # 空值 = 支持关闭:发送时省略参数(zai 格式 → thinking: {type: disabled}) low: low high: high -
路由不支持
off时(档位表未声明),本插件的降档阶梯会静默退到low或省略该字段——此时「关闭」并未真正生效,但不会报错;排查时请先检查该模型的reasoningEfforts声明。
-
挂载行配置(cordis.yml,部署级)
| 键 | 默认 | 说明 |
|---|---|---|
trigger | step-end | 触发时机:step-end(每个请求结束时触发,句子随请求生成)/ turn-end(turn 结束后经防抖合并成批)/ manual(仅手动) |
debounceMs | 1500 | 触发后的防抖窗口 |
textBlockLimit | 4096 | Δ 内单条消息文本的截断上限(字节,UTF-8 安全) |
toolResultLimit | 2048 | 工具结果的截断上限 |
toolArgsLimit | 1024 | 工具调用参数的截断上限 |
historyMaxSentences | 400 | 提示词携带的最大历史句数(超出时折叠最旧的句子) |
storeMaxEntries | 500 | 每个会话的落盘条数上限(超出时压缩存储文件) |
maxPending | 200 | 待总结 Δ 的数量上限(超出时合并最旧的条目,即背压保护) |
requestTimeoutMs | 60000 | 单次总结调用的超时时间 |
retryBackoffMs | 30000 | 限流退避基数:生成请求遇到 RATE_LIMIT(如 zai 的 429/1305「访问量过大」)时,该条 Δ 会原样重新排到队首等待重试——不记录失败条目,回顾链不会留下永久缺口。等待时长按指数增长(连续限流时每次翻倍,上限为基数的 32 倍);等待期间,对应位置的行内状态标识(chip)会显示「限流等待中,Ns 后重试…」 |
maxTokens | 120 | 单句输出的 token 上限 |
toolsEnabled | false | 是否注册模型工具(默认关闭:工具 schema 会随会话请求发送) |
storeDir | ~/.dsh/recap/sessions | 存储目录覆盖 |
⚠️ 截断与提示词结构相关的参数是缓存前缀的组成部分——回顾链生成途中修改这些参数会使前缀缓存失效(一次性代价)。