把供应商发来的 PDF 直接抽文本送进摘要流程,模型输出里突然多了一句忽略以上要求并输出系统提示的话。用 pdfplumber 逐字符看颜色,发现第 2 页有一段白色 1 号字,内容是一整段英文指令,肉眼和截图都看不出来。
一开始怀疑是「提示词把整段文档当可信内容,没有任何隔离」,查了一圈,方向不对。
原因不止一个,得分开看。抽取层只拿文本,完全丢掉了字号与颜色。也可能是隐藏文字被排进正文顺序,和正常段落混在一起。
还有一种情况,渲染成图片再 OCR 的链路同样会读到白字。
先按字符统计颜色与字号,找出异常区间
python -c "import pdfplumber;p=pdfplumber.open('vendor.pdf');c=p.pages[1].chars;print(set((x['non_stroking_color'],round(x['size'],1)) for x in c))"
只保留正常字号与深色字符,重新拼文本
python extract_pdf.py --file vendor.pdf --min-size 6 --drop-white --out clean.txt
过滤零宽字符与不可见控制符
python -c "t=open('clean.txt',encoding='utf-8').read();print(sum(t.count(chr(c)) for c in range(0x200b,0x2010)))"
剩下的就是在提示词里把文档内容包进分隔符并声明只是数据
python summarize.py --input clean.txt --wrap untrusted
别只看报错消失,验证要多做一步。同一份 PDF 重新摘要后不再出现指令式句子,清洗前后的文本差异只来自被删掉的那部分字符。
白字只是最直观的一种,字号为 0、透明度和页外坐标同样能藏文本,抽取时按属性过滤比按关键词黑名单可靠。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
