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 请求去获取 



posted @ 2026-06-01 16:16  谁凭花解语  阅读(134)  评论(0)    收藏  举报