排障

Claude Code 上下文超限怎么办:压缩策略与模型切换实战

排障2026-10-24·11 分钟阅读

Claude Code 在长项目里跑着跑着,常出现三种症状:终端提示上下文接近上限或直接拒绝请求、同一个问题回答越来越敷衍、改一个函数却把整个模块重写一遍。大多数人第一反应是换模型或加预算,但真正的瓶颈往往在 上下文被重复发送。下面按「先看预算、再谈压缩、最后切模型」的顺序讲清楚。

一、先搞清楚:一次请求到底在花什么

Claude Code 每一轮对话都不是只带你的新问题,它会把系统提示、工具定义、项目记忆文件、历史对话摘要、最近读过的文件内容一起打包发出去。所以第二轮开始,输入 Token 就是「上一轮全部内容 + 本轮新增」。这解释了为什么长会话的成本增长不是线性的。

可以先做一个粗略的预算拆解,判断钱花在哪:

  • 固定开销:系统提示、工具 schema、项目说明文件。这部分每轮都发,但基本恒定。
  • 累积开销:历史对话与被读入的文件片段。这是随会话长度增长的主体。
  • 本轮新输入:你的指令和工具返回结果,通常占比最小。

如果你在 CCSub 后台的用量明细里看到某模型的输入 Token 远高于输出 Token(例如输入是输出的三四倍),基本可以确定:大量成本耗在把同一批上下文反复发送上,而不是模型真的「想多了」。

怎么在 CCSub 上按模型核对输入 Token

  1. 登录 https://ccsub.xyz,进入用量/账单明细页面。
  2. 按模型维度筛选,重点看输入 Token、缓存读取 Token、输出 Token 三列的比例关系。
  3. 对比不同时间段的同一模型:如果输入 Token 随时间线性暴涨而输出基本持平,说明是会话没有及时收口。
  4. 留意缓存读取量是否明显低于输入总量——缓存没命中,等于每轮都在全价重发上下文。
核对时不要只看总金额,要看比例。总金额高可能只是任务重,但输入输出比严重失衡,才是上下文治理出问题的信号。

二、/compact 与手动摘要:什么时候用哪个

Claude Code 内置的 /compact 会把当前会话压缩成一份摘要,释放上下文空间。它快、省事,但有两个前提要清楚:压缩是由模型完成的,压缩动作本身要花一次请求;压缩结果是有损的,细节会被抹掉。

/compact 适合的场景

  • 当前任务还没做完,但你已经连续跑了很久的对话。
  • 上下文里堆了很多「探索过程」——试错的命令、读了一半的文件、失败的路径。
  • 你对接下来要做什么已经很清楚,只需要模型保留结论而不是过程。

手动摘要更适合的场景

  • 任务涉及多个模块,自动压缩容易丢掉关键的接口约定或命名规范。
  • 你需要跨会话继续,希望摘要内容可控、可以人工校对。
  • 压缩后还要长时间开发,值得多花一点时间写清「当前进度 + 已定决策 + 待办清单」。

手动摘要的实操模板,直接写进对话里让模型确认即可:

请把当前进度整理成以下结构,不要写代码:
1. 任务目标(一句话)
2. 已确认的技术决策(列表,含原因)
3. 已修改的文件与关键改动
4. 未完成项与下一步
5. 涉及的外部约定(接口路径、字段名、环境变量名)

拿到摘要后,开启新会话,把这段摘要作为第一条消息,再继续开发。这比在超长会话里硬撑要稳得多,也便宜得多。

三、把长会话拆成子任务,是最省钱的一步

压缩只是补救,拆分才是根治。Claude Code 的上下文压力通常来自「一个会话干了太多事」。可以按以下原则拆:

  • 按文件边界拆:读 `src/api/` 的会话就不要顺手让它改前端组件。
  • 按阶段拆:调研、设计、实现、测试各开一个会话,前一个会话只把结论带到下一个。
  • 按问题拆:遇到报错先单独开一个会话定位根因,定位完再回到主会话改代码。
  • 用文件传递上下文:把结论写进项目里的说明文件,而不是留在对话历史里。模型读文件是按需的,比每轮全量重发便宜。

拆分后你会发现,单个会话的上下文远达不到上限,模型输出质量也明显回升——因为干扰信息少了。

四、模型切换:谁扛大上下文,谁做短推理

CCSub 上可用的 Claude 系列模型可以通过 GET https://ccsub.xyz/v1/models 查询完整列表。落到长上下文场景,建议这样分工:

用 Claude Sonnet 4.6 承担大上下文任务

Sonnet 4.6 适合「上下文体量大、需要通读多份材料」的工作:接手一份别人写的长摘要、一次性理解多个文件的调用关系、在较长会话中保持风格一致。它的输入价格档位比 Opus 系列低,把大块上下文交给它,成本更可控。

用 Claude Opus 4.8 做短推理

Opus 4.8 更适合「上下文很短、但推理密度高」的环节:架构取舍、疑难报错的根因判断、复杂重构方案的最后定夺。这类任务输入小、输出短,即便单价更高,总花费也不夸张。

一个实用的组合是:Sonnet 4.6 负责读和写,Opus 4.8 负责判断。先用 Sonnet 把长材料压缩成结构化摘要,再把摘要交给 Opus 做决策,最后回到 Sonnet 执行改动。这样既避免了大上下文跑在高单价模型上,也避免让便宜模型做它不擅长的硬推理。

五、接入 CCSub 的三种方式

Claude Code 原生调用

设置 ANTHROPIC_BASE_URL=https://ccsub.xyz/api 和密钥(形如 sk-你的CCSub密钥),客户端会自动请求 /v1/messages 端点,无需手动拼路径。配置完成后启动 Claude Code 即可。

OpenAI 兼容调用

如果需要在自己写的脚本或其他兼容客户端里调用,使用 OPENAI_BASE_URL=https://ccsub.xyz/v1,请求 /v1/chat/completions。适合做批量摘要、上下文压缩这类辅助任务。

curl https://ccsub.xyz/v1/chat/completions \
  -H "Authorization: Bearer sk-你的CCSub密钥" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6",
    "messages": [{"role": "user", "content": "把以下会话记录压缩成结构化摘要..."}]
  }'

Codex 原生调用

Codex 使用 https://ccsub.xyz/openai 作为 base URL,协议选择 wire_api = responses,客户端会自动请求 /responses,不需要你手动指定端点。

无论哪种方式,先用 GET https://ccsub.xyz/v1/models 确认你要用的模型 ID 拼写正确,再开始跑长任务。

六、常见报错与排查

  • 请求被拒、提示上下文过长:先执行 /compact,或按上文模板手动摘要后开新会话。不要靠反复重试硬撞。
  • 连接失败:优先检查网络与代理设置,确认 base URL 拼写完整(Claude Code 用 https://ccsub.xyz/api,OpenAI 兼容用 https://ccsub.xyz/v1,Codex 用 https://ccsub.xyz/openai),三者不要混用。
  • 输出质量突然变差:大概率是上下文过载,先拆分会话,再考虑换模型。
  • 用量异常偏高:回到后台按模型核对输入 Token 与缓存读取量的比例,确认是否每轮都在全量重发。
  • 模型不存在或调用失败:用 /v1/models 核对模型 ID,注意版本后缀。

七、成本提醒与行动建议

上下文治理的收益是复利的:每减少一轮全量重发,就少付一次大额输入费。建议按这个顺序动手——

  1. 今天先做一次清理:把当前超长会话手动摘要收口,开新会话继续。
  2. 本周固化拆分习惯:按文件、按阶段开会话,结论写进项目文件。
  3. 接入 CCSub 并配好环境变量,用 https://ccsub.xyz 上的 /v1/models 确认可用模型。
  4. 下周看一次用量明细,对比输入输出比例是否改善。

充值前先估算:如果你的任务是长文档通读类,优先用 Sonnet 4.6 试跑一轮,观察实际 Token 消耗再决定充多少。CCSub 后台可以随时查看按模型的用量明细,先小额度验证,再按真实消耗补。

已经把环境配好、想进一步压低长项目成本?现在就去 CCSub 创建密钥,把 ANTHROPIC_BASE_URL 指到 https://ccsub.xyz/api,用一个新会话试试手动摘要流程,效果通常当场就能感觉到。

CCSub API 调用方法

如果你使用 OpenAI 兼容客户端,把 Base URL 设置为 https://ccsub.xyz/v1,API Key 使用控制台创建的 sk-你的CCSub密钥。

export OPENAI_BASE_URL=https://ccsub.xyz/v1
export OPENAI_API_KEY=sk-你的CCSub密钥

Codex 请使用原生 Responses 专用地址。先设置密钥:

export CCSUB_API_KEY=sk-你的CCSub密钥

再在 ~/.codex/config.toml 配置自定义 provider:

model = "gpt-5.6-sol"
model_provider = "ccsub"
[model_providers.ccsub]
name = "CCSub"
base_url = "https://ccsub.xyz/openai"
env_key = "CCSUB_API_KEY"
wire_api = "responses"

Claude Code 使用专用 Messages Base URL:

export ANTHROPIC_BASE_URL=https://ccsub.xyz/api
export ANTHROPIC_AUTH_TOKEN=sk-你的CCSub密钥

需要确认当前可用模型时,可以请求 GET https://ccsub.xyz/v1/models。正式长任务前,建议先用短请求验证 Key、余额和模型是否正常。

读完想动手试试?3 分钟接入 CCSub。