报错是这么冒出来的。在 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 最容易飘,要么全中文加描述锁定,要么全英文在代码里映射,别两边各写一套。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189