AI 编程上下文太长怎么办?为什么说“让大模型做总结”是好心办坏事
发布时间:2026-09-23
通俗科普:当 AI 帮我们写代码调试 Bug 时,为什么大模型越总结越糊涂?深入解析 fast-jev-compaction 如何用极其克制的“保留是非题”,既彻底瘦身上下文,又 100% 锁死关键报错细节。

第 1 步
破案现场的烦恼:AI 记性太好,也是一种负担
想象一下,AI 就像一个在代码工程里破案的侦探。它每搜一次代码、跑一次测试、看一眼文件,都会在桌上留下一叠厚厚的记录。等排查到第 10 步时,桌面已经被数万字的终端输出彻底堆满了(这就是所谓的“上下文窗口爆炸”)。这时候如果什么都不管,AI 动作会越来越慢、Token 费用暴涨,甚至会直接把最初提的关键需求给挤出脑海。
第 2 步
好心办坏事:为什么让大模型做“总结”反而把案子办砸了?
以往最直觉的解决办法,是让大模型自己去写个摘要把旧历史压缩一下。但代码调试不是写会议纪要!原本终端里清清楚楚写着:orderExport.test.ts:42:19 报错、超时 5000ms、缺少 Authorization 鉴权头。结果大模型好心好意提炼成一句:“之前订单导出的测试失败了”。大意虽然没跑偏,但最致命的文件路径、行号和鉴权约束全被扔了!AI 侦探下一步根本没办法据此精准修代码。

第 3 步
换个思路:不做长篇大论的总结,只做“留不留”的快断
既然大模型总结会把精确事实改写成“差不多”,那聪明的做法就是:一个字都不要改写!真正占用 90% 篇幅的,往往只是中途那些又臭又长但已经过时的工具输出。开源工具 fast-jev-compaction 的思路非常巧妙——它请来 Jev 专门当“案卷管理员”,不写任何摘要小作文,只回答两道纯粹的是非题:这个工具动作还要不要记着?这条详细报错还要不要留全文?
const calls = collectToolCalls(messages, config.preserveRecentMessages); const candidates = calls.filter(call => !call.pinned); // 首尾消息严密锁定,只对中间的历史工具调用对进行精准裁剪第 4 步
两条不可逾越的铁律:首尾硬锁定,工具成对绑
在动手清理之前,有两样东西神圣不可侵犯:第一,用户最初提的需求(案发原始目标)绝不能碰;第二,最近这几轮的即时对话(正在进行的思考)绝不能动。此外,每一次发起工具搜索和它吐出来的日志必须“成对打包”,绝不能删了提问留着答案,搞得模型一头雾水。
第 5 步
成对问 Jev:两道是非题,三套处置法
案卷管理员 Jev 会对每一组中间工具记录快速打分:如果这组记录对后续任务至关重要,就【全文原样保留】;如果只要记住“曾经跑过测试”就行、不需要看里面几千行日志,就把输出替换为一行精简的【[输出已截断: 2400字符]】;如果这轮尝试完全无用,就【整组彻底移除】。代码拿到这些概率,瞬间完成清理。
{ "model": "jev-latest", "state": "User Goal: 修复订单导出的鉴权超时 Bug。\nTool: npm test\nResult: FAIL orderExport.test.ts:42:19\nTimeout of 5000ms exceeded.\nExpected authorization header to be preserved.", "questions": { "keep_call": { "type": "noul", "instructions": "AI 助手后续还需要知道曾执行过 npm test 吗?" }, "keep_result": { "type": "noul", "instructions": "AI 助手是否需要一字不差地保留具体的报错堆栈和超时代码行?" } } }第 6 步
极度舒适的工程结果:又快、又省、又不失真
比起让通用大模型读十万字上下文、苦思冥想几秒钟写出可能断章取义的小作文,Jev 依靠轻量判断,几十毫秒就能并发审查完所有历史工具记录,花费微乎其微。最关键的是,留下来的每一行文件路径和错误日志都是 100% 原始事实,AI 编程助手再也不会“失忆”或者“胡思乱想”了。
关联项目
- fast-jev-compaction — Claude Code plugin and npm library that asks Jev which tool calls to keep, instead of summarizing the transcript.
- jev-sentinel — Pi, Claude Code, and Codex CLI guard that asks Jev whether a tool call is on-task, risky, or injected before it runs.
- @typesafe-ai/sdk — Official TypeScript/JavaScript client for POST https://api.typesafe.ai/v1/systemone.