输出要求写死了必须中文,但六条 few-shot 示例全是英文,gpt-4o-mini 稳定输出英文;把约束挪到 user 末尾再重复一次,抽样仍有约三成英文回答。
一开始怀疑是「system 与 user 语言不一致 模型选了示例那一侧」,查了一圈,方向不对。
真正麻烦的地方在于,几个原因的现象几乎一样。示例语言被模型当成输出格式的一部分。另一种情况是中文约束只出现一次 权重低于六条英文示例。
不容易想到的是,输出层没有语言校验 英文结果也算通过。
上来先统计近两百次输出的语言分布
python lang_stat.py --log out.jsonl --field content
示例全部翻成中文 字段名保留英文
python translate_fs.py --input fs.json --out fs_zh.json
user 末尾加一句固定输出语言
sed -i '$a 只输出简体中文。' prompt.txt
剩下的就是加正则校验 非中文结果重试一次
python guard_lang.py --pattern '[\u4e00-\u9fff]' --min-ratio 0.6
改完先别撤,确认这几项。两百次抽样中文占比 100%,字段名与枚举值仍保持英文,下游解析不受影响。
提醒一点。示例是隐式指令,语言不一致时模型跟着示例走,说明文字压不过示例。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
