问题描述
Tier 2/3 触发时,nudge 文本硬编码建议单个压缩范围(dist/index.js 中 Compress range: content: [{ startId: "b{first}", endId: "b{last}", summary: "..." }]),把所有目标块塞进一次 compress 调用。
当 T1 块很多时(大项目/长会话),单次 summary 必然超过 maxSummaryLengthHard(默认 20000 字符),模型照做就会反复失败/卡死。
复现数据(真实会话)
- 会话
ses_04cd74960ffeqRBoCWAAkVbLwy.json:74 个活跃 T1 块,摘要共 97200 字符
- 一次全量压缩:97200 字符输入,按 TIER2_DISTILL_RULES(每块 50-150 token)估算输出约 32400 字符 @3x 压缩 → 超过 20000 硬上限,compress 必然报 "Summary too long"
分批方案验证(已测试)
| 批次大小 |
批数 |
每批输入字符 |
输出@3x |
状态 |
| 8 块 |
10 |
~10512 |
~3500 |
OK |
| 10 块 |
8 |
~12150 |
~4050 |
OK |
| 15 块 |
5 |
~19440 |
~6480 |
OK |
| 74 块(现状) |
1 |
97200 |
32400 |
超限失败 |
所有批次(8-15 块/批)均满足 minCompressRange(≥5000 字符)和 maxSummaryLengthHard(≤20000 字符)约束。
建议修复
- nudge 生成时按主题自动切片(相邻块 topic 相同合并),批次大小 8-15 块
- 输出多个 content 条目(schema 已支持数组):
content: [{startId, endId, topic, summary}, ...]
- 尾批不足 8 块时并入前一批(避免低于 minCompressRange 报 "Range too small")
- 可选:
content 数组条目数建议上限(避免一次调用几十条)
附:本地临时 patch(供参考)
我已在本机 dist/index.js 打了临时补丁实现上述分批逻辑(源码见 https://github.com/ranxianglei/opencode-acp 对应位置),但插件更新会被覆盖,希望官方在 nudge 生成逻辑中支持分批。
另外建议:Tier nudge 文本目前是硬编码的,不在 PROMPT_DEFINITIONS(customPrompts)可编辑范围内,建议把 tier trigger 提示词也纳入 customPrompts 机制,方便用户自定义。
问题描述
Tier 2/3 触发时,nudge 文本硬编码建议单个压缩范围(
dist/index.js中Compress range: content: [{ startId: "b{first}", endId: "b{last}", summary: "..." }]),把所有目标块塞进一次 compress 调用。当 T1 块很多时(大项目/长会话),单次 summary 必然超过
maxSummaryLengthHard(默认 20000 字符),模型照做就会反复失败/卡死。复现数据(真实会话)
ses_04cd74960ffeqRBoCWAAkVbLwy.json:74 个活跃 T1 块,摘要共 97200 字符分批方案验证(已测试)
所有批次(8-15 块/批)均满足
minCompressRange(≥5000 字符)和maxSummaryLengthHard(≤20000 字符)约束。建议修复
content: [{startId, endId, topic, summary}, ...]content数组条目数建议上限(避免一次调用几十条)附:本地临时 patch(供参考)
我已在本机 dist/index.js 打了临时补丁实现上述分批逻辑(源码见 https://github.com/ranxianglei/opencode-acp 对应位置),但插件更新会被覆盖,希望官方在 nudge 生成逻辑中支持分批。
另外建议:Tier nudge 文本目前是硬编码的,不在
PROMPT_DEFINITIONS(customPrompts)可编辑范围内,建议把 tier trigger 提示词也纳入 customPrompts 机制,方便用户自定义。