把 60 页产品手册一次性放进上下文做问答,输入约 100k token,问题对应的内容在第 30 页,模型回答时只引用了开头和结尾的章节,中间部分像没读过。
一开始怀疑是「问题放在最前面 与文档距离太远」,查了一圈,方向不对。
这类报错背后常见的原因有几处,逐个排除就行。长上下文对中间位置的信息利用率下降。还有一种是关键段落没有加显式定位标记。
另外,没有先做检索 直接整本塞入。
第一件事是把问题重复放在文档前后各一次
python build_prompt.py --doc manual.txt --q '保修期多久' --repeat-question
给每章加编号与标题锚点
python add_anchors.py --in manual.txt --out manual_anchor.txt
接着检索出相关章节再拼上下文
python retrieve.py --q '保修期' --top 3 --out ctx.txt
剩下的就是对比两种拼法的回答命中率
python eval_qa.py --set qa.jsonl --mode full,retrieval
改完先别撤,确认这几项。中间章节的问题能答对并给出章节编号,评测集命中率提升,输入 token 同时下降。
长上下文能用不等于好用,先检索再拼通常比整本塞入更准也更便宜。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
