这个坑值得记一笔。用 anthropic 0.52 提交 Message Batches,把三天的客服对话一次塞进去共 12000 条,接口回 400,原文是 requests: ensure this value is less than or equal to 10000,拆成两批后就正常。

刚开始盯着「重试时把已提交的部分又加了一遍」,折腾了半个多小时,排掉了。

原因不止一个,得分开看。单个批次最多 10000 条请求;请求体总大小也有上限;批次 ID 复用了导致重复提交。

数一遍待提交条数

python -c "print(sum(1 for _ in open('batch.jsonl',encoding='utf-8')))"

然后按 9000 条切文件留出余量

python split_jsonl.py --in batch.jsonl --size 9000 --prefix part

再往下逐批提交并记录 batch_id

python submit_batches.py --dir parts --out batch_ids.json

末了按 batch_id 分别轮询状态

python poll_batches.py --ids batch_ids.json

排查用的命令都是临时敲的,没有写成脚本,事后才整理。

手上没有现成的复现脚本,就照着线上请求手工拼了一个。

怎么算真的好了,看的是同一批现象。两个批次都进入 processing,最终成功条数相加等于 12000,没有请求被拒。

容易忽略的是,批次数量上限和文件体积上限是两条线,条数合规不代表体积合规,切分时两个都要看。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189