1. 长文档场景下 Claude Code 的上下文焦虑
如果你用 Claude Code 处理过整仓库重构、几十页 PDF 转出来的需求文档、或者一个上万行的老项目,大概率遇到过这种情况:对话到一半,工具突然提示上下文快满了,然后开始自动压缩历史,之前聊过的接口约定、字段命名、踩过的坑全被压成一段摘要,接着模型就开始胡编字段名。
这不是你的错觉。Claude Code 默认给活动模型设的上下文窗口是 200000 token,也就是 200k。而 DeepSeek V4 官方标称的上下文窗口是 1M,两者差了 5 倍。你花钱买的是 1M 的容量,工具却只让你用 200k,剩下的 800k 白白浪费。
这篇就解决这一件事:在 Claude Code 里把 DeepSeek V4 配成 1m 上下文,并且用 TaoToken 的统一 Key 把 API 通道固定下来,避免每个项目改一次配置。适合需要一次性喂进长代码库、长文档的开发者,也适合正在用 Claude Code 做 Agent 编排、不想被自动压缩打断思路的人。
先说结论:Claude Code 内部有一个上下文窗口解析函数,它会按优先级依次判断——环境变量覆盖、模型名后缀、beta header、服务端下发值,最后才落到硬编码的 200000。我们要做的就是让判断链走到「模型名带 [1m] 后缀」这一条,这是最干净、副作用最小的方式。
2. 用 TaoToken 统一 Key 打通 Claude Code 与 DeepSeek V4
在动手改配置之前,先把 Key 和通道这件事理清楚。Claude Code 走的是 Anthropic 风格的接口协议,它读的是ANTHROPIC_BASE_URL和ANTHROPIC_AUTH_TOKEN这两个环境变量。你要接 DeepSeek V4,就得有一个能同时兼容这套协议、又能转发到 DeepSeek 的通道。
TaoToken 在这里的角色就是统一入口:一个 Key 管多个模型,Claude Code 的配置里只填一次地址和令牌,后面换模型、加模型都只改模型名,不动通道。官网在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 入口是 https://taotoken.net/api ,注意 API 地址不带 UTM 参数,配置里填干净的就行。
具体要准备三样东西:
第一,一个 TaoToken 的 API Key。登录后进控制台,在 API Keys 页面新建一个,复制出来形如sk-开头的字符串。这个 Key 就是后面ANTHROPIC_AUTH_TOKEN的值。
第二,确认你要用的模型名。DeepSeek V4 在通道里的模型标识,建议直接在模型对话页面先发一条消息验证一下能不能通,确认模型可用再写进配置。模型对话入口:https://taotoken.net/api?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite
第三,Claude Code 的安装位置。全局安装的话,配置文件在用户目录下的.claude/settings.json;项目级配置则在项目根目录的.claude/settings.json。两者同时存在时,项目级优先。我建议长文档项目用项目级配置,这样不同仓库可以挂不同模型。
注意:
ANTHROPIC_BASE_URL填的是 API 根地址,不要带/v1之类的路径后缀,Claude Code 会自己拼。填错最常见的表现是 404 或者一直转圈。
如果你还没装 Claude Code,用 npm 全局装即可:
npm install -g @anthropic-ai/claude-code claude --version装完先别急着配,确认版本在 2.x 以上,老版本对模型名后缀的解析逻辑不一样。
3. 可复制的 settings.json 骨架与 1m 开启方式
核心配置就一个文件。下面这份骨架你可以直接抄,把sk-xxx换成你自己的 Key,把模型名换成你在 TaoToken 里验证过的 DeepSeek V4 标识。
{ "alwaysThinkingEnabled": false, "env": { "ANTHROPIC_AUTH_TOKEN": "sk-xxx", "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek-v4-pro[1m]", "ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek-v4-pro[1m]", "ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek-v4-pro[1m]", "ANTHROPIC_MODEL": "deepseek-v4-pro[1m]", "ANTHROPIC_REASONING_MODEL": "deepseek-v4-pro[1m]" }, "model": "deepseek-v4-pro[1m]" }关键点就在模型名末尾那个[1m]。Claude Code 的上下文解析逻辑里,有一个函数专门检测模型名是否以[1m]结尾(大小写不敏感),命中就直接返回 1000000。这个判断排在环境变量覆盖之后、beta header 之前,优先级很高,而且不需要你关掉自动压缩。
对比一下另一种方案:用CLAUDE_CODE_MAX_CONTEXT_TOKENS加DISABLE_COMPACT两个环境变量。这条路能生效,但代价是必须把DISABLE_COMPACT设成 1,也就是彻底禁用自动压缩和手动/compact。长对话一旦逼近上限,没有压缩兜底,很容易直接报错中断。所以能用[1m]后缀就别用环境变量方案。
如果你确实想用环境变量方案做兜底,配置长这样:
{ "env": { "ANTHROPIC_AUTH_TOKEN": "sk-xxx", "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_MODEL": "deepseek-v4-pro", "CLAUDE_CODE_MAX_CONTEXT_TOKENS": "1000000", "DISABLE_COMPACT": "1" }, "model": "deepseek-v4-pro" }两种方案二选一,不要混用。混用时环境变量优先级更高,会盖掉[1m]的判断,反而让你以为后缀没生效。
改完配置后,Claude Code 需要重启才会重新读取。直接退出当前会话,重新claude进入即可。
4. 验证 1m 上下文是否真的生效
配置写完不代表生效,必须验证。有三种由浅入深的方式,建议至少做前两种。
第一种,看启动信息。重新进入 Claude Code 后,输入/status或者查看会话头部信息,正常情况下会显示当前模型的上下文窗口。如果还是 200k,说明模型名后缀没被识别,回去检查[1m]是不是写在了所有模型变量上,尤其是ANTHROPIC_MODEL和model这两个字段。
第二种,用一条长输入压测。准备一个大约 30 万字符的文本文件,比如把几份长文档拼起来,然后让 Claude Code 读取并总结:
# 先生成一个约 30 万字符的测试文件 python -c "print('上下文测试段落。' * 30000)" > /tmp/long_context_test.txt wc -c /tmp/long_context_test.txt在 Claude Code 里执行:
读取 /tmp/long_context_test.txt,统计其中「上下文测试段落」出现了多少次,并告诉我文件总字符数。如果上下文只有 200k,这个文件大概率会被截断或触发压缩,模型数出来的次数会明显偏少。1m 生效时,它能完整读完并给出接近 30000 的计数。这一步是最直观的体感验证。
第三种,查请求头。如果你在 TaoToken 控制台能看到请求日志,发一条长消息后去日志里看这次请求携带的上下文相关字段。1m 生效时,请求会带上对应的 beta header,形如context-1m-2025-08-07。这个 header 是 Claude Code 在识别到 1m 模型后自动附加的,你不需要手动加。
提示:验证时不要用太短的输入,短输入无论 200k 还是 1m 都能装下,看不出区别。一定要用超过 200k token 的内容去压。
三种方式都通过,就可以放心把长代码库丢进去了。我一般会把整个src目录的摘要、接口定义文件、数据库 schema 一起喂进去,让它做跨文件重构建议,1m 下基本不会中途失忆。
5. 本篇常见错误排查
配置过程中最容易踩的坑集中在这几类,对照着查。
模型名后缀没生效,仍显示 200k。九成是[1m]只写在了model字段,没写进env里的那几个ANTHROPIC_DEFAULT_*变量。Claude Code 在不同任务下会切换 Haiku/Opus/Sonnet 三个档位,如果只有主模型带后缀,切到 Haiku 做轻量任务时又掉回 200k。把五个变量全加上后缀最稳。
报 401 或鉴权失败。检查ANTHROPIC_AUTH_TOKEN是不是完整的sk-开头字符串,有没有多余空格或换行。另外确认ANTHROPIC_BASE_URL填的是https://taotoken.net/api,不要手滑写成带路径的地址。Key 可以在 API Keys 页面重新生成一个再试:https://taotoken.net/api?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite
请求 404 或一直转圈。多半是 base url 多了或少了斜杠、带了/v1。Claude Code 自己会拼路径,你只给根地址。另外确认网络能正常访问该地址,公司内网有出口限制的话换网络环境再试。
长输入仍然被压缩。如果你用的是环境变量方案,确认DISABLE_COMPACT设成了"1"而不是1(JSON 里字符串和数字在某些版本解析不同,用字符串更保险)。如果用的是[1m]方案却还被压缩,检查是不是同时残留了CLAUDE_CODE_MAX_CONTEXT_TOKENS,把它删掉。
改了配置没反应。Claude Code 不会热加载settings.json,必须完全退出进程再进。用claude命令重开,别在旧会话里反复试。
模型名写错。deepseek-v4-pro只是示例,实际标识以你在 TaoToken 模型对话里验证通过的为准。名字写错会直接报模型不存在,而不是静默降级。
6. 把统一 Key 用在长期编码与 Agent 场景
单次长文档处理验证通过后,下一步通常是把这套配置固化到日常开发流里。如果你经常跑 Claude Code 做多轮 Agent 任务、跨仓库重构,建议把 Key 和通道统一到 TaoToken 的 Coding Plan 上,这样额度、模型切换、日志都在一个地方管,不用每个项目单独维护一份 Key。入口:https://taotoken.net/api?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite
配置层面还有两个可以顺手做的优化。一是把项目级.claude/settings.json提交到仓库的.gitignore之外单独管理,Key 用环境变量注入而不是硬编码,避免泄露。二是给不同任务准备不同的模型名:日常补全用不带后缀的快速模型,长文档分析再切到[1m]版本,按需付费更划算。
最后留一个我自己的习惯:每次升级 Claude Code 版本后,重新跑一遍第 4 节的长输入压测。因为上下文解析逻辑在版本间偶有调整,升级后花两分钟验证一次,比在关键重构时才发现掉回 200k 要省心得多。