54 lines
4.5 KiB
Markdown
54 lines
4.5 KiB
Markdown
# 总上下文预算与压缩阈值(2026-10-18)
|
||
|
||
## 最新语义
|
||
|
||
用户订正:模型表单的“上下文”表示输入与输出共用的总窗口;“输出”配置最大输出,输入预算和压缩阈值动态计算。上一轮把500K作为输入、另加128K得出628K的实现已撤销。
|
||
|
||
- `C`:总上下文,500K快捷项为500,000。
|
||
- `O`:最大输出,128K快捷项为128,000。
|
||
- `I = min(C - O, 模型目录原始输入上限)`:输入预算;没有单独目录上限时取`C - O`。系统提示词、工具、历史、附件和本轮消息共用该预算。
|
||
- 总上下文与输出各自校验目录上限,输出必须小于总上下文;总窗口不会被加上输出后扩大。
|
||
|
||
界面为“上下文 / 输出”,下方实时显示可用输入和自动压缩阈值。空值采用自动默认,目录默认输入也扣除输出预留。
|
||
|
||
## 原规则与本次调整
|
||
|
||
本机OMP CLI为18.6.3。只读查询原默认配置:固定/百分比阈值均为`-1`,`reserveTokens`未设置,自动压缩与回合内检查开启,`keepRecentTokens=20000`。
|
||
|
||
同版本[压缩源码](https://github.com/can1357/oh-my-pi/blob/v18.6.3/packages/agent/src/compaction/compaction.ts)确认:默认预留为`max(floor(C × 15%), 16384)`,阈值为`C - 预留`,已用上下文严格大于阈值时触发。默认绝对预留对小窗口不可用时,恢复为至少1 token的15%比例预留。
|
||
|
||
原规则没有自动预留用户配置的完整输出预算。500K总窗口原默认阈值为425K,而128K输出只允许372K输入。本次计算:
|
||
|
||
```text
|
||
P = max(1, floor(C × 15%))
|
||
D = max(P, 16384)
|
||
如果 D >= C - P,则 D = P // 小窗口恢复
|
||
R = max(D, O, C - I)
|
||
T = C - R
|
||
```
|
||
|
||
`R`是内核预留,`T`是压缩阈值。常规窗口可写为`T = min(I, C - max(floor(C × 15%), 16384))`。
|
||
|
||
| 总上下文 | 输出 | 可用输入 | 压缩阈值 |
|
||
| --- | --- | --- | --- |
|
||
| 500,000 | 128,000 | 372,000 | 372,000 |
|
||
| 500,000 | 64,000 | 436,000 | 425,000 |
|
||
| 1,050,000 | 128,000 | 922,000 | 892,500 |
|
||
| 8,192 | 1,234 | 6,958 | 6,958 |
|
||
|
||
第三行按GPT-6.1 Sol目录上限。`keepRecentTokens`是压缩时保留近期消息的预算,不从阈值中重复扣除。默认异步压缩可提前预计算,提前量为`clamp(T × 0.125, 8192, 32000)`;500K/128K约从340K开始后台准备,正式阈值仍是372K,见[同版本文档](https://github.com/can1357/oh-my-pi/blob/v18.6.3/docs/compaction.md)。
|
||
|
||
## 实施与验证
|
||
|
||
- `src/shared/model-token-limits.ts`统一预算;`src/shared/models.ts`增加`tokenBudgetVersion: 2`,标识总窗口权威、输入派生。
|
||
- `src/main/models.ts`保存/运行时共用计算。旧配置原第一项迁移为总窗口,丢弃隐藏相加值;列表读取不改文件或密钥,保存后带版本,重载不重复扣除输出。
|
||
- `src/shared/model-metadata.ts`从默认总窗口扣除默认输出,保留原始上限与完整价格档。
|
||
- `src/main/omp-model.ts`写入模型总窗口/输出及独立`agent/config.yml`,配置预留、固定阈值和百分比回退;`src/main/omp.ts`通过`--config`传入。预算参与指纹,进行中的回合保持原快照。
|
||
- `src/renderer/src/components/ModelSettingsPanel.tsx`接两字段、实时预算说明、500K/128K选项及整数校验。
|
||
|
||
完整构建与类型检查通过(`.tmp/context-total-build.log`);元数据/预算13项、目录边界和小窗口通过(`.tmp/context-total-metadata.log`);注册/旧628K记录迁移/冷加载/无效写入保护通过(`.tmp/context-total-registry.log`)。OMP取消/错误、持久化、用量回归通过(`.tmp/context-total-omp.log`、`.tmp/context-total-persistence.log`、`.tmp/context-total-usage.log`)。原生多协议14项通过(`.tmp/context-total-protocols.log`)。
|
||
|
||
真实模型能力22项通过(`.tmp/model-capabilities-M077wK/report.json`)。真实隔离生产应用104项通过、0 renderer错误(`.tmp/custom-model-settings-oHMHAB/report.json`):安装OMP配置读取返回372,000阈值,profile总窗口500,000,实际请求输出128,000,用量分母500,000。实时切换输出、表单重开和越界保护均通过;已查看`custom-editor-500k-128k-light.png`。
|
||
|
||
验收使用短提示与本地受控上游,没有向收费服务发送500K正文,尚未完成真实长上下文跨阈值压缩产物验收。备用HTTP路径没有OMP完整自动压缩,本次只统一其预算与请求上限。未采集WorkBuddy或新增1:1结论,未重启用户窗口、未修改其模型数据;完整重启后加载本轮代码。
|