GPT4All Node.js 绑定如何离线加载模型(本地 models3.json)?
2026/9/9 19:21:08 网站建设 项目流程

GPT4All Node.js 绑定如何离线加载模型(本地 models3.json)?

【免费下载链接】gpt4allGPT4All: Run Local LLMs on Any Device. Open-source and available for commercial use.项目地址: https://gitcode.com/GitHub_Trending/gp/gpt4all

GPT4All 的 Node.js 绑定(npm 包gpt4all)默认会在启动时请求https://gpt4all.io/models/models3.json来获取模型配置列表。如果你的应用部署在无网络的机器上,这个请求会失败。官方给出的离线方案是:联网时先把models3.json下载到本地,之后通过loadModelmodelConfigFile选项指向这个本地文件。本文按这条路径说明离线加载模型的完整做法,适用环境为 Node.js >= 18.0.0(见 bindings README 的 Requirements 一节)。

离线加载的前提条件

离线加载依赖两个本地文件,缺一不可:

  1. 本地模型清单models3.json:记录每个模型的filenamemd5sumurlrequires等字段,绑定的运行时用它查找模型配置。仓库内就有一份同款文件 gpt4all-chat/metadata/models3.json,可作为格式参考。
  2. 模型权重文件(.gguf:必须已经存在于modelPath指向的目录中。loadModelmodelPath默认值是用户主目录下的.cache/gpt4all(见 config.js 中的DEFAULT_DIRECTORY),也就是说模型文件默认要放在~/.cache/gpt4all/

注意第二条不是可选项:如果模型文件不在本地,而allowDownload保持默认值true,绑定会尝试联网下载模型——在离线环境中这一步会失败。所以“先联网下载好模型,再断开网络”是离线方案的前提。

第一步:联网时下载 models3.json

在能访问网络的机器上执行(命令来自 README 的 Offline usage 一节):

curl -L https://gpt4all.io/models/models3.json -o ./models3.json

下载结果保存到当前工作目录的./models3.json。这个文件需要随你的项目一起部署到离线机器上。

第二步:离线加载模型并生成

在离线机器上安装依赖(三种包管理器任选其一,均来自 README):

npm install gpt4all@latest

然后按 README 示例编写加载代码,关键点是modelConfigFile指向本地的models3.json

import { createCompletion, loadModel } from 'gpt4all' //make sure u downloaded the models before going offline! const model = await loadModel('mistral-7b-openorca.gguf2.Q4_0.gguf', { verbose: true, device: 'gpu', modelConfigFile: "./models3.json" }); await createCompletion(model, 'What is 1 + 1?', { verbose: true }) model.dispose();

代码中各选项的作用:

  • 第一个参数是模型文件名(即models3.json条目中的filename),不是模型展示名。若名字不带.bin/.gguf后缀,绑定会自动补.gguf(见 util.js 的 appendBinSuffixIfMissing),因此这里的值必须与清单里的filename一致。
  • modelConfigFile: "./models3.json":让绑定从本地文件而不是远程 URL 读取模型清单。
  • verbose: true:打印加载日志,便于核对(如Found <model> at <path>),排查时建议保留。
  • device: 'gpu':示例中的可选配置。device默认值是"cpu",无 GPU 或不确定显存是否足够时建议省略或设为"cpu";按类型声明,若 GPU 显存不足以容纳模型会抛错并使实例失效。

如果模型文件不在默认缓存目录,可以在选项中显式指定modelPath(类型声明中说明它是“Where to look for model files”),例如指向你存放.gguf文件的目录。

结果验证与常见错误判断

retrieveModel(见 util.js)的处理逻辑给出了几种可核对的现象:

  • 本地清单文件不存在:直接抛错Model list file ./models3.json does not exist.。检查离线机器上是否部署了该文件、相对路径是否正确。
  • 模型名未在清单中匹配到:打印警告Failed to load model config for <modelName>. Using defaults.,并使用默认模型配置(systemPrompt为空、promptTemplate### Human:\n%1\n\n### Assistant:\n,见 config.js)。此时模型可以加载,但提示词模板与模型要求不符时输出质量可能异常,应按 README Known Issues 的说法重新安装模型或从官网重新下载。
  • 模型文件不在本地且允许下载:绑定会尝试从网络下载,离线环境会失败;确认模型文件已在modelPath目录中即可。
  • 成功标志:开启verbose后能看到Found <model> at <path>Finished completion等调试日志,且createCompletion返回结果对象(含choicesusage字段)而不抛异常。

边界与已知问题

  • 退出进程后 GPU 占用仍偏高:务必调用model.dispose(),这是 README Known Issues 中列出的处理方式。
  • 调用生成后模型挂起:README 记录了一个已知问题——nPast设置过高可能导致模型挂起(2024-03-16,Linux Mint、Ubuntu 22.04)。非必要时不要手动设置nPast
  • 完全离线(连本地models3.json都不依赖)目前仍是未完成的项:README 的 Roadmap 中 “Purely offline” 尚未勾选,因此本文的“本地models3.json”方案是当前绑定的离线路径。

完成离线加载验证后,models3.json与模型.gguf文件都可以随部署包一起分发;后续切换模型时,只需在清单文件中确认filename并在loadModel中传入对应文件名。

【免费下载链接】gpt4allGPT4All: Run Local LLMs on Any Device. Open-source and available for commercial use.项目地址: https://gitcode.com/GitHub_Trending/gp/gpt4all

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询