2026/11/1 1:57:25

长会话突然卡住说「Prompt is too long」?先看清是谁把上下文撑爆了

长会话突然卡住说「Prompt is too long」?先看清是谁把上下文撑爆了 文章目录 介绍 ️ 演示环境 ️ 把窗口撑爆的到底是谁 一次请求里都装了什么 先把对话瘦下来/compact、/context 与 /clear 为什么自动压缩没及时顶上️ 大文件读取与外接服务是常被忽略的元凶 一个能长期省心的小习惯⚓️ 相关链接 ⚓️ 介绍 用 Claude Code 2.1 这类 AI 编程助手做长一点的事最扫兴的瞬间不是它答错了而是干到一半突然吐出一句Prompt is too long然后整段思路断了。不少人第一反应是「是不是该升级版本」但其实这行字本身没多少信息量——它只说了一件事这一轮要发给模型的请求已经装不下上下文窗口了。真正要紧的是往前追一步窗口是被谁填饱的是历史对话太长还是某个工具一次甩回来几万字的输出还是你把自己写的项目说明、配置文件全塞进了记忆文件把这几个源头认清楚大部分情况下不用重开会话就能接着干也能少走几次「一报错就升级版本」的弯路。️ 演示环境 ️ 系统macOS 15 运行时Claude Code 2.1.x 网络本地环境注意本文内容为个人学习笔记仅供参考。附读者须知 把窗口撑爆的到底是谁 一次请求里都装了什么先建立一个最容易被忽略的认知上下文窗口里装的远不止你看到的那些对话气泡。官方文档里把自动压缩的触发点说得很直接——当上下文窗口接近容量时系统会自动把较早的对话总结成摘要来腾地方。而每一次真正发给模型的请求除了对话历史还夹带了系统提示、工具定义每接一个外部服务它的所有工具描述都会算进去、记忆文件比如项目根目录下的CLAUDE.md以及这一轮你让它读取或附带的文本内容。也就是说哪怕你这轮只回了一句「继续」请求体积也可能被那些固定开销撑得很大。理解了这一点后面几个处理手段才有抓手要么减历史要么减固定开销要么减单次塞进来的大块内容。 先把对话瘦下来/compact、/context 与 /clear最直接的两条命令几乎所有人都知道但用对时机的不多。/compact是让助手把前面的对话压成一段摘要用摘要替换掉原始消息来释放空间而且它支持带一个聚焦点比如/compact keep the test output意思是「压缩时把测试输出这段重点留着」。它的代价是会损失一些早期对话的细节所以适合「还要接着干、但前面已经讨论清楚」的节点。/context则单纯是查看当前窗口里到底装了什么、各占多少动手前先看一眼往往能直接定位到那个异常大的块。/clear最彻底——在同一会话里用空上下文重新开始但代价是前面的上下文全没了只适合那一轮本来就打算重来的情况。建议打开一个会长跑的会话前先敲一次/context摸清固定开销的体量一旦发现总数逼近上限别等它报错提前/compact一次比报错后再救顺手得多。 为什么自动压缩没及时顶上很多人会疑惑不是有自动压缩吗怎么还会满官方文档给了一个关键细节云端会话会自己设一个压缩百分比覆盖值所以压缩是在窗口「中途」就触发的而不是等快填满才动。换句话说正常流程里你几乎感觉不到它。那它为什么失效常见就这几类情况一是压缩被关掉、或者触发阈值被改到了一个不合理的点导致本该中途压缩的时机被错过。官方提供的可调项是改变自动压缩窗口的环境变量云端则会用覆盖值抢占它——所以如果是在别人的环境或模板里跑先确认是不是这层配置动了手脚。二是上下文涨得太快某一轮工具返回值特别大比如一次读取了一整个大文件、或某条命令输出了海量日志自动压缩还没来得及在下一轮请求前把空间腾出来请求就已经超了。三是窗口已经从「接近满」直接冲到「溢出」这时候连压缩摘要本身都写不回窗口于是你既可能看到Prompt is too long也可能看到压缩失败的相关提示。有用户记录过这种「对话过长触发压缩却写不回去」的死结唯一的出路是先回退几轮、把体积降下来再手动/compact而不是硬等自动机制。️ 大文件读取与外接服务是常被忽略的元凶如果说历史对话是慢变量那下面这两个就是快变量。第一让助手去读大文件、尤其是几十上百 KB 的日志或构建产物这类内容会原样进上下文。更省事的做法是把大读取交给子任务去处理主会话只拿它汇总后的结论而不是把原始内容整段搬进来。第二每接一个外部服务它的工具定义都会成为固定开销的一部分。接得越多每一轮请求的「底噪」越高同样的历史长度下更容易顶到上限。不需要的时候把不用的连接摘掉比事后压缩管用。⚠️注意上面这些手段都是在「会话已经偏长」时救急用的。它们能让你把当前活干完但没法凭空变出更大的窗口真要做超大代码库的整体分析才需要考虑切换到更大的上下文容量平时别急着加宽——先把窗口弄干净比加宽更划算。 一个能长期省心的小习惯把这几件事并成一条习惯基本能绕开绝大多数Prompt is too long项目根目录的记忆文件里只放真正长期有用的约定别把大段文档、配置全文往上堆长任务跑到一半主动/compact出现Prompt is too long时先用/context看清是哪个块异常大再决定是压缩、清上下文还是把大读取挪到子任务里。每个人的工程规模不一样上面这些参数和阈值请按自己的实际情况调方案仅供参考照抄不一定有效。⚓️ 相关链接 ⚓️XiaoqiangClub在云端使用 Claude Code官方文档·上下文管理与错误处理Claude Code 更新日志官方·各版本修复说明