前言¶
在 DeepSeek Harness (DSH) 的长上下文开发中,一个常见的问题是固定预留的输出额度(例如 384K)与不断增长的输入文本发生预算碰撞,导致服务端在输入尚未被压缩时便直接拒绝请求。dsh-adaptive-max-tokens 是一个插件,旨在将固定的输出预留变为动态额度,通过根据上下文估算动态调整 maxTokens,在压缩策略生效前释放出被占用的上下文空间。
插件定位¶
这是一个由 3289192-bot 维护的模型推理类插件。它运行在 DSH 的 Web profile 下,通过读取宿主内存中的请求元数据和会话事件来计算剩余空间,不主动联网、不写入文件、也不读取凭据。该插件仅调整输出额度,不改变模型的推理强度,也不增加模型的真实上下文容量。
核心功能¶
该插件主要解决以下具体问题:
- 动态调整 maxTokens:根据当前输入估算、上下文容量和安全余量计算允许的最大输出长度。
- 压缩后恢复额度:在压缩策略生效后,重新按配置和当前模型的输出上限计算,避免一直沿用之前缩小的数值。
- 中断续聊保持校准:利用已有的 usage 记录辅助估算,避免因单次无 usage 的回复丢失有效的校准点。
- 识别并重试超限错误:对代码中识别的上下文超限错误格式进行拦截,尝试缩小输出额度并重试一次;其他情况交回宿主处理。
- 路由兼容:在切换模型时,遵守当前路由和 agent 的显式上限约束。
安装与启用¶
在安装前,请确认当前 DSH 版本。该插件仅支持 0.1.6-alpha.1 或 0.1.7-rc.2。
1、检查版本:
dsh --version
2、安装插件:
dsh plugin --profile web add github:3289192-bot/dsh-adaptive-max-tokens#v0.1.0
安装后,默认对该 profile 的 agent 请求生效。
3、重启实例:
在任务空闲时重启对应的 DSH Web 实例,再开始新会话。如果之前手动安装过旧版,请先从自定义预设中移除或禁用旧的 adaptive-max-tokens.mjs 行,再启用本包。
卸载命令:
dsh plugin --profile web remove dsh-adaptive-max-tokens
默认参数与计算逻辑¶
插件内置了一套默认参数用于计算输出预算。以下是基于 1,000,000 上下文预算和 384,000 输出上限的典型配置:
| 参数 | 值 | 说明 |
|---|---|---|
effectiveContextWindow |
1,000,000 | 配置的上下文预算上限,取它与适配器声明值中的较小值 |
maxOutputTokens |
384,000 | 配置的输出上限,同时受当前适配器和 agent 上限约束 |
safetyTokens |
32,768 | 为估算误差保留的空间 |
minOutputTokens |
16,384 | 期望最低额度,空间不足时仍会继续收缩 |
pendingWeight |
1 | 待接收输入的最低估算权重 |
log |
true |
输出预算变化日志 |
计算逻辑简化为:输出额度 = max(1, min(输出上限, 上下文预算 − 安全余量 − 输入估算))。
适用场景与限制¶
适用场景:需要处理长上下文对话,且希望减少因固定输出预留导致的上下文溢出错误的场景。
重要限制:
1. 无法保证不溢出:插件基于估算计算,包含误差。附件、新工具及大段新输入可能超出估算,无法保证每次请求都不会超限。
2. 不增加容量:插件不增加模型真实上下文容量,也不修改官方压缩策略或摘要参数。
3. 重试范围:重试仅支持代码中识别的上下文超限错误格式,未知格式直接交回宿主。
4. 隐私安全:插件仅读取内存中的请求元数据和 usage 数据,不涉及凭据读取,但启用日志后会记录会话标识与错误信息。
总结¶
dsh-adaptive-max-tokens 是一个为解决长对话中输出预算冲突而设计的实用工具。它通过动态收缩和恢复机制,让输出额度让位于输入,配合官方压缩策略使用,能显著提高长上下文任务的稳定性。更多详情与兼容性说明可查阅 GitHub 仓库。