跳转到内容

[proxy::response_processor] [Claude] 流错误 - Claude Code

Quick fix

当 cc-switch 代理 Claude Code 发生流解码错误或超时时,会导致日志遗漏或 token 统计为 0。可通过修改源码中的模型提取回退逻辑来修复模型名显示异常。

报错原文
[2026-02-24][08:25:52][ERROR][cc_switch_lib::proxy::response_processor] [Claude] 流错误: error decoding response body

当 cc-switch 代理 Claude Code 时,如果上游响应出现 error decoding response body 解码错误或触发 120 秒静默期超时,response_processor 将无法获取完整的流式事件。这会导致 proxy_request_logs 中出现系统性的请求遗漏(约 7-25%),或者记录的 token 和费用全部为 0。

此外,由于流被截断,claude_model_extractor 无法从 message_delta 中提取实际使用的映射模型(如 glm-5.1),从而错误地回退到原始请求模型名(如 claude-opus-4-8)。

  1. 打开 cc-switch 源码中的 src-tauri/src/proxy/handler_config.rs 文件。

  2. 修改 claude_model_extractor 函数,在回退到 request_model 之前,增加从 message_start 事件中提取实际模型名的逻辑。

    // src-tauri/src/proxy/handler_config.rs
    fn claude_model_extractor(events: &[Value], request_model: &str) -> String {
    if let Some(usage) = TokenUsage::from_claude_stream_events(events) {
    if let Some(model) = usage.model {
    return model;
    }
    }
    events
    .iter()
    .find_map(|e| {
    if e.get("type")?.as_str()? == "message_start" {
    e.get("message")?.get("model")?.as_str()
    } else {
    None
    }
    })
    .unwrap_or(request_model)
    .to_string()
    }
ToolClaude Code
Version未知
PlatformsmacOSLinux
为什么数据库里有些请求的 token 和费用都是 0?
当流式响应触发 120 秒静默期超时或解码错误时,cc-switch 无法获取包含 usage 的完整 SSE 事件,导致 token 和费用记录为 0。
日志遗漏会影响我的实际扣费吗?
不会影响。请求已成功到达供应商并被计费,只是 cc-switch 本地数据库未能正确记录用量。

这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。