事情本身不复杂,线索都在日志里。把一张 20 行 6 列的对账单截图发给 gpt-4o,detail 设 high,让它输出 markdown 表格,结果第三列的数据整体串到第四列,合计行也被当成了普通数据行。
第一反应是「表格有合并单元格,模型按视觉位置猜归属」,验证下来不成立。
这类报错背后常见的原因有几处,逐个排除就行。截图分辨率不足,列间竖线在压缩后糊在一起。还有一种是提示词只说要表格,没约束列名与对齐方式。
不容易想到的是,图片被自动压缩,detail 参数没真正生效。
动手时先打印图片实际尺寸与文件大小
python -c "from PIL import Image;im=Image.open('t.png');print(im.size, len(open('t.png','rb').read()))"
随后按长边 2048 重切并提高清晰度
python -c "from PIL import Image;im=Image.open('t.png');im.resize((2048,int(2048*im.size[1]/im.size[0]))).save('t2.png')"
提示词里点名列头并要求空值留空
python -c "print('按表头输出 markdown,缺失值写 NA,不要合并行')"
剩下的就是输出后按列数校验每行单元格数
python -c "print([len(l.split('|')) for l in open('out.md')][:5])"
怎么算真的好了,看的是同一批现象。输出表格每行列数与表头一致,合计行单独标注,抽查十行数字与截图逐格相同。
补一句。表格识别错位多与分辨率有关,把图放大比换模型便宜,另外合并单元格一定要在提示词里说明。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
