教程

上下文溢出排障实操:先止血,再恢复

针对 prompt too long / compact 失败,给出 30 分钟可执行处理流程。

先判断是不是这个问题

出现下面任一症状,就按本手册处理:

  • prompt too long
  • failed to compact context
  • 同一任务在长会话里突然开始答非所问

参考文档:

第 0 步:先采样,不要盲改(3 分钟)

每次报错先记这 5 个字段:

  1. sessionId
  2. channel
  3. 最近消息轮数
  4. 是否触发过 compaction/pruning
  5. 失败发生阶段(生成前/生成中/工具后)

第 1 步:30 分钟止血流程

1. 降历史窗口

先把历史窗口收窄到可控范围(示例:最近 8-12 轮)。
目标是先恢复可用,不是一次做最优解。

2. 强制任务分片

把单次大请求拆成 3 段:

  1. 收集信息
  2. 生成草稿
  3. 校验与修正

每段单独发起,避免“一条请求塞完整流程”。

3. 开启或收紧 pruning

没有 pruning 就先启用;有 pruning 但失败,就先降低历史进入量再调策略。

第 2 步:用这个模板拆任务(可直接复制)

你现在只做第 1 段:提取关键输入,不要生成最终答案。
输出格式:
1) 关键事实(最多 8 条)
2) 缺失信息(最多 5 条)
3) 下一段需要的输入
你现在只做第 2 段:基于上一步关键事实生成草稿,不要扩展新主题。
输出格式:
1) 草稿正文
2) 待核对项
你现在只做第 3 段:检查草稿中的错误与冲突,给出修正后版本。
输出格式:
1) 发现的问题
2) 修正后的最终版本

第 3 步:回归测试(10 次)

同一类型请求连续跑 10 次,记录:

  • 报错次数
  • 平均响应时间
  • 是否出现上下文污染

通过标准:

  • 10 次中 0 次 overflow 报错
  • 结果结构稳定
  • 失败可复现并可定位

失败对照表

  1. 总是第 1 轮就超长
    动作:检查输入模板是否一次带入太多背景

  2. 长会话后才超长
    动作:优先收紧历史窗口 + pruning

  3. compaction 常失败
    动作:先减输入量,再调 compaction,不要反过来

近期案例(建议持续跟踪)

下一步

把这套排障并入监控: