Claude Batch 跑完统计成功 9800 条,剩 200 条的 result.type 是 errored,error.type 写着 overloaded_error,整批重跑会重复计费,只想补失败的那部分。

一开始怀疑是「原始 custom_id 没留 无法定位输入」,查了一圈,方向不对。

排查方向其实有限,先把可能性排一排。批次内单条失败不影响整批状态。少数情况下是失败原因多是瞬时过载。

少数情况下是重跑时把成功结果也一起提交了。

从结果里筛出 errored 的 custom_id

python pick_errors.py --results results.jsonl --out ids.txt

接着按 id 从原始输入抽行生成补跑文件

python pick_by_id.py --src batch.jsonl --ids ids.txt --out retry.jsonl

只提交补跑文件

python submit_batches.py --file retry.jsonl --out retry_id.json

剩下的就是合并两批结果并按 custom_id 去重

python merge_results.py --a results.jsonl --b retry_results.jsonl --out final.jsonl

隔了一天再看,现象没变,说明不是偶发。

那几天正好在做别的变更,先把时间线对齐才敢动手。

别只看报错消失,验证要多做一步。补跑批次成功,合并后总条数等于原始 10000,custom_id 无重复,失败数为零。

失败行的 error 里通常带可重试标记,先按这个字段分组,不可重试的挑出来人工看。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189