Claude code 升级后上下文长度变短问题

上下文窗口 100k → 1M:根因分析与修复记录

> 环境:Claude Code v2.1.260 · 模型:deepseek-v4-flash(经 `https://api.deepseek.com/anthropic\` 代理,对 Claude Code 为"未知模型")

一、现象

在 `settings.json` 的 `env` 中设置 `"CLAUDE_CODE_AUTO_COMPACT_WINDOW": "1M"` 后重启,`/context` 仍显示 `Auto-compact window: 100k tokens`;会话 165k 即超窗,频繁被自动压缩,无法利用大上下文。

二、根因(三层,层层掩盖)

| # | 原因 | 证据 |

|---|------|------|

| ① | **env 值格式错误**:`"1M"` 后缀不被 env 解析器接受。env 值走 `parseInt`,`parseInt("1M") = 1` → 出界 → 落回 100k 下限。"100k--1M" 只是 UI 标签写法,**不是合法 env 值**(官方示例全为纯整数 `"1000000"`/`"700000"`) | 同一版本仅把值改成 `"1000000"` 后,显示即从 100k → 200k |

| ② | **未知模型窗口约束 200k**:即便配置正确,Claude Code 对 unknown model 假定窗口 200k(v2.1.223+ 行为),阈值 = `min(configured, 模型窗口)`,故显示 200k | 历史上 `"1000000"` 曾正确显示 200k |

| ③ | **env 优先并锁死**:env 一旦设置,`/autocompact` 命令与设置对话框全部锁定,报 `CLAUDE_CODE_AUTO_COMPACT_WINDOW is set and takes precedence`------只能改 settings.json 后重启 | 命令实测输出 |

诊断的困难在于:三个原因都让窗口"上不去",且 ①③ 会让命令/对话框路径失效,唯一可靠的实验路径是 **env 值编辑 + 重启 + `/context` 读数**,按变量逐个隔离。

三、修复方法(最终配置)

`C:\Users\xxxxx\.claude\settings.json` → `env` 中**两个变量配对**:

```json

"CLAUDE_CODE_AUTO_COMPACT_WINDOW": "1000000", // ① 压缩阈值上限(必须纯整数,勿写 "1M")

"CLAUDE_CODE_MAX_CONTEXT_TOKENS": "1000000" // ② 覆盖"假定模型窗口"(官方 env,专为代理/第三方模型场景设计)

```

**为什么两个都要**:压缩阈值 = `min(声明阈值, 假定模型窗口)`。只设第一个会被 200k 压住;只设第二个没有意义。两个都对齐后:`min(1M, 1M) = 1M`。

**验证结果**:重启后 `/context` 显示 `Auto-compact window: 1m tokens`,会话 121.4k/1M(12%),自由空间 845k------较修复前(100k 窗口、有效工作区约 29k)放大约 30 倍。

四、注意事项(风险面)

  1. **声明 ≠ 实测**:`MAX_CONTEXT_TOKENS` 让 Claude Code 按 1M 排布且不再在 200k 自动压缩,但**不探测后端真实窗口**。若 deepseek 实际 < 1M,接近上限时会以 **API 400/413**(错误含 `context window` 字样)暴露,而非优雅压缩。

  2. 当前实测证据:会话到过 165.3k 无报错 → 真实窗口 ≥ ~165k;1M 未验证 → 靠日常使用自然分步验证。

  3. **回退方法**:出现上述报错时,删除 `CLAUDE_CODE_MAX_CONTEXT_TOKENS` 一行即恢复 200k 约束(另一行无害,会被 `min()` 自动压低)。

  4. 所有 env 改动**重启才生效**。

五、可复用结论

  • ⚠️ `CLAUDE_CODE_AUTO_COMPACT_WINDOW` 的 env 值**只接受纯整数**(100000--1000000),`"1M"`/`"500k"` 会静默解析失败落回下限------这是最容易踩的坑。

  • 代理/网关接入非 Anthropic 官方模型时,想放大上下文窗口,**必须同时设置** `CLAUDE_CODE_AUTO_COMPACT_WINDOW`(阈值)和 `CLAUDE_CODE_MAX_CONTEXT_TOKENS`(模型窗口声明),缺一不可。

  • env 设置优先于 `/autocompact` 命令与设置入口;被锁时排查方向是 settings.json,而不是命令。

六、排障方法论备注

  • **"锁死"类行为要先于"值错误"排除**:`/autocompact` 在 env 下直接拒绝------该拒绝消息本身是最干净的探针,一次性证明 env 已生效(排除"没读到"),把问题域收窄到"值怎么被解析"。

  • **显示层与解析层分离**:UI 写 `100k--1M`、命令解析器收 `500k` 后缀、env 解析器只收整数------同一功能的三种入口各有一套语法,最不可见的那条(env)静默失败。

相关推荐
zzz_23681 小时前
个人 AI 记忆如何跨工具复用:用 Markdown、索引和 Skill 搭一个可治理的记忆库
前端·人工智能·react.js·前端框架·agent·agent测评
wxwx_bscxy3222 小时前
基于Python新冠疫情可视化分析系统的设计与实现
java·数据库·spring boot·python·微信小程序·sqlite
剑之所向2 小时前
.NET 官方`System.Threading.Channels`
前端·javascript·数据库
evans在进步3 小时前
Tomcat NIO 工作原理详解:从 Acceptor、Poller 到容器处理链
java·tomcat·nio
词却3 小时前
数据库基础:DQL 数据查询语言
数据库·oracle
计算机魔术师3 小时前
GPT-6 Astra幻觉砍到2%,却被一种老招数轻松绕过
前端
cjy0001113 小时前
2026AI 产品如何从一次性 Demo 变成可重复使用的业务工具?
前端·人工智能·fde
IT_陈寒4 小时前
React的状态更新坑得我差点加班到天亮
前端·人工智能·后端
风骏时光牛马4 小时前
深挖底层逻辑:XX源码深度拆解分析
前端