事情本身不复杂,线索都在日志里。内部价格表按 500 字递归切块入库,被切开的表格后半段没有表头,模型把第二列当成数量,最后报价单里单价乘以了数量,差了两个数量级。

第一反应是「表格转 markdown 时列宽不齐,竖线数量不一致」,验证下来不成立。

这类报错背后常见的原因有几处,逐个排除就行。切分点落在表格中间,后半段丢了表头。还有一种是chunk 里没有列名信息,模型只能按位置猜。

另外,同一张表被拆到两个 chunk,检索只命中一半。

定位哪些 chunk 的一半是表格行

python -c "import json;cs=[json.loads(l) for l in open('chunks.jsonl')];print([c['id'] for c in cs if c['text'].count('|')>6][:10])"

表格整体不切分,超过上限时按行分页并重复表头

python split_tables.py --in price.docx --max-rows 40 --repeat-header

每个 chunk 前拼接列名摘要

python enrich_chunk.py --dir chunks/ --add-columns

末了用固定问题验证单价与数量不再互换

python ask.py --q 'A3 型号的单价是多少' --topk 5

改完先别撤,确认这几项。回答里的单价与数量各归其位,引用能落到带表头的整段表格上,五个固定问题全部答对。

表格是最怕切分的内容,宁可整表入库配行数上限,也不要在行中间断开,表头缺失时模型只能靠猜。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189