用 anthropic 0.42 的 Python SDK 调 claude-3-7-sonnet 做 20 页截图归档,返回里只描述前 3 张,日志显示请求成功没有报错,把图片改成 5 张就正常描述 5 张。

原因不止一个,得分开看。单次请求图片数量有上限,超出部分被服务端静默丢弃;每张图按最长边重新编码后总体积超过请求体限制;消息里 image 块与 text 块顺序错乱,后面的块被当成附件;循环里复用了同一个 block 对象,后面的图覆盖了前面的。

先把请求体序列化后统计 image 块数量与总字节

python -c "import json;d=json.load(open('req.json'));print(sum(1 for m in d['messages'] for c in m['content'] if c['type']=='image'), len(json.dumps(d)))"

接着逐张记录 base64 长度找异常大的那张

python -c "import glob,os;[print(f,os.path.getsize(f)) for f in sorted(glob.glob('shots/*.png'))]"

随后改成分批每次 5 张并在客户端合并结果

python archive.py --batch 5 --merge out.md

给每批请求带上序号与页范围便于对账

python archive.py --batch 5 --tag pages --log batch.log

别只看报错消失,验证要多做一步。20 页全部有对应描述,输出里的页号连续无缺口,单次请求的 image 块数量与传入张数一致。

补一句。没有报错不等于全部生效,多图场景一定要把请求体里的块数量打印出来核对,靠最终回答倒推往往已经晚了。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189