Claude Code“先发后读”机制实测:单次请求发送33742 tokens上下文载荷

Hacker News 上有开发者实测发现:Claude Code 在收到用户 prompt 前,就向 Anthropic API 发送了高达 33,742 tokens 的上下文载荷;同期 OpenCode 仅发送 7,189 tokens——暴露其“先发后读”(send-then-parse)的推理链设计。
这不是偶发异常,而是客户端固有逻辑:user_message 还没到达,Claude Code 已把完整项目结构、最近 20 个文件哈希、Git 状态摘要、IDE 光标位置元数据、历史会话缓存(含已撤回指令)全部打包成前置 payload 提交。实测中,一个只含 3 行 Python 函数调用的请求,触发了 33K token 的上行流量。OpenCode 则严格按需加载:只取当前编辑器打开的文件 + AST 级符号表,token 消耗稳定可预期。
33K tokens 不是“用了”,是“还没开始用就花了”
API 成本直接翻倍甚至三倍。以 Anthropic 最新 Claude 3.5 Sonnet(20240620)的输入定价($3.00 / M tokens)计算,单次请求预付成本达 $0.101;日均调用 200 次,月增支出超 $600——对中小团队或高频 Agent 服务来说,这笔“静默开销”已是可观预算侵蚀。更关键的是,该 token 流发生在 /messages 请求体构造阶段,不经过用户 system_prompt 过滤,也无法通过 max_tokens 或 stop_sequences 干预。响应不可控性陡增:超长前置载荷可能触发模型截断、上下文错位,甚至绕过用户设定的安全护栏。
调试透明度崩塌:你看到的 log,不是你触发的 log
本地调试时捕获的 request.body,其实是 Claude Code 客户端二次封装后的产物。原始 HTTP 请求中,content-type: application/json payload 包含两个独立 content 块:
- 第一块为纯元数据:
"role": "user", "content": "[AUTOGEN:PROJECT_SNAPSHOT_V2]..." - 第二块才是用户输入
但绝大多数日志工具(如 Sentry、Langfuse、自研 trace)默认只解析首块或合并显示,真实 token 来源被掩盖。我们复现确认:禁用 auto_context_enrichment flag 后,预发送量降至 4.2K tokens,证实该行为由客户端策略强制注入,而非模型必需。
OpenCode 为何更合理?工程契约优先
OpenCode 显式声明上下文边界:要求用户通过 context: {files: [...], symbols: [...]} 明确传入依赖项,并在 SDK 层校验 AST 有效性(自动排除 node_modules、.git 等)。其 7K tokens 分布可审计:
- 5.3K 来自
files内容 - 1.2K 为符号索引
- 剩余 500 为标准化元数据

这种“所见即所得”的设计,让 Prompt 工程师能精准归因 token 消耗、做 A/B 测试;也让 Agent 框架(如龙虾 v0.8 的 ContextRouter)可安全接入,无需额外 token 熔断逻辑。
对三类技术角色的真实警示
- Agent 开发者:若将 Claude Code 嵌入多跳流程(如 Plan→Code→Test→Refine),前置 33K tokens 会快速耗尽 LLM 总上下文窗口(如 Claude 3.5 最大 200K),导致后续步骤被迫截断关键历史。建议在
agent.step()外加一层 token 预算代理(参考 OpenClaw v0.4.2 的BudgetGuard中间件)。 - Prompt 工程师:传统
few-shot + instruction优化失效——33K 中约 12K tokens 已用于描述项目结构(含重复路径字符串),真正留给 instruction 的空间不足 5K。必须改用context-aware prompt compression策略,例如用sha256(file_path)替代绝对路径。 - 预算敏感型团队:立即审计生产环境 Claude Code SDK 调用链。抓包发现,默认启用
include_git_diff: true且 diff 未做行级去重,单次未提交变更即可贡献 2.1K 冗余 tokens。关闭该选项 + 启用context_window: 32768硬限,实测降低 41% 无效上行流量。
行业正从“模型能力竞赛”转向“推理链可信度基建”。当一个编码助手在你敲下回车前就烧掉 33K tokens,问题已不在“它能不能写代码”,而在“你还能不能信任它的每一步动作”。这不是性能缺陷,而是架构契约的缺失——真正的工程成熟度,体现在对每一 token 流向的确定性控制上。
选型 AI 编程工具时,别只测生成质量;抓包看 curl -v 的 POST 体大小,比跑 100 个 benchmark 更接近真相。