报错是这么冒出来的。情感三分类的枚举写成全大写,模型返回 "Positive",strict 模式下接口直接报 schema 校验失败,把枚举改成小写后又出现 "NEUTRAL" 混排。
中间走过弯路,把「解析层按原样比对 未做大小写处理」当成主因,改完现象没变。
真正麻烦的地方在于,几个原因的现象几乎一样。枚举值与提示词里给的大小写不一致。另一种情况是模型对枚举做了首字母归一。
还有一种情况,schema 描述缺少必须全大写的说明。
取出失败请求体与 schema 对照
python -c "import json;r=json.load(open('req.json'));print(r['response_format'])"
再往下统一枚举写法并在描述里声明规则
python patch_schema.py --field label --enum positive,negative,neutral --desc 必须小写
解析时先统一大小写再比对
python -c "print('Positive'.lower() in {'positive','negative','neutral'})"
剩下的就是用三百条多语言样本回归
python eval_cls.py --file test_ml.jsonl --strict
怎么算真的好了,看的是同一批现象。三百条全部返回合法枚举,不再出现 schema 不匹配的 400,大小写变体都被正确归一。
枚举大小写要在提示词和 schema 两处对齐,只改一处等于没改。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
