报错是这么冒出来的。把截图按 PNG 保存后读成字节发过去,返回 400,原文 media_type: image/jpg is not supported,代码里把扩展名 jpg 直接拼成了类型。
中间走过弯路,把「WebP 这类格式不被接受,需要先转码」当成主因,改完现象没变。
排查方向其实有限,先把可能性排一排。合法值只有 image/jpeg 和 image/png 等少数几种。还有一种是扩展名和真实字节不一致,改了后缀没转码。
少数情况下是base64 里带了 data URL 前缀,整段被当成数据。
上来先读文件头确认真实格式
python -c "print(open('a.png','rb').read(8))"
接着统一转成 PNG 再编码
python -c "from PIL import Image;Image.open('a.webp').convert('RGB').save('a.png')"
末了用 image/jpeg 与 image/png 各试一次
curl -sS https://api.anthropic.com/v1/messages -H "x-api-key: $ANTHROPIC_API_KEY" -H "anthropic-version: 2023-06-01" -d @img_payload.json
同事提醒我看一下最近一次发布,时间点确实对得上。
命令输出我都留了记录,免得改完记不清原来的值。
怎么算真的好了,看的是同一批现象。图片请求返回 200 且模型能描述图中内容,media_type 与文件头一致,不再出现格式不支持。
补一句。别用扩展名推断格式,相机改后缀的文件很多,按文件头判断再传给服务端才稳。这类问题最好一次改到位,反复小改反而容易把原因搅混。
