Gemini CLI 修复中断回合导致的会话上下文污染与死循环
dylanyunlon · ghdev · 2026-09-18
gemini-cli 的一个 P2 修复 PR 揭示了一个典型的 agent 工程坑:当 agentic 循环被中断(SIGINT、超时或工具执行被中止)时,CLI 会向会话历史注入一条合成回合 [The previous response was interrupted before it completed.]。模型后续会把这个字符串当作期望的补全模式复述出来,导致会话上下文被“污染”,agent 循环卡死、工具无法执行,只能重置会话。
修复采用纵深防御:
- 新增 interruptionSanitizer.ts,检测危险占位符并替换为无害文本("Continuing.");
- 源头修复:closeUnansweredToolResponseTurn() 直接注入良性文本而非原始占位符;
- extractCuratedHistory() 在进入 API 前清洗历史,兜住旧会话残留;
- nextSpeakerChecker 检测到中断占位回合时短路返回 {nextspeaker: 'model'},省一次 LLM 调用;
- 压缩服务在摘要前也做清洗,scrub 流水线统一接入。
对做 agent 的人很有参考价值:往对话历史里注入的任何合成文本,都可能被模型学去复述。
「编程与Agent」频道最新
- 让 Agent 自己部署应用、再当真实用户测试,像高级模糊测试 — lucasmeijer · 2026-09-19
- 开发者经验:禁止 fallback,逼模型把核心功能做对 — Daniel_Farinax · 2026-09-19
- 银行仓库接 AI 问答三个月复盘:模型从来不是难点 — the_darkest_horse · 2026-09-19
- Codex 直接输出图表能力被低估,agent 编码体验再添一环 — Angaisb_ · 2026-09-19
- Notion 设计工程师 Geoffrey Litt 谈 AI 时代「理解成新瓶颈」 — EchoShao8899 · 2026-09-19
- Codex 内置 Images 2.5:先用图像模型重设计页面再实现 — OpenAIDevs · 2026-09-19