客服机器人跑过 20 轮后开始不遵守 system 里写的退款金额上限,把 500 元说成 5000 元,同一份 system 在新会话第一轮完全正常。
一开始怀疑是「每轮只追加不总结,上下文里冗余越堆越多」,查了一圈,方向不对。
排查方向其实有限,先把可能性排一排。轮次越多,早期 system 的注意力权重被稀释。也可能是历史里 assistant 的错误表述被当成了事实。
少数情况下是关键约束没有在用户轮次里复述。
每六轮插入一条约束复述
python chat.py --reanchor 6
再往下把早期历史压成摘要
python chat.py --summary --keep 8
金额上限交给代码校验而不是只靠提示
python guard.py --amount-limit 500
末了用 30 轮脚本做回归
python chat_regress.py --turns 30
这类改动我都写进变更记录,过两周再出问题时能对上号。
恢复的判定其实很直接。30 轮回归里金额始终不超过上限,抽十条回答人工核对无偏差,摘要后上下文长度稳定。
长对话里的约束要靠结构和代码兜底,只写在开头那一段 system 里,轮次一多必然衰减。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
