报错是这么冒出来的。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 就该立刻拉,别把下载留到第二天。这类问题最好一次改到位,反复小改反而容易把原因搅混。
