opencode 默认不更新模型解决方案
Models 更新逻辑详解 整个模型数据生命周期分三层: 1. 构建时快照(编译二进制时) packages/opencode/script/generate.ts 会从 https://models.dev/api.json 拉取全量数据(120+ provider、4490+ 模型),嵌入二进制作为 OPENCODE_MODELS_DEV 常量。这是二进制的内置默认数据。 2. 运行时加载(启动时) 二进制启动后,packages/core/src/models-dev.ts 的 populate() 按优先级获取模型数据: 磁盘缓存 (~/.cache/opencode/models.json) → 构建时快照 → 网络请求 models.dev/api.json 结果会被永久缓存在内存中(cachedInvalidateWithTTL(..., infinity)),重启才会刷新。 3. 刷新机制 - 手动刷新:opencode models --refresh → 强制重新拉取 models.dev/api.json,更新磁盘缓存,并使内存缓存失效(下次 get() 重新加载) - 自动刷新:启动后每个 60 分钟后台触发一次刷新(检查磁盘缓存是否 >5 分钟旧,旧才拉取) - 跳过条件:如果 OPENCODE_DISABLE_MODELS_FETCH 环境变量被设置,跳过所有网络请求 在 CN 网络的特殊处理 models.dev 在 CN 网络不可达,所以: - 构建时必须通过 MODELS_DEV_API_JSON=/path/to/file 指定替代数据 - 运行时 refresh 会失败(网络不通),模型数据不会自动更新 - 如果手动删了 ~/.cache/opencode/models.json,会回退到内置快照 - 更新的唯一方式:重新编译二进制时用更新的 MODELS_DEV_API_JSON 文件
1. 自己去拉 新的models json 然后 通过变量
MODELS_DEV_API_JSON 替换掉
2. 只修改opencode相关的模型, 拉取opencode分支 自己编译(默认分支是dev),修改代码部分
直接和ai说
修改代码
opencode models --refresh 网络不通走MODELS_DEV_API_JSON , 但opencode zen 套餐的模型要根据 https://opencode.ai/zen/v1/models 请求去获取

浙公网安备 33010602011771号