用 gemini-2.0-flash 的 inline_data 传一份 12 页财报 PDF,问营收同比,模型把 12.4% 读成 124%,把柱状图的刻度当成数值,换成 PNG 截图再问结果就对了。

原因不止一个,得分开看。PDF 里的图表是矢量图,转位图时 DPI 太低看不清刻度;页面缩放后图表区域被裁掉一部分,模型只能猜;没有在提示里说明单位是百分比还是绝对值;同一份文件既传 PDF 又传图片,两路内容互相干扰。

先用 pdftoppm 按 200 DPI 把目标页渲染成 PNG

pdftoppm -f 8 -l 8 -r 200 -png report.pdf page

量一下渲染结果的像素宽度确认清晰度

python -c "from PIL import Image;print(Image.open('page-08.png').size)"

只发这一页图片并在提示里写清单位与小数位

curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GKEY" -H 'Content-Type: application/json' -d @one_page.json

等前面都确认过,再对同一页跑三次取一致结果再入库

python ask_gemini.py --page 8 --repeat 3 --temperature 0

恢复的判定其实很直接。渲染后的单页请求三次回答一致且与财报原文 12.4% 相符,单位与小数位都在输出里写全。

这里还有个坑。矢量图表经过一次位图化才进入模型视野,DPI 低于 150 时刻度基本不可读,宁可只发一页高清也不要塞整本低清。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189