Skip to content
This page has been auto-translated and may contain errors.View in English

在本地运行开源模型项目

用这个页面来运行任何一个提取的开源模型项目。其中一个在你的浏览器里加载 Transformers.js 模型;另一个运行 Express 服务器,调用你电脑上的 Ollama。先确定你有的是哪个项目,然后只按那个项目的说明操作。

你需要的前置条件

安装支持的 LTS 版本 Node.js。推荐 Node 24,它包含 npm。如果你对 Node 和 npm 不熟悉,在本地运行代码 会逐步讲解如何安装和检查两者。

Transformers.js 项目需要一个当前版本的浏览器、第一次下载库和模型时的网络连接,以及足够的浏览器存储空间和内存。它不需要 API 密钥。

Ollama 项目还需要 Ollama、足够的磁盘空间和内存来运行 mistral 模型,以及本地 Ollama 服务在运行。它不需要提供商账户或 API 密钥。

Juno你需要的前置条件 先安装 Node.js LTS,然后选择你的路径:用 Transformers.js 需要当前浏览器和网络连接,或者用 Ollama 课程需要 Ollama 应用并保持其服务运行。两个都不需要 API 密钥,第一次我配置的时候也觉得好得不像真的。但确实是真的!
Juno你需要的前置条件 两个项目都在你自己的硬件上运行模型,所以不需要配置提供商密钥。Transformers.js 把模型下载到浏览器标签页;Ollama 课程需要先分别安装并运行 Ollama 服务,服务器才能访问它。无论哪种方式都要安装 Node LTS,因为 npm 驱动两个设置。
Juno你需要的前置条件 两条本地计算路径,两种资源预算。浏览器路径依靠远程库资源和模型资产、浏览器缓存、存储和内存;Ollama 路径需要原生服务、下载的权重,以及足够的机器性能进行推理。上课前检查硬件,这是我在把模型加载到无法容纳它的笔记本电脑后养成的习惯。

确定你提取的是哪个项目

在包含 package.json 的提取文件夹里打开一个终端:

bash
$ cd path-to-your-downloaded-project

如果文件夹名称不能告诉你提取的是哪个课程,打开 index.js。如果看到 express 导入,那就是需要下面进行包修复的 Ollama 课程;如果看到 Transformers.js 导入,那就是浏览器应用,按原样运行。

Juno确定你提取的是哪个项目package.json 旁边打开你的终端,就像你开始做饭前站在厨房里一样。浏览器模型项目在 Transformers.js 部分之后;Express 服务器在 Ollama 部分之后。我曾经在整个文件夹高度上运行过一个完整设置,所以先检查你在哪里。
Juno确定你提取的是哪个项目 两个下载从外部看起来很像,但运行方式不同:浏览器模型项目用 Vite 启动,而 Ollama 项目是一个 Node 服务器,还需要分别运行 Ollama 服务。选择与你的项目匹配的部分,只按那一个操作,因为设置步骤不能混在一起。
Juno确定你提取的是哪个项目 根据证据而非文件夹名称来识别项目:打开 index.js。如果看到 express 导入,那就是 Ollama 课程,需要下面的包修复;如果看到 Transformers.js 导入,那就是 Vite 浏览器应用,按原样运行。我恰好跳过了那个检查一次,一次就够了。

运行 Transformers.js 项目

使用 Transformers.js 在浏览器中运行 AI 模型 使用这些说明。这个项目需要 Node 和 npm 来运行 Vite。

安装并启动它:

bash
$ npm install
$ npm start

打开 Vite 打印的 Local URL,通常是 http://localhost:5173/。这个页面先从 jsDelivr 导入 Transformers.js,然后下载 Xenova/yolos-tiny 对象检测模型。等到状态从 Loading model... 变成 Ready 后再选择 Detect Objects

第一次加载需要网络连接,可能比普通前端页面花时间长;后续加载来自浏览器缓存。如果状态一直没到 Ready,打开 DevTools Network 标签:被阻止的 jsDelivr 请求指向 CDN 或内容过滤器问题,而缓慢增长的模型文件意味着权重下载仍在进行。用 Ctrl+C 停止 Vite。

不需要提供商凭证

模型在你的浏览器中执行,而不是通过托管推理 API。这个课程没有 .env 文件或 API 密钥需要配置。

Juno运行 Transformers.js 项目 运行 npm install,然后 npm start,打开 Local URL,等待状态到达 Ready 后再选择任何东西。第一次模型下载就像搬家:慢一次,然后就完成了。我曾经早早点击,假设自己把它搞坏了,所以给它一些时间。
Juno运行 Transformers.js 项目 三样东西按顺序加载:Vite 提供页面,jsDelivr 提供库,模型权重下载到浏览器在那里运行。第一次加载受网络限制,所以状态缓慢通常意味着下载在进行,不是 bug。等待 Ready,然后检测。
Juno运行 Transformers.js 项目 第一次加载受网络限制;此后每次加载都来自浏览器缓存。当 Ready 一直没出现时,DevTools Network 标签能解决问题:被阻止的 jsDelivr 请求是 CDN 或内容过滤器问题,而缓慢增长的模型文件是权重卡住了。我在责怪模型前先检查那个标签,这堂课曾经让我浪费过一小时。

修复并运行 Ollama 项目

在你的电脑上下载并运行 AI 模型与 Ollama 使用这些说明。导出的 ZIP 包含课程的 Node 代码,但其生成的 package.json 仍然描述的是一个 Vite 项目。不经过一个小的包修复就无法在本地运行。

安装 Ollama 后,确保其本地服务在运行。下载课程代码指定的模型:

bash
$ ollama pull mistral
$ ollama ls

第二个命令应该列出 mistral。取决于你的操作系统,打开 Ollama 应用会自动启动服务。如果没有,在单独的终端运行 ollama serve 并保持它运行。

在提取的项目中,添加 "type": "module" 作为 package.json 的顶级属性,作为 "scripts" 的同级:

json
{
  "type": "module",
  "scripts": {
    "start": "vite"
  }
}

然后把启动脚本从:

json
"start": "vite"

改为:

json
"start": "node index.js"

安装 index.js 导入的两个依赖:

bash
$ npm install express ollama
$ npm start

服务器会打印:

text
Server is running on port 3000

测试不调用模型的路由:

text
http://localhost:3000/

它应该要求你提供一个 question 参数。然后试试真正的本地模型请求:

text
http://localhost:3000/?question=Why%20is%20the%20sky%20blue%3F

Express 服务器等待 Ollama 加载模型并生成响应。第一次响应可能明显较慢。用 Ctrl+C 停止 Express。当你不再需要时,用 Ctrl+C 停止单独启动的 ollama serve 进程。

两个项目都不需要提供商 API 密钥或 .env 文件;模型权重和推理留在运行 Ollama 的机器上。课程的托管模型项目工作方式不同:在本地运行代理 展示了它们需要的密钥和 .env 设置。

Juno修复并运行 Ollama 项目 拉取 mistral 模型,保持 Ollama 运行,然后修复 package.json:添加模块类型并让启动脚本指向 node index.js。安装 expressollama,启动服务器,在 3000 端口问它一个问题。第一次答案缓慢意味着模型在加载,不是有什么东西坏了,我希望第一次的时候有人告诉我这个。
Juno修复并运行 Ollama 项目 这里两个进程协作:Ollama 提供模型,Express 暴露课程路由。ZIP 随附 Vite 格式的包元数据,所以添加模块类型并重新指向启动脚本以匹配 Node 入口点,然后安装两个导入。如果请求挂起,检查两个进程中哪一个停了。
Juno修复并运行 Ollama 项目 导出描述的是错误类型的应用,所以包编辑是修复,不是优化:ESM 模块类型加上 Node 启动脚本。即使修复后,Express 也只在 Ollama 单独运行且 mistral 已拉取时才能应答;服务器永远不会为你启动模型服务。权重加载时预期第一次推理是最慢的。

故障排查

Transformers.js 页面一直停留在 Loading model... 检查浏览器控制台和网络连接。内容过滤器或受限网络可能会阻止 jsDelivr 或模型下载。尝试使用当前浏览器并有足够的空闲存储和内存。

Ollama 项目说 Cannot find package 'express''ollama' 在包含 package.json 的文件夹中运行 npm install express ollama

Node 说 Cannot use import statement outside a module 添加 "type": "module"package.json

npm start 启动 Vite 或抱怨缺少 index.html 把启动脚本改为 node index.js。Ollama 课程是 Node 服务器,不是 Vite 页面。

路由无法连接到 Ollama: 确认 Ollama 应用或 ollama serve 在运行,然后用 ollama ls 确认 mistral 模型已安装。

端口 3000 已被占用: 停止其他进程或改变 index.js 中的 port 常量,重启 Express,打开匹配的 URL。

Juno故障排查 把修复与项目匹配:对于 Transformers.js,看浏览器的网络活动和 Console;对于 Ollama,检查包修复、安装的模型、运行的服务和端口。这里大多数错误来自一个缺失的步骤,不是电脑坏了。我说这话是作为一个曾因为一个打字错误而重新安装 Node 的人。
Juno故障排查 在改变任何东西之前确定哪个运行时失败了:Vite 和浏览器资源属于 Transformers.js 项目,而 Node、Express 和 Ollama 服务属于另一个。读取错误来判断它提到的是哪个世界,然后运行那个项目的检查清单。应用到错误项目的修复通常会产生新错误。
Juno故障排查 对于 Transformers.js,问题在下载或浏览器内存。对于 Ollama,按顺序遍历链:Node 接受模块语法,Express 拥有 3000 端口,服务在运行,mistral 出现在 ollama ls 中。后期症状通常是早期断裂伪装成的。