报错是这么冒出来的。Message Batches 提交后第二天才去取结果,results_url 返回 404,原文 result not found or expired,批次状态显示 ended,控制台里只剩统计数字,原始结果已经下不到了。

中间走过弯路,把「批次结束后没有及时下载」当成主因,改完现象没变。

排查方向其实有限,先把可能性排一排。结果文件有保留期 过期即删。也可能是results_url 带签名 有时效。

还有一种情况,换了 API key 后无权访问原结果。

先查批次状态和结果地址

curl https://api.anthropic.com/v1/messages/batches/$BATCH_ID -H "x-api-key: $KEY" -H 'anthropic-version: 2023-06-01' | jq '.processing_status,.results_url'

随后在保留期内用脚本自动下载

python fetch_batch.py --batch $BATCH_ID --out results.jsonl

然后把结果落到对象存储避免再次过期

python upload_oss.py --file results.jsonl --bucket ai-batch

后续批次在结束时自动拉取

python -c "print('poll and download on ended')"

白天有业务在跑,能验证的部分都压到了晚上做。

怎么算真的好了,看的是同一批现象。结果文件成功下载到本地,行数与请求一致,对象存储里有一份长期备份。

批处理结果是临时资源,看到 ended 就该立刻拉,别把下载留到第二天。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189