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下载到本地,之后通过loadModel的modelConfigFile选项指向这个本地文件。本文按这条路径说明离线加载模型的完整做法,适用环境为 Node.js >= 18.0.0(见 bindings README 的 Requirements 一节)。
离线加载的前提条件
离线加载依赖两个本地文件,缺一不可:
- 本地模型清单
models3.json:记录每个模型的filename、md5sum、url、requires等字段,绑定的运行时用它查找模型配置。仓库内就有一份同款文件 gpt4all-chat/metadata/models3.json,可作为格式参考。 - 模型权重文件(
.gguf):必须已经存在于modelPath指向的目录中。loadModel的modelPath默认值是用户主目录下的.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返回结果对象(含choices与usage字段)而不抛异常。
边界与已知问题
- 退出进程后 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),仅供参考