上下文爆炸:我在 LLM 上踩过的六个坑
2025-03-22
每一条设计约束的背后,都有一个让人抓头的线上事故。
坑 1:大 PR 分析导致上下文溢出
故障:分析 60+ 文件、3000+ 行 diff。AI 分析到第 30 个文件时开始"遗忘"前面的结果。
解决方案:三阶段合并策略
- Phase A 拆分:diff 按文件切分,每个文件独立存到磁盘
- Phase B 并行分析:每组文件启动一个子 Agent,输出 detail + summary
- Phase C 合并:LLM 只读摘要做推理,bash 脚本拼接全文
核心洞察:把 LLM 推理和机械拼接分开。
坑 2:子 Agent 之间的 UTF-8 截断
故障:多子 Agent 并行分析,结果合并时偶发 UnicodeDecodeError。
根因:用 tail -c 8192 截取字节,恰好把中文字符(3字节)截断在中间。
教训:永远不要用字节操作处理 UTF-8 文本。子 Agent 结果必须写磁盘。
坑 3:"什么都用 Agent"反模式
故障:准备阶段用子 Agent 读取 PR 信息,耗时 3 分钟,消耗 50K token。
规则:单次工具调用能完成的操作,必须直接调用工具,禁止启动 Agent。
坑 4:大文件追加写入失败
故障:生成 85 个测试用例,用"查找-替换"追加。在第 60 个用例时报错——文件太大,查找超时。
解决方案:分片写入 + 拼接
_parts/01_login_module.md _parts/02_payment_module.md ... bash cat _parts/*.md > final_test_cases.md
坑 5:MCP 工具的红色错误风暴
故障:分析已合并的 PR,尝试获取源分支但分支已删除。MCP 返回 404 红色错误,用户以为系统崩了。
解决方案:探测性操作用静默命令(gh CLI + stderr 重定向),不用 MCP。
坑 6:深度调查的无限循环
故障:10 个可疑发现,每个多轮取证。跑到第 5 个时上下文窗口撑满,AI 开始重复分析,最终无限循环。
解决方案:Per-Finding 隔离模式
- 每个发现有独立上下文和状态文件
- 发现完成后立即写回主文档(增量交付)
- 置信度收敛检测:连续两轮变化 < 5% 则提前终止
总结:六条硬约束
| # | 约束 | 解决的问题 |
|---|---|---|
| 1 | LLM 只读摘要做推理,脚本拼接全文 | 大 PR 上下文溢出 |
| 2 | 子 Agent 结果必须写磁盘,不走内存通道 | UTF-8 截断 |
| 3 | 单次工具调用禁止启动 Agent | 不必要的 Agent 开销 |
| 4 | 大文件禁止用编辑工具追加,用分片+cat | 查找匹配超时 |
| 5 | 探测性操作用静默命令,不用 MCP | 红色错误惊扰用户 |
| 6 | 长调查任务必须按子项隔离上下文 | 无限循环 + 上下文爆炸 |
这是"当 AI 接管测试流水线"系列的第二篇。下一篇将深入 AI 缺陷调查的演化故事。