今日主题
- 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 文件扩展名;
只有媒体类型、空行处理等具体规范约定需要按实现分别核对。