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 更接近真相。