2026-09-02

今日主题

  • Claude Code 模型与输出协议

新增认知

Claude Code 模型与输出协议

  • 分层判断日志:日志里出现的模型名不能直接当作上游实际收到的 API 参数。
    应沿“用户配置 → 别名解析 → 客户端诊断 → 请求规范化 → 传输”逐层核对;本例的告警发生在规范化前,
    因此显示的 deepseek-v4-flash[1m] 只代表内部状态,不能证明网关收到了该字符串。

  • 修饰符留在客户端:[1m] 是 Claude Code 的上下文修饰符,别名解析时会保留它,以驱动上下文窗口和相关 beta 语义;
    构造 API 请求时 normalizeModelStringForAPI 会移除 [1m]/[2m]。该结论以当前实现确实经过规范化函数为前提,
    不能仅凭错误文本反推。

  • 告警不等于失败:当前 Claude Code 会把未识别模型信号写入遥测,并在非交互前台模式输出到 stderr;该路径本身不抛异常、不终止请求,
    也不改变退出码。它是否由某个特定版本首次引入,需要版本对比证据,不能只凭当前二进制断言。

  • NDJSON 通道隔离:NDJSON 即 Newline Delimited JSON,每一行都是独立 JSON,适合流式逐条解析。
    机器协议应只占用 stdout,日志放 stderr;只要调用方分开读取二者,告警不会破坏解析,
    但 2>&1、合并 stdio 或写到 stdout 的 shell 提示都会污染协议。

  • NDJSON 即 JSONL:
    NDJSON(Newline Delimited JSON)与 JSON Lines/JSONL 在核心数据模型上基本同义,
    都是每行一个独立 JSON、没有外层数组。NDJSON 更强调换行分隔的传输格式,JSONL 更常用作名称和 .jsonl 文件扩展名;
    只有媒体类型、空行处理等具体规范约定需要按实现分别核对。