不要再使用 response_format = {'type': 'json_object'} 了
不要再使用 response_format = {‘type’: ‘json_object’} 了
尤其是阿里相关的,Qwen更是重灾区。
猜测内部逻辑是:
- 检测是否有
```或```json,如果有,就replace; - 如果无法 deserialize , 就令模型重新生成。
这十分愚蠢。尤其是 Qwen 一系列模型显然在相关内容的训练不足,在使用 lingma 的过程中, 其 agent 多次因为输出无效的 JSON 格式从而无法调用工具。
导致反序列化失败的因素有很多,拿最近的经历举例,假如 value 内不小心需要使用引号,模型并不会(至少概率很小)给这些引号转义。
除此之外,意想不到的换行符也是反序列化失败的重要原因。由于转义的不可控,你以为看到的 json 是这样的:
1 | { |
然而有可能模型这样输出:
1 | {\n |
这就完全无法序列化了。
我能想到的解决方案只有:
- 强化 prompt ,例如让模型在所有键值的描述信息中全部使用全角中文符号
- 后处理输出内容, replace 所有
\n或者\r
然而这也难以解决所有问题。无论如何,模型厂商仍然需要针对此场景做更多优化。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Alphazer01214’s Blog!