![[Bug]: /v1/chat/completions hangs when max_tokens is omitted (macOS Apple Silicon, 0.30.7 + 0.30.8)](https://www.chat-gpts.plus/wp-content/uploads/2026/06/16707-111391ad.jpg)
[Bug]: /v1/chat/completions hangs when max_tokens is omitted (macOS Apple Silicon, 0.30.7 + 0.30.8)
快速结论:该 Bug 发生在 macOS Apple Silicon 上通过 Ollama 的 OpenAI 兼容 API 调用 /v1/chat/completions 时,如果请求体中省略了 max_tokens,且模型生成长度超过约 100 token 时,请求会一直挂起,直到客户端超时。优先排查:为请求手动设置 max_tokens(例如设为 100 或更小值)可临时绕过。
问题场景
用户在 macOS Apple Silicon(MacBook Air M3,16 GB)上运行 Ollama 0.30.7 或 0.30.8,通过 /v1/chat/completions 调用 OpenAI 兼容 API 时,如果 max_tokens 被省略,模型生成长文本后 curl 或任意客户端(Node fetch、Python requests)都会挂起直到超时。该现象与是否使用 format: "json"、keep_alive 等参数无关。
报错原文
curl: (28) Operation timed out after 30000ms with 0 bytes received
# Server log: model begins generating, continues past stop token, response stream never closed
原因分析
可能原因:Ollama OpenAI 兼容适配器(位于 routes.go 或类似位置)在客户端未提供 max_tokens 时,没有设置一个有限的安全默认值。服务端生成 token 后,由于缺少显式的停止信号或 token 预算,响应流一直保持打开状态,导致客户端永久等待。特别的,stream: false 模式下不会输出任何字节直到生成完全结束,而 30 秒时间不足以完成生成长文本。但 Issue 作者指出当设置 max_tokens: 100 时 5 秒内完成,而设为 110 时仍会挂起,说明存在一个清晰的临界值(约 100-110 token)。
Ollama 社区未给出官方确认的最根本原因,目前认为是服务端适配器中 max_tokens 没有默认值导致的。
环境排查
- Ollama 版本:0.30.7 和 0.30.8(在 0.30.8 上重现,0.30.7 也可复现)
- macOS 版本:macOS 26.5.1 (Darwin 25.5.1)
- 硬件:MacBook Air M3,16 GB Unified Memory
- 模型:gemma4:12b(7.6 GB,Q4_K_M,MIT/Apache)
- Ollama server 启动参数(仅供深度排查参考):
--model … --port 54481 --host 127.0.0.1 --no-webui --offline -c 4096 -np 1 --log-verbosity 4 --no-log-prefix --no-log-timestamps --no-jinja --chat-template chatml --mmproj … --no-mmap --flash-attn auto -b 512 -ub 512 --context-shift --keep 4 - 客户端:curl,但同样影响 Node fetch、Python requests
注意:keep_alive 参数在 OpenAI 兼容端点中不被官方支持(但 Issue 中仍在使用)。
解决步骤
- 临时解决方法(客户端侧):所有调用
/v1/chat/completions的请求都明确设置max_tokens为一个较小值(如100或更小)。 - 长期修复(等待上游):Ollama 团队需要在 OpenAI 兼容适配器中强制设定一个有限
max_tokens默认值(例如 512 或根据模型上下文窗口派生)。目前在 Issue 中未有提交的 PR,需要关注后续版本更新。 - 替代排查(如果
max_tokens无效):尝试将stream设为true,观察是否能看到 token 逐步生成(否则可能是网络或服务本身问题)。 - 注意:不要依赖
keep_alive作为参数(虽然 Issue 中提及,但 Ollama 文档未将其列为官方支持的 OpenAI 兼容参数)。
验证方法
在请求体中明确添加 "max_tokens": 100(或更小值),重新调用 /v1/chat/completions,如果能正常返回响应(5 秒内),即确认问题已绕过。如果仍挂起,则可能不是此 Bug,需检查服务端日志或其他网络问题。



