Files
ycode/docs/上下文预算与压缩阈值-2026-10-18.md
T

54 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 总上下文预算与压缩阈值(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结论,未重启用户窗口、未修改其模型数据;完整重启后加载本轮代码。