快速结论:这个报错通常出现在已经升级到 OpenCode v2,却仍用 Ollama 0.40.11 的 ollama launch opencode 启动本地模型的场景;优先把 Ollama 升级到包含 #19310 修复的版本(v0.40.12-rc1 及之后)。
适用环境:Issue 已确认的环境为 Ollama 0.40.11、macOS(Apple Silicon / arm64,Apple M4)、OpenCode v2.1.4 与 v2.0.31。Python、CUDA、PyTorch 等不在讨论范围内。
最快修复方案:升级到 v0.40.12-rc1 或更高的 Ollama 版本,然后用本地模型、不附加 OpenCode 转发参数重新执行 ollama launch opencode --model <本地模型>。官方已在 OpenCode 2.1.4 上验证修复有效。
注意事项:修复目前只在 v0.40.12-rc1 预发布版中提供,正式版 0.40.12 发布前仍可能遇到该问题。Issue 中提到,此问题修复后还会撞上另一个独立问题 #19296(Unrecognized flag: --model),需要分别处理。
问题场景
用户在 OpenCode v2(Issue 中为 v2.1.4,评论区另有 v2.0.31)环境下,通过 Ollama 0.40.11 的 ollama launch opencode --model <本地模型> 启动本地模型。命令在 OpenCode 真正启动之前就被中断,换成不同模型(如 flint、gemma4:12b、GGUF 模型)都会复现,与具体模型无关。云端模型不走这段读取逻辑,因此不受影响。
报错原文
$ ollama launch opencode --model flint
Loading flint:latest...
Error: could not read OpenCode model limits: json: cannot unmarshal array into Go value of type struct { Provider map[string]struct { Models map[string]struct { Limit struct { Input int; Output int } } } }
原因分析
cmd/launch/opencode.go 中的 runContent 会执行 opencode debug config,并把输出按 OpenCode v1 的配置结构反序列化。OpenCode v2 的 debug config 改为输出配置来源列表,顶层是一个由 {type, path, info} 条目组成的 JSON 数组,因此 Go 端在解析第一个字符时就报 cannot unmarshal array,启动流程直接中止且没有回退逻辑。
Issue 正文指出,仅去掉数组外壳还不够:v2 同时改掉了结构键名,providers 取代 provider、package 取代 npm、settings 取代 options,且 model 变成带 providerID 和 model 的对象,所以即便解包也找不到 ollama provider。
触发该读取还需要同时满足:使用本地模型、没有转发参数、内联配置中含模型条目、且 /api/ps 返回的上下文长度至少为 4。这段读取的唯一目的是让用户配置中更小的 limit.input / limit.output 覆盖启动器计算出的限额,因此适合把无法识别的配置视为“无用户限额”并继续启动。
环境排查
- Ollama 版本:确认是否为 0.40.11,是否已升级到
v0.40.12-rc1或更高。 - OpenCode 版本:确认是否为 v2.x(Issue 中复现版本为 v2.1.4 与 v2.0.31)。
- 平台:Issue 中为 macOS / Apple Silicon;其他平台未在讨论中确认。
- 模型类型:是否为本地模型(云端模型不触发该读取路径)。
- 启动参数:是否附加了会被转发给 OpenCode 的参数。
- 配置位置:本地内联配置中是否存在模型条目,以及
opencode debug config输出的顶层是数组还是对象。
解决步骤
- 可优先尝试:将 Ollama 升级到
v0.40.12-rc1或更高版本(修复提交为 #19310)。 - 如前一步暂不可行,评论区提供的绕过方式是:在
~/.config/opencode/opencode.json中直接声明ollamaprovider,采用 openai-compatible 形式,baseURL指向http://127.0.0.1:11434/v1,并为每个模型声明真实的limit: { context, output }(评论区指出 OpenCode 需要不少于 64k 的上下文),然后直接运行opencode,不再经过ollama launch。评论区反馈该方式在 0.40.11 / v2.0.31 上可端到端工作,包括工具调用类 agent。 - 另一种临时做法是回退 OpenCode 版本:评论区有人先执行
opencode uninstall,再通过 Ollama 重新安装(Ollama 初始默认安装的是可用版本),从而暂时恢复使用;升级到 v2 后问题再次出现。 - 升级并重测时,按官方说明使用本地模型、不附加 OpenCode 转发参数。若此时出现
Unrecognized flag: --model,那是 #19296 的独立问题,不属于本 Issue 范围。
验证方法
在升级后的 Ollama 上执行 ollama launch opencode --model <本地模型>,确认不再出现 could not read OpenCode model limits 报错,并且 OpenCode 能正常启动。维护者说明修复后仍保留输入/输出限额覆盖与项目优先级行为,可同时确认自定义的 limit.input / limit.output 仍然生效、更小的用户设置仍能覆盖启动器计算值。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


![[HELP?]: 1.180.0 llama server failed to start](https://www.chat-gpts.plus/wp-content/uploads/2026/10/6837-19037eb5-768x403.jpg)