事情本身不复杂,线索都在日志里。客服机器人在 gpt-4o 上跑,system 里放了 1.2 万字的业务规范和禁答范围,前面 8000 字写完的类目照样被回答,实测只有最后三条生效,把同一段规范抄到 user 末尾才恢复。
第一反应是「关键约束混在说明文字里 没有单独成行」,验证下来不成立。
真正麻烦的地方在于,几个原因的现象几乎一样。长上下文里靠前的内容注意力权重本来就低。还有一种是规范条目没有编号 模型无法逐条对齐。
不容易想到的是,温度 0.7 时采样把边界条目当成可选项。
量清楚 system 实际占了多少 token
python -c "import tiktoken;print(len(tiktoken.get_encoding('cl100k_base').encode(open('sys.txt').read())))"
再往下把禁答条目改成编号列表 一条一行
python fmt_rules.py --input sys.txt --out sys_fmt.txt --numbered
然后把最关键的二十条挪到 system 结尾并加结束标记
python reorder.py --head sys_fmt.txt --tail-out sys_final.txt
等前面都确认过,再用固定三十条越界问题做回归
python run_eval.py --cases cases/boundary.jsonl --model gpt-4o
怎么算真的好了,看的是同一批现象。三十条越界问题全部拒答,正常问题通过率与改动前持平,日志里 system 的 token 数下降三成。
提醒一点。位置比字数更影响服从度,长规范要么编号要么拆成多轮,别指望模型自己从头读到尾。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
