这类问题我又碰上了一次。批量把财报 PDF 发给 claude-3-5-sonnet 做摘要,其中几份返回 400,原文 Could not process PDF: the file may be encrypted or corrupted,其余同批文件正常。
第一反应是「解析 PDF 需要额外开启对应的 beta 请求头」,验证下来不成立。
排查方向其实有限,先把可能性排一排。PDF 设置了打开密码,base64 解码后仍是加密流;文件是扫描件且没有文字层,服务端读不到可抽取内容;单份文件超过 32MB 或页数上限,被直接拒绝。
上来先确认文件是否加密
python -c "import pikepdf;pdf=pikepdf.open('a.pdf');print(pdf.is_encrypted)"
解密后再送,顺带看页数
python -c "import pikepdf;pdf=pikepdf.open('a.pdf',password='');print(len(pdf.pages));pdf.save('a_dec.pdf')"
然后用最小的 PDF 请求验证链路
curl -sS https://api.anthropic.com/v1/messages -H "x-api-key: $ANTHROPIC_API_KEY" -H "anthropic-version: 2023-06-01" -d @pdf_payload.json
等前面都确认过,再记录失败文件名转人工处理
python -c "print(open('failed.txt').read().splitlines())"
恢复的判定其实很直接。所有文件返回 200 且响应里出现对正文内容的引用,失败列表只剩确实无法解密的文件,重试队列清零。
提醒一点。加密和扫描是两类完全不同的问题,前者能解就解,后者要靠 OCR 补文字层,否则模型只会看到空白页。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
