ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

上下文工程实战:别怪 AI 干久了就忘事,先防霉变、再打包、拿交接说话

上下文工程实战:别怪 AI 干久了就忘事,先防霉变、再打包、拿交接说话 摘要:AI 干久了就忘事?本篇四组会话策略对照(干到底/压缩/交接/裸换)给出的答案:忘事不是因为会话长,而是重要信息只留在了聊天里。实测五个活干完只占上下文窗口三成,忘事没发生;手动压缩才是失忆按钮——细节丢失、错误被固化;交接笔记能把决定与坑写进仓库、跨班零丢失。一句话:只留在聊天里的迟早会丢,写进仓库的才保得住——约定进说明书,事实进代码注释,决定和坑进交接笔记,文末附开工到收班的落地清单。本文要点(TL;DR)总论点:AI 干久了忘事,不是会话太长,而是重要信息只留在了聊天里,没有写进仓库。聊天窗口里的东西,压缩一次、换个会话就没了;写进仓库的——说明书、代码注释、交接笔记——永远都在。四组对照的全部数据指向同一件事:把该留的信息写下来,会话多长都不可怕;证据一,长度无罪:五个小任务塞在同一条会话里干完,只占 200k 上下文窗口的三成——零压缩、5/5 全绿,收班面试连第一个活的门槛写法toCents(100)都能与代码逐字对账。窗口没满之前,「干久了忘事」不会发生;证据二,压缩才是失忆按钮:每活压一次,任务梗概和约定还在(全天 149.5 万 token、四组最省),但具体实现细节全丢——面试原话「压缩后只保留了交付结论,没有保留函数体的具体写法;我不猜」;它还把自己的错误口径固化成「仓库正宗写法」。丢了证据的错误结论,比没记更毒;证据三,交接是搬运工:交接笔记把「仓库看不见的信息」搬进仓库——分口径决定写明「下一班调用传分不是元」(正是压缩组栽跟头的那个决定),一个待裁决事项带着完整回滚方案跨三班传递零丢失;代价是每班约 10.9 万 token 的笔记开销;行动结论:按信息类型定存放地——约定进说明书,事实进代码,决定和坑进交接笔记;/compact 只在窗口真满时用(开工到收班的操作清单见第七节)。反直觉的是,不做任何衔接的裸换会话(全天 176.7 万 token)反而最省:记忆存在仓库里是免费的,存在窗口和笔记里都要交费。附注:判定器的金额扫描曾把行尾注释误判成手写换算,本篇顺手修复(v1.2,自测 6/6)——工具自己也要跑红灯。上一篇收在进场那一刻:仓库写好 AGENTS.md,AI 每次进场第一眼读到约定,五条隐性约定雷 5/5 全绿。但签发完任务我立刻碰到了下一个问题——进场只是开场,干活是个过程。真实的开发日不是「一个任务一条会话」,是你上午派了两个活、中午改了半个、下午又加三个,全塞在同一个会话里。于是那个流传最广的警告来了:别在一个会话里干太久,AI 干久了就忘事。忘事的标准剧本:会话开头立好的约定,干到第五个活就当废纸;前面踩过的坑,后面原样再踩一遍。大家开出的药方也高度一致——勤按 /compact,窗口满了就压缩,轻装上阵。这两个说法我都信过。但信不如测:同一仓库、同样五个活、同一份说明书——就是实战十九那页经三轮修订定稿的 AGENTS.md 仓库说明(v3 版),四种会话策略各跑一个「工作日」,30 次 headless 调用逐件判分。结果把这两个共识都掀了——五个活根本喂不饱 200k 窗口,「干久了忘事」压根没发生;真正丢记忆的操作,恰恰是你亲手按下去的那个 /compact。一句话预告结论:AI 忘事,不是记性差,是重要信息只留在了聊天里——压缩一次、换个会话,没写下来的就没了。一、实验设计:把「任务」升级成「工作日」先把要回答的问题摆在明面上。AI 干活需要的信息有三类:约定(金额用分、文件放哪)、事实(代码里有什么)、过程(拍板过的决定、踩过的坑);它们可以存在三个地方:会话窗口、仓库文件、交接笔记。本文四组实验回答的只有一个问题:哪类信息放在哪里,AI 才不忘事、返工最少。实战十九的范式是单任务 fresh clone:每个任务一条干净会话,会话之间天然隔离。本篇要考的恰恰是同一个会话连续干活,所以实验单位从「任务」升级为「工作日」:同一个工作副本里连续派 t1→t5 五个活——满减函数、钻石等级、等级边界修复、过期积分过滤、到期时间格式化,每个活交付后由 AI 看不见的隐藏验收和 judge 脚本逐件判分,违规精确归属到「哪一个活」。四组唯一的变量是会话策略:组策略会话结构额外动作a 一路干到底不干预1 条会话--resume串 5 活无b 每活后压缩手动 /compact同 at1–t4 交付后各压一次c 每活后交接换会话 + 交接笔记每活一条新会话上一班按技能写HANDOFF.mdd 裸换会话换会话不交接每活一条新会话无(基线)d 组是特意加的基线:没有它就回答不了「交接本身值不值」——c 减 d 是交接笔记的净价值,a 减 d 是同一条会话延续干活的额外价值。四组同款开局:fresh clone 基线仓 + 注入同一份说明书——实战十九的 v3 版 AGENTS.md(五节模板经「漏域清单→确认癖→决策授权」三轮修订后的定稿,约定已覆盖金额口径、文件位置等五条隐性约定雷),CLAUDE.md 一行@AGENTS.md桥接。选它的目的:把「进场读什么」这个变量钉死,本篇只考会话策略。每个活交付即 commit(给 judge 干净的 diff 基线,也让后续活在真实累积的仓库上继续)。载体不变:claude CLI 2.1.218 headless + glm-5.3-flash,四组共 30 次有效调用。两个变量必须正面交代。其一,自动压缩:claude CLI 会在窗口将满时自动压缩上下文,若它在实验中偷跑,a 组的「零压缩」就不成立。判据用会话文件里的压缩标记:四组全部会话合计只有 4 个标记,全部来自 b 组人侧手动 /compact,自动压缩一次都没有触发——各会话上下文峰值在 38k–60k,离 200k 的触发线很远。其二,一段如实交代:run-day.sh 第一版从 a/b 组继承了会话续接逻辑,导致
返回列表