事情本身不复杂,线索都在日志里。上传 PDF 后立刻创建线程引用这个 file_id,接口返回 400 原文 file is not ready,等五秒再试就正常,批量导入时三分之一的任务第一步就失败。
第一反应是「并发上传把索引队列压满,处理时间变长」,验证下来不成立。
这类报错背后常见的原因有几处,逐个排除就行。文件需要解析和索引,上传 200 只代表落地。也可能是没有轮询文件状态就直接引用。
另外,状态判断用了错误字段,永远拿到上传中。
先查这个文件当前状态
curl -s https://api.openai.com/v1/files/file_abc123 -H "Authorization: Bearer $KEY" | jq -r '.status'
轮询到 processed 再继续
python wait_file.py --id file_abc123 --interval 2 --timeout 120
批量导入时加指数退避而不是固定等待
python import_batch.py --retry 5 --backoff 1.5 --jitter 0.3
末了统计一次成功率确认
python stats.py --log import.log --event file_ready_timeout
怎么算真的好了,看的是同一批现象。批量导入里所有文件都在 processed 之后才被引用,400 file is not ready 降到零,总耗时只多了几十秒。
这里还有个坑。上传接口的 200 只保证文件收到了,不保证能读,凡是引用 file_id 之前都要先过状态检查。这类问题最好一次改到位,反复小改反而容易把原因搅混。
