Claude Code 空 text block 卡住怎么办

2.1.251 修复只产出思考、没有正文时卡在 text content blocks must be non-empty。请先升级;写坏的旧会话往往要新建。

Claude Code 空 text block 卡住怎么办

claude code text content blocks must be non-empty:高 effort、开着 thinking 时,模型有可能某一回合只返回思考、不返回可见正文。旧客户端把空的 text block 再送给 API,接口拒绝,会话就停在这句英文上,后面怎么回都出不去。2.1.251 修了这条:只产出 thinking 的回合不再把对话卡死。

作者CodePass 技术编辑

什么条件下会踩

Changelog 写的触发条件很窄:a turn where the model produced only thinking。Opus 5 开 thinking、effort 很高、或提示几乎不要求开口(例如「先想清楚再改」)时更容易。普通短问答很少单独撞上。

同版本另修:Opus 5 在 thinking 关闭、effort 却是 xhigh/max 时,请求会报 effort 不被支持。客户端现在把这种 effort 降成 high 再发。那是另一句错,不要和 non-empty 当成同一个补丁。

先升级,还是先新建会话

claude --version 到 2.1.251+。已经卡死的旧会话,升级后 --resume 不一定自动好:坏 transcript 里可能已经写下空 block。新开一轮、或从卡死回合之前 /compact 再继续,比在同一条坏记录上重试省事。

VS Code 侧 2.1.248 修过「No conversation found」时直接开新对话。那是会话从未保存,和这条 API 校验错误无关。

升级后仍看到这句

确认报错时间戳是否还在旧进程里。长期挂着的后台会话不会因为你升了 npm 包就重载逻辑,stop 再开。

网关或代理若改写了 assistant 消息、丢掉 text 只留 thinking,新客户端也救不了被改过的 payload。这时查 ANTHROPIC_BASE_URL 一侧,而不是再升一次 CLI。

误伤:自己用 SDK 往会话里塞了空 text block。2.1.251 修的是「模型只产出 thinking」这条产品路径,不保证任意空 block 都合法。

和上下文撑爆分开

hook 或后台代理打印上兆错误、把对话撑到 Prompt is too long,是 2.1.247 修过的另一类卡死。文案不同:一个是 non-empty,一个是太长。别用清上下文去治空 block,也别用这条补丁去治撑爆。

参考资料