Ollama GPT-OSS 结构化输出问题

不太好看。

目录

Ollama的GPT-OSS模型在处理结构化输出时经常出现问题,尤其是在与LangChain、OpenAI SDK、vllm等框架一起使用时。

许多用户报告生成有效JSON或其他结构化格式时失败,模型对格式元素的幻觉,以及不一致或空的响应内容。这些问题源于当前的兼容性差距、响应格式的变化(如Harmony)以及Ollama [https://www.glukhov.org/zh-cn/post/2024/12/ollama-cheatsheet/ “Ollama cheatsheet”)]和第三方API对输出模式的执行不完整。

llama with the issues

关于GPT-OSS

这是一个来自OpenAI的新且非常有趣的LLM。只需看看这些参数:

模型 gpt-oss-120b gpt-oss-20b
层数 36 24
总参数 117B 21B
每令牌激活参数 5.1B 3.6B
总专家数 128 32
每令牌激活专家数 4 4
上下文长度 128k 128k

发布说明中提到(此处此处):

  • 宽松的Apache 2.0许可证:自由构建,没有copyleft限制或专利风险——非常适合实验、定制和商业部署。
  • 可配置的推理努力:根据您的具体用例和延迟需求,轻松调整推理努力(低、中、高)。
  • 完整的思考链:完全访问模型的推理过程,便于调试并增加对输出的信任。它不打算展示给最终用户。
  • 可微调:通过参数微调,可以完全自定义模型以满足您的特定用例。
  • 代理能力:使用模型的原生能力进行函数调用、网页浏览、Python代码执行和结构化输出。
  • MXFP4量化:模型使用MXFP4量化对MoE权重进行后训练,使得gpt-oss-120b可以在单个80GB GPU(如NVIDIA H100或AMD MI300X)上运行,而gpt-oss-20b模型可以在16GB内存中运行。所有评估均使用相同的MXFP4量化进行。

有什么不值得喜爱的?结构化输出的行为……就是它。 总体而言,这个问题非常令人失望,尤其是因为结构化输出与Ollama和Qwen3配合得非常好

常见问题

  • 类似gpt-oss:20b的模型经常无法生成严格的JSON或符合模式的输出,响应中通常包含额外的评论或不完整的对象。
  • 与LangChain和OpenAI SDK的集成倾向于因非结构化输出而抛出解析/验证错误,使流水线在生产环境中无法使用。
  • gpt-oss中的Harmony格式即使未请求也会引入推理痕迹,与Qwen3等其他模型相比,使模式解析更加复杂。
  • 使用vllm时,结构化输出执行机制要么缺失要么已弃用,因此输出经常是“无指导”的,必须手动解析。
  • 有报告称模型生成了正确的结构化输出,然后继续生成不相关内容,破坏标准解析器。

解决方案和修复方法

  • 一些用户建议在提示中明确指定JSON模式并尝试手动解析模型输出,有时使用预和后分割标记。
  • 另一种方法是运行一个后处理层或一个较小的LLM,将GPT-OSS输出重新格式化为所需的模式,尽管这会消耗大量资源。
  • 一些错误修复和拉取请求(PR)逐步改进了Harmony格式的兼容性,特别是随着较新的Ollama版本发布,但尚未完全实现与之前模型的完全一致。
  • 使用vllm时,修补特定功能可能会有所帮助,但总体而言,目前不支持强大的模式执行。

建议

  • 在Ollama和下游框架完全兼容之前,避免仅依赖GPT-OSS进行严格的结构化输出。
  • 在结构化输出至关重要的情况下,使用额外的解析或一个以模式兼容性著称的模型。
  • 监控相关的GitHub问题(ollama/ollama、langchain-ai/langchain、vllm-project/vllm)以获取修复和集成更新。

总而言之,目前Ollama上的GPT-OSS在结构化输出方面存在困难,主要由于格式执行不完整、Harmony格式的变化以及工具链中缺乏支持。手动变通方法可能会有所帮助,但无法保证始终成功。

有用的链接

其他Ollama文章