报错是这么冒出来的。在 schema 的 enum 里写了 待付款 已发货 已完成 三个中文值,模型返回的却是 pending shipped done,下游按中文匹配全部落空。
中间走过弯路,把「enum 值与 description 语言不一致」当成主因,改完现象没变。
原因不止一个,得分开看。模型倾向复用训练里见过的英文枚举。也可能是字段描述没有强调必须原样返回。
还有一种情况,下游校验只做精确匹配。
先看返回体里枚举字段的实际值
python -c "import json;print(json.load(open('out.json'))['status'])"
再往下在字段描述里声明只能取 enum 中的值
python -c "import json;s=json.load(open('schema.json'));print(s['properties']['status'])"
增加一层值映射兜底
python map_enum.py --map en2zh.csv --in out.jsonl --out out_fix.jsonl
剩下的就是用 200 条样本统计命中率
python eval_enum.py --in out_fix.jsonl --field status
改之前我把相关日志按时间截了一段存着,事后对时间线用得上。
怎么算真的好了,看的是同一批现象。枚举字段全部输出中文值,映射兜底命中数为零,下游状态机流转正常。
中英混用的 enum 最容易飘,要么全中文加描述锁定,要么全英文在代码里映射,别两边各写一套。这类问题最好一次改到位,反复小改反而容易把原因搅混。
