事情本身不复杂,线索都在日志里。客服问答里回答「退款 7 个工作日到账」,原文写的 15 个工作日,人工抽检 200 条发现 11 条数字被改写,引用链接还指对了段落,用户按答案投诉后才发现。
第一反应是「引用粒度只到段落,没有数字级核对」,验证下来不成立。
真正麻烦的地方在于,几个原因的现象几乎一样。生成阶段对数字做了自由改写。还有一种是上下文里有多个相似数字,模型混用。
另外,没有把答案里的数值与原文做比对。
动手时先把答案和引用段落里的数字都抽出来
python -c "import re;s=open('ans.txt',encoding='utf-8').read();print(re.findall(r'\d+',s))"
做集合比对,答案里多出的数字直接标红
python number_check.py --answer ans.txt --context ctx.txt --out diff.json
不一致时触发一次带原文的重新生成
python regenerate.py --strict-numbers --max 1 --out ans2.txt
末了把核对结果写进日志并按天统计
python -c "print({'checked':200,'mismatch':11})"
改完先别撤,确认这几项。抽检里数字不一致的条数降到 0,答案中的数值全部能在引用段落里找到原文。
补一句。数字是最容易被改写的实体,把数值核对做成后置校验,比在提示词里反复强调不要编造有效。这类问题最好一次改到位,反复小改反而容易把原因搅混。
