先把当时的情况摆出来。清理云上存储时把旧训练文件逐个删除,删到一半返回 409,原文 File is currently in use by a batch job,可那个 batch 上周就已经 completed。
把日志和配置对完,能解释这个现象的基本就这几处。批次任务会在一段时间内保留对输入文件的引用,期间禁止删除。少数情况下是微调任务同样引用训练文件,冲突时返回的仍是 409。
另外,删除是软删除,不同列表过滤条件看到的结果不一样。少数情况下是并发删除同一个文件时,后到的请求拿到冲突状态。
动手时先看这个文件当前的状态
curl -s https://api.openai.com/v1/files/file-abc -H "Authorization: Bearer $OPENAI_API_KEY" | jq '.status,.purpose'
然后列出还在引用它的批次
curl -s "https://api.openai.com/v1/batches?limit=20" -H "Authorization: Bearer $OPENAI_API_KEY" | jq -r '.data[]|"\(.id) \(.input_file_id) \(.status)"'
随后等引用结束后再发删除请求
curl -X DELETE https://api.openai.com/v1/files/file-abc -H "Authorization: Bearer $OPENAI_API_KEY"
批量清理时只挑状态为 processed 的文件
curl -s "https://api.openai.com/v1/files?purpose=batch" -H "Authorization: Bearer $OPENAI_API_KEY" | jq -r '.data[]|select(.status=="processed")|.id'
别只看报错消失,验证要多做一步。删除接口返回 deleted 为 true,文件列表里查不到这个 id,配额统计里的占用数同步下降。
容易忽略的是,409 不代表文件还在被读取,只是引用关系没到期,先删引用方的记录,或者等保留期过去,硬重试只会一直撞同一个状态。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
