事情本身不复杂,线索都在日志里。客服机器人在 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 数下降三成。

提醒一点。位置比字数更影响服从度,长规范要么编号要么拆成多轮,别指望模型自己从头读到尾。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189