先把当时的情况摆出来。工具参数里 city 的 enum 写成 New York 和 Los Angeles,模型返回的参数值外层多了一层引号,服务端做值匹配时全部失败,日志里刷 unknown city。
把日志和配置对完,能解释这个现象的基本就这几处。enum 值含空格,模型输出时额外加了引号。少数情况下是arguments 被双层编码,JSON 里又套了一层 JSON。
还有一种情况,服务端做了 strip 但没去掉引号。另外,大小写与空格两边没有统一。
先打印原始 arguments 确认是否双层编码
python tool_dump.py --raw-args
解析两次直到拿到字典
python tool_parse.py --double-decode
服务端对枚举值做归一化
python normalize.py --strip-quotes
末了用两个含空格的城市名验证
python tool_call.py --city 'New York'
同一份数据我导出了两份,一份留底,一份拿来试。
别只看报错消失,验证要多做一步。两个城市名都能命中白名单,日志里不再出现 unknown city,参数只解析一次。
补一句。含空格的枚举值本身就是不稳定因素,能用短代码就别用自然语言,映射表放在服务端更稳。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
