报错是这么冒出来的。openai 1.40 的脚本创建 run 时返回 404,原文 No assistant found for the provided ID,assistant 是十分钟前用同一个 key 建的,控制台列表里 asst_ 开头的 id 明明还在。
中间走过弯路,把「复制 id 时漏了 asst_ 前缀,服务端按无效 id 处理并返回同一个文案」当成主因,改完现象没变。
真正麻烦的地方在于,几个原因的现象几乎一样。v2 接口要显式带 OpenAI-Beta: assistants=v2 头,旧 SDK 默认走 v1 命名空间。少数情况下是assistant 建在另一个项目下,换 key 之后就查不到这个对象。
少数情况下是assistant 已被删除,删除时不报错,只在列表里消失。
先列出当前 key 能看到的 assistant
curl https://api.openai.com/v1/assistants -H "Authorization: Bearer $OPENAI_API_KEY" -H "OpenAI-Beta: assistants=v2" | jq -r '.data[].id'
带 v2 头单独查一次这个 id
curl https://api.openai.com/v1/assistants/asst_abc -H "Authorization: Bearer $OPENAI_API_KEY" -H "OpenAI-Beta: assistants=v2" | jq '.id,.model'
接着确认 SDK 版本并升到支持 v2 的版本
python -c "import openai;print(openai.__version__)"; pip install -U openai
等前面都确认过,再在当前项目重建一个再立刻发起 run
curl https://api.openai.com/v1/assistants -H "Authorization: Bearer $OPENAI_API_KEY" -H "OpenAI-Beta: assistants=v2" -H "Content-Type: application/json" -d '{"model":"gpt-4o-mini","name":"smoke"}'
恢复的判定其实很直接。列表和单查都能返回同一个 assistant,run 创建后状态能推进到 completed,日志里不再出现 404,返回体 model 与请求一致。
v1 与 v2 的对象不通用,同一个 id 在旧命名空间里就是不存在,先把 beta 头补齐再看权限,能省掉一半无效排查。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。