记录一下那天晚上的排查过程。上周跑的 Batch 结果没及时下载,第三天调 results 接口返回 404,原文 output file has expired,任务详情里还能看到 completed,但拿不到内容。
刚开始盯着「下载脚本失败后重试间隔太长,跨过了保留期」,折腾了半个多小时,排掉了。
原因不止一个,得分开看。结果文件有保留期,过期后不可恢复。还有一种是只存了 batch_id,没存 output_file_id。
少数情况下是把结果直接写进临时目录,容器回收后丢失。
第一件事是查任务元数据里还剩哪些文件 id
curl -s https://api.openai.com/v1/batches/$BATCH_ID -H "Authorization: Bearer $OPENAI_API_KEY" | jq '{output_file_id,error_file_id}'
随后把结果下载到持久目录并校验行数
curl -s https://api.openai.com/v1/files/$OUTPUT_FILE_ID/content -H "Authorization: Bearer $OPENAI_API_KEY" -o result.jsonl
接着统计行数后写入归档清单
wc -l result.jsonl
等前面都确认过,再在任务完成后立刻触发下载回调
python -c "print('on batch.completed -> download + archive + checksum')"
别只看报错消失,验证要多做一步。结果文件落到归档目录,行数与输入一致,任务表里记录了输出文件 id 和校验和。
容易忽略的是,Batch 的结果不是永久存储,完成后脚本要主动拉取,别等第二天人工去看。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
