前言¶
在 DSH 中手动配置第三方网关时,模型 ID(例如 grok-4.6)通常与内置的 pi-ai 目录(例如 x-ai/grok-4.6)不匹配。这会导致容量解析回退到默认值 defaultContextWindow(262144)。同时,压缩后端只接受比率格式,这使得直接设置绝对阈值变得困难。
dsh-context-budget 插件解决了这两个问题:它为每个 pi-ai 提供商卡片添加了上下文窗口、压缩阈值和保留预算的配置组,并在编辑器右下角增加了思考努力控制。
安装与启用¶
执行以下命令安装插件:
dsh plugin --profile web add dsh-context-budget
安装完成后,重启 dsh web,进入 Settings → Models 页面,展开任意 pi-ai 提供商卡片,即可看到新增的 “Context budget” 组。
核心功能¶
上下文窗口与压缩阈值¶
插件将原本难以直接设置的参数转化为直观的数值:
| 字段 | 写入位置 | 效果 |
|---|---|---|
| Context window | llm-pi-ai settings, providers.<route>.defaultContextWindow |
设置路由上未在目录中定义的模型的上下文窗口 |
| Compaction threshold | cordis.patch.yml, compaction-basic modelPolicies[].thresholdRatio |
后端计算 floor(contextWindow × ratio) 得到绝对阈值 |
| Retain budget | 同一行, modelPolicies[].retainTokens |
保持原文保留的 Token 数,留空则使用后端默认的 16% |
阈值以比率形式存储,因此如果后续修改了窗口大小,需要再次点击 Apply 以重新计算比率。
思考努力控制¶
插件在编辑器右下角(模型选择器旁边)添加了一个思考努力选择器。它会读取当前会话的模型,并尝试从目录中获取该模型已声明的级别;如果不存在,则根据模型 ID 识别供应商并使用其配置文件。
支持的供应商及级别如下:
| 供应商 | 匹配关键字 | 级别 |
|---|---|---|
| xAI | grok |
off, low, high, max |
| OpenAI | gpt / chatgpt / o1…o9 |
minimal, low, medium, high |
| Anthropic | claude |
low, medium, high |
| DeepSeek | deepseek |
off, high |
gemini / gemma |
minimal, low, medium, high |
|
| Qwen | qwen |
off, low, medium, high |
| Z.ai | glm / z-ai |
off, high |
| Moonshot | kimi / moonshot |
off, high |
| MiniMax | minimax |
off, low, medium, high |
选择后,插件会将级别写入 settings.yaml 中对应模型的 reasoningEfforts 字段。如果网关的接口字段拼写与标准不同,需手动编辑 settings.yaml 中的值。
配置细节与校验¶
写入机制¶
插件通过 cordis.patch.yml 进行修改,只操作标记的管理块。写入前会将原文件备份为 cordis.patch.yml.contextbudget.bak,并在磁盘上验证每一条 provider/model 规则,失败时立即回滚。
校验规则¶
在保存前,插件会对配置进行校验,拒绝写入的情况包括:
* 窗口和阈值必须为正整数;
* 阈值必须小于窗口;
* 派生的比率必须大于 0.16(后端默认保留比例)且小于 1;
* 保留预算必须小于阈值;
* 路由必须至少包含一个模型 ID。
为什么不替换压缩引擎¶
compaction-basic 引擎在每一步都通过 llm.resolveModelInfo() 重新解析上下文窗口,并计算 floor(contextWindow × thresholdRatio)。因此,只需提供两个数字(窗口和比率),引擎已经具备所有必要的功能,插件无需替换引擎。
限制与注意事项¶
- 适用范围:仅适用于 pi-ai 路由。
- 默认值回退:
defaultContextWindow是回退值,不会覆盖目录中已定义的模型条目或模型自身的上下文窗口。 - 最大 Token:
maxTokens字段不受此插件控制,固定为 32768。 - 成本:压缩会触发额外的总结请求,阈值越低,请求次数越多。
- 卸载限制:卸载插件不会撤销已写入的持久化配置(如
defaultContextWindow和cordis.patch.yml中的配置),需要手动删除。
卸载¶
dsh plugin --profile web remove dsh-context-budget
卸载后,持久化的配置依然保留。如需恢复默认状态,需手动删除 llm-pi-ai 设置中的 defaultContextWindow 字段,以及 cordis.patch.yml 中 # dsh-context-budget managed block 标记的区块。