把 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 同时下降。

长上下文能用不等于好用,先检索再拼通常比整本塞入更准也更便宜。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189