Buck Blog · 博客正文

返回技术分享首页
Claude Code 第三方大模型 1M 长上下文配置指南(GLM-5.2 / DeepSeek v4-pro)

Claude Code 第三方大模型 1M 长上下文配置指南(GLM-5.2 / DeepSeek v4-pro)

> 让 Claude Code(CLI,v2.1.217)通过 Anthropic 兼容端点接入的第三方大模型用上真实的 1M 上下文,而不是被默认回退到 200K、在 ~180K 就自动压缩。
>
> 本文基于对 claude.exe 源码的实证分析,非臆测。文末附「自动化 Agent 执行清单」,AI 读本文档即可自动完成本地配置。


一、目标与适用范围

把 GLM-5.2(智谱)、DeepSeek v4-pro(DeepSeek 官方)在 Claude Code 里的上下文窗口从默认 200K 抬到真实的 1M,使自动压缩阈值从 ~167K 提升到 ~967K。

方法通用:任何模型名不以 claude- 开头的第三方模型都适用,只需把 CLAUDE_CODE_MAX_CONTEXT_TOKENS 设成该模型的真实上限。


二、根因:Claude Code 怎么判断上下文窗口

Claude Code 内置一张「模型 → 上下文窗口」注册表,只收录原生 Claude 模型。对注册表里没有的模型 ID(glm-5.2deepseek-v4-pro 等),查表函数 vWc 最终回退到默认 200K


function vWc(e, t) {
  if (xb(e)) return 1e6;                                    // 已知 1M 模型
  if (t?.includes("context-1m-2025-08-07") && MV(e)) return 1e6;  // 1M beta,firstParty 门控
  if (tO(e)) return 1e6;
  let r = e7n(e); if (r !== null) return r;                 // 注册表查表
  let n = CLAUDE_CODE_MAX_CONTEXT_TOKENS;                    // ★ 环境变量
  if (n > 0 && !modelName.startsWith("claude-")) return n;   // ★ 非 claude 模型用它
  return 200000;                                             // 默认回退
}

后果链:窗口被当成 200K → effectiveWindow ≈ 180K → 压缩阈值 ≈ 167K、阻塞上限 ≈ 197K。对话到 ~167K 就被压缩,1M 的真实容量完全用不上。


三、唯一有效杠杆:CLAUDE_CODE_MAX_CONTEXT_TOKENS

vWc 可见:模型名不以 claude- 开头(第三方模型都满足)时,设置环境变量


CLAUDE_CODE_MAX_CONTEXT_TOKENS=1000000

vWc 就直接返回 1M 作为该模型的上下文窗口。于是全部自动跟着到 1M:
公式 ≈ 值
模型窗口 kv CLAUDE_CODE_MAX_CONTEXT_TOKENS 1,000,000
有效窗口 effectiveWindow kv − min(maxOutput, 20000) ~980,000
自动压缩阈值 effectiveWindow − 13000 ~967,000
阻塞上限(默认) kv − 预留 − 3000 ~977,000

对话堆到 ~967K 才压缩。它是环境变量,可以只在某个模型的启动脚本里设,不影响其它模型。


四、这些杠杆对代理模型无效(别再试)

杠杆 为什么无效
settings.jsonautoCompactWindow 源码 TKwindow = min(kv, autoCompactWindow)只能把窗口往下压,抬不过 kv=200K
模型名加 [1m] 后缀 1M beta 路径有 if(Cn()!=="firstParty")return null 门控,只对 Anthropic 官方 API 生效;走第三方代理被忽略。可保留但纯摆设
CLAUDE_CODE_BLOCKING_LIMIT_OVERRIDE 阻塞上限默认随 kv 走,抬高了 kv 就不用单独设

五、配置步骤

为每个模型建一个包装脚本,把 CLAUDE_CODE_MAX_CONTEXT_TOKENS=1000000 连同该模型的 base_url / token / model 一起 exec envclaude

5.1 GLM-5.2(智谱)

~/bin/claude-glm

#!/bin/bash
# Claude Code — GLM-5.2(智谱 Anthropic 兼容端点),1M 上下文
exec env \
  ANTHROPIC_BASE_URL=https://open.bigmodel.cn/api/anthropic \
  ANTHROPIC_AUTH_TOKEN=<your_zhipu_token> \
  ANTHROPIC_MODEL=glm-5.2 \
  CLAUDE_CODE_SUBAGENT_MODEL=glm-5.2 \
  CLAUDE_CODE_MAX_CONTEXT_TOKENS=1000000 \
  ENABLE_TOOL_SEARCH=false \
  claude "$@"

5.2 DeepSeek v4-pro

~/bin/claude-ds

#!/bin/bash
# Claude Code — DeepSeek v4-pro(官方 Anthropic 兼容端点),1M 上下文
exec env \
  ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic \
  ANTHROPIC_AUTH_TOKEN=<your_deepseek_token> \
  ANTHROPIC_MODEL=deepseek-v4-pro \
  CLAUDE_CODE_SUBAGENT_MODEL=deepseek-v4-pro \
  CLAUDE_CODE_MAX_CONTEXT_TOKENS=1000000 \
  ENABLE_TOOL_SEARCH=false \
  claude "$@"


chmod +x ~/bin/claude-glm ~/bin/claude-ds
# 确认 ~/bin 在 PATH 里:echo $PATH | grep -o "$HOME/bin"

> 要点:
> - CLAUDE_CODE_MAX_CONTEXT_TOKENS 是核心,其余是常规接入参数。
> - CLAUDE_CODE_SUBAGENT_MODEL 让子 agent 也用同一模型(否则子 agent 可能回退到默认)。
> - [1m] 后缀可加可不加(对代理无效)。
> - ANTHROPIC_AUTH_TOKEN 是敏感信息,切勿提交到公开仓库或写进本文档的发布版本。


六、验证

  • 新开会话(让 env 生效,不要 resume 旧会话):claude-glmclaude-ds
  • 会话内输入 /context,窗口上限应显示 1M(不再是 200K)
  • echo $CLAUDE_CODE_MAX_CONTEXT_TOKENS 应为 1000000
  • 让对话自然增长,到 ~967K 才触发自动压缩

七、排错速查

现象 原因 处理
/context 仍显示 200K env 没生效 确认是新开会话;echo $CLAUDE_CODE_MAX_CONTEXT_TOKENS 应为 1000000
长对话到某点批量报错 模型真实上限 < 设置值 CLAUDE_CODE_MAX_CONTEXT_TOKENS 下调到模型官方真实上限
状态栏百分比与 /context 不符 状态栏脚本用了 Claude Code 预计算值(对代理模型按 200K 算) 状态栏脚本里对第三方模型硬编码 1M 分母、自己重算百分比
子 agent 仍按 200K 行为 没设 CLAUDE_CODE_SUBAGENT_MODEL 在包装脚本里补上

八、自动化 Agent 执行清单

若由 AI agent 读本文档自动配置本地环境,按以下步骤执行:

  • 确认目标模型及其真实上下文上限(必须 ≤ 模型官方上限,否则长会话在供应侧报错)。已知:GLM-5.2 = 1M、DeepSeek v4-pro = 1M。
  • 为每个模型创建/编辑 ~/bin/claude-<name> 包装脚本,须包含:ANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKENANTHROPIC_MODELCLAUDE_CODE_SUBAGENT_MODELCLAUDE_CODE_MAX_CONTEXT_TOKENS=<真实上限>,末尾 exec env ... claude "$@"
  • chmod +x 脚本,确认 ~/binPATH
  • 不要~/.claude/settings.jsonautoCompactWindow(对代理模型无效,只能下压)。
  • 新开会话,/context 验证窗口 = 真实上限。
  • 敏感信息处理ANTHROPIC_AUTH_TOKEN 等不得写入任何会被提交或公开发布的文件;发布文档中一律用占位符 <your_..._token>

九、源码依据(Claude Code v2.1.217)

  • 模型窗口查表 vWc:非 claude- 模型走 CLAUDE_CODE_MAX_CONTEXT_TOKENS
  • kv(e,t) = EWc()(仅 DISABLE_COMPACT 时)否则 vWc(e,t)
  • TK(e,t)window = min(kv, autoCompactWindow) —— autoCompactWindow 只能下压
  • $_e = TK.window − min(maxOutputTokens, 20000)
  • 自动压缩阈值 jzr = bso($_e) = $_e − 13000
  • 阻塞上限默认 Ijg − 3000 = (kv − 预留) − 3000,在 Awu 中先于压缩判断
  • 1M beta 门控:if(Cn()!=="firstParty")return null