← 返回博客
AI测试

上下文爆炸:我在 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 缺陷调查的演化故事。