报错是这么冒出来的。情感三分类的枚举写成全大写,模型返回 "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 两处对齐,只改一处等于没改。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189