
ImportError: print(“Missing dependency: pip install jsonschema ollama”)
快速结论:此报错并非真正缺少依赖,而是 Ollama 在处理复杂 JSON Schema(尤其是包含 oneOf、const 等关键字的嵌套结构)时,结构化输出未能正确生成有效 JSON,导致返回空数组 []。优先排查是否使用了复杂的 Schema 结构。
问题场景
用户在使用 Ollama 的 /api/chat 接口,通过 format 参数传递 JSON Schema 要求模型输出结构化数据(如函数调用、用户信息生成)时,返回的 content 字段为空数组 [],不符合 Schema 的约束(要求至少 1 个元素)。
报错原文
curl -X POST http://localhost:11434/api/chat -H "Content-Type: application/json" -d '{
"model": "llama3.2",
"messages": [{"role": "user", "content": "Create a random new user"}],
"stream": false,
"format": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "array",
"minItems": 1,
"maxItems": 1,
"uniqueItems": true,
"items": {
"oneOf": [
{ ... }
]
}
}
}'
# Output:
{
"message": {
"content": "[]"
},
"done_reason": "stop"
}
原因分析
Ollama 在处理含有 oneOf 和 const 等复杂约束的 JSON Schema 时,可能未能正确尊重结构化输出约束。尽管模型正常结束(done_reason: "stop"),但输出内容 [] 明显违反了 Schema 中 minItems: 1 的要求。用户测试发现,如果移除数组层级(即直接使用 oneOf 而非 items.oneOf),问题可能缓解。此外,Issue 评论指出 该 Schema 在 llama.cpp 的最新构建中工作正常,报错与 llama.cpp 无关,而是 Ollama 自身在处理嵌套 JSON Schema(尤其是 oneOf 结合 const)时存在缺陷。
环境排查
- 确认 Ollama 版本(可运行
ollama --version查看) - 确认 llama.cpp 版本是否影响(本 Issue 中 llama.cpp 构建 4313 正常,Ollama 可能使用了旧版本的后端)
- 确认模型是否为
llama3.2或其他支持结构化输出的模型 - 确认 Schema 中是否包含复杂关键字:
oneOf、const、minItems、uniqueItems等
解决步骤
-
简化 Schema 结构(可优先尝试)
尝试移除数组层级,直接使用oneOf顶层约束,而非包裹在items.oneOf内部。例如,将type: "array"和items去掉,直接要求模型返回符合oneOf中任意一个对象模式的 JSON。 -
使用不带
oneOf的平铺 Schema
如果业务允许,将oneOf替换为更简单的字段组合(如使用enum或anyOf),或单独为每个函数调用发送不同的请求。 -
升级 Ollama 或更新后端
由于 llama.cpp 已经支持该 Schema,可尝试升级 Ollama 到最新稳定版,或等待官方修复。升级后重启服务并重新测试。 -
使用 llama.cpp 直接调用作为临时规避
如果紧急,可以暂时使用 llama.cpp 的--json-schema参数直接运行模型(用户评论中确认可正常工作)。具体命令参考:./build/bin/llama-cli -m ./models/7B/ggml-model-f16.gguf --prompt "Create a new user" --json-schema '{"$schema": "...", "type": "array", ...}'
验证方法
修改 Schema 后重新发送相同的请求,检查返回的 content 字段是否为有效 JSON,并且符合 Schema 的约束(如数组包含至少 1 个元素,且字段正确)。也可以使用 jq .message.content 解析响应,并用 Python 的 jsonschema 库验证输出。
参考来源
ollama/ollama #8063 – Ollama Not Respecting Structured Outputs


![[Bug]: DiffusionGemma structured JSON outputs fail with xgrammar FSM rejection](https://www.chat-gpts.plus/wp-content/uploads/2026/06/45436-40f4f255-768x403.jpg)
