现场是这样的。RAG 入库时按 512 字符切块、overlap 设 0,一份财报里的表格被切成上下两半,问「第三季度毛利率」检索到的片段只有表头。
中间走过弯路,把「表格没有转成 markdown 保留结构」当成主因,改完现象没变。
原因不止一个,得分开看。按字符切分没有识别表格边界;overlap 为 0 导致跨块信息完全断裂;父子块没有建立关联,召回后无法补全。
第一件事是看切出来的块长什么样
python -c "t=open('q3.md').read();print(t[0:512])"
然后用布局解析把表格整块保留
python -c "import pdfplumber;print(len(pdfplumber.open('report.pdf').pages))"
随后加 80 字符重叠并让表格单独成块
python -c "print('chunk 512 overlap 80, table as one block')"
给表格块挂父文档 id 便于回填
python -c "print({'chunk':'t-18','parent':'p-3'})"
同事提醒我看一下最近一次发布,时间点确实对得上。
恢复的判定其实很直接。「第三季度毛利率」能召回完整表格块,答案里的数值与财报原文一致,表格类问题的正确率从 31% 升到 82%。
切块策略要按内容类型分,纯文本可以硬切,表格和代码必须整块保留,重叠只是兜底不是方案。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
