Repository navigation
Replies: 4 comments
|
这个分析把“历史累积、超大工具输出、调试轮次放大”分开是对的;不过按当前仓库 rc.2 commit
因此建议先把 70M→100M 拆成逐 call 序列,至少记录 turn/step、provider/model、uncached/cache-read/cache-write/output、pressure/projected/contextWindow、工具结果的 UTF-8 bytes 与 text/mixed 类型、是否出现 需要特别注意:累计 usage 在 compaction 后不会下降;compaction 只降低后续请求的 occupancy。若 post-compaction 单次 input 明显下降但累计仍增长,这是正常现象,不足以证明压缩失败。 对于 1 MB 含 base64 的 HTML,也要确认 1 MB 是否真的进入 model-visible history:用户消息/附件、 我把逐调用取证表、两层保护的触发时机/绕过项和安全降本路径整理成了可复用 runbook: |
|
感谢指正,两点校正都成立。我在本机 rc.2 安装的
按你给的 runbook 把引发此帖的那个会话做了逐调用取证(单 turn、51 步、52 次调用),主要数据:
据此修订建议清单:
第 2、3 条是这次复盘里性价比最高的两个方向:同样的内核配置,只补上"看得见"和"该压就压",这笔账单可以少掉三成左右。 |
|
吐槽下,同样的调研任务,交给deepseek耗了我¥50,codex只花了¥4 |
|
补一组工具表/固定开销的字节级拆分,可能对"能裁多少"那部分有用。 环境:dsh 0.1.5-rc.1,web profile,本机 bundle 列表: 每轮固定开销 63,527 B,其中工具表 46,424 B(占 73%)。工具表按来源拆:
另外每轮还带一份 从未被调用过的 48 个工具占 31,715 B = 68.3%;全裁可省 23,440 B(固定开销的 36.9%), 一个需要一起说明的对照:Codex 只有 15 个工具,但工具表 47,050 B,比 dsh 还大 (这部分属于用户装配,我已归到附录,不作为 dsh 缺陷;但如果要改"默认带什么",上面这张拆分表 影响的能力
|
Uh oh!
There was an error while loading. Please reload this page.
token 消耗过大的根因分析及改进建议
背景
收到两类反馈:
以下分析基于对当前版本预设配置和源码的核查。
根因
1. 自动压缩只在压力超阈值时触发,属于事后处理
dsh-compaction-basic已装配在 standard/code/cordis 预设中(minimal 除外),通过compactIfNeeded在ctx.tokenMeter压力超阈值时触发。但会话增长的多数成本发生在阈值以下:Claude Code 在接近上下文预算前预留缓冲自动压缩;Codex 提供可配置的
context_compaction_threshold并建议在里程碑手动/compact。当前版本两者均未提供。2. spill 机制未装配,超大工具输出无保护
dsh-spill-policy的实现是完整的(maxInlineBytes超限后全文存盘、返回有界首尾预览和取回指引),但maxInlineBytes省略时策略完全禁用,且 standard/code/cordis 预设均未装配该插件。即开箱状态下,超大工具输出会直接进入上下文。3. 压缩依赖 LLM 摘要,自身有成本
每次压缩调用
llm/stream生成摘要,消耗 token 和时间。社区已有无模型压缩实现(dsh-compaction-instant,基于 VCC,毫秒级完成且不调用模型),说明该成本可以消除,但需要第三方替换。4. 连续重复工具调用只有提醒,没有限制
dsh-repeat-tool-reminder在连续重复调用达到阈值时注入提醒,但不阻止。失败轮次的调用放大(业界实测约 4 倍)没有硬性上限。5. 模型侧没有上下文压力可见性
dsh-token-meter提供contextPressure投影(pressureTokens / projectedTokens / contextWindow),但仅浏览器读取,模型看不到。社区插件 dsh-session-handoff 需要自行添加 60%/70% 软硬压力横幅,说明内置缺失。改进建议
dsh-spill-policy并设置默认maxInlineBytes(如 64KB)。contextPressure注入模型可见的提示词横幅(软/硬两级阈值),接近阈值时提示手动压缩。context_compaction_threshold),并按模型容量设定默认值。总结
当前上下文管理的问题在于:spill 默认关闭,压缩仅在压力超阈值后触发且自身消耗模型调用,模型侧无压力可见性。三项主要成本(历史累积、超大工具输出、调试轮次放大)均发生在任何机制介入之前。建议优先处理默认配置(开启 spill)和可见性(压力感知),再考虑压缩实现本身的优化。
All reactions