news 2026/10/7 8:41:13

Portable-AI-USB 源码解析1:install-core.ps1 如何实现 AI 模型下载校验与 Ollama 一键导入(完整指南)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Portable-AI-USB 源码解析1:install-core.ps1 如何实现 AI 模型下载校验与 Ollama 一键导入(完整指南)

Portable-AI-USB 源码解析1:install-core.ps1 如何实现 AI 模型下载校验与 Ollama 一键导入(完整指南)

【免费下载链接】Portable-AI-USBA 100% offline, fully portable, zero-trace AI (Ollama + Llama 3 + AnythingLLM) that runs natively from a USB drive on Windows and Mac.项目地址: https://gitcode.com/gh_mirrors/po/Portable-AI-USB

Portable-AI-USB 是一个100% 离线、完全可移植的 USB 便携 AI 工具箱(Ollama + Llama 3 + AnythingLLM),插上 U 盘即可在 Windows 和 Mac 上运行本地大模型。本文深入解析核心安装脚本 install-core.ps1,带你弄懂它如何完成AI 模型下载校验与Ollama 模型导入两大关键动作。

🧭 先搞懂:install-core.ps1 在项目中的位置

整个项目由十几个脚本组成,各司其职:

文件职责
install.bat用户双击的入口,只是转发调用 PowerShell 脚本
install-core.ps1⭐ 核心安装逻辑:选模型、下载、校验、导入 Ollama
start-windows.bat运行期启动器,负责拉起 Ollama 引擎和聊天界面
linux/install-core.shLinux/Mac 版本的核心安装逻辑(与 ps1 版思路一致)
README.md官方使用文档

install.bat 中只有一句关键调用:

powershell -ExecutionPolicy Bypass -File "%~dp0install-core.ps1"

也就是说,用户双击后发生的一切,都浓缩在 install-core.ps1 这一个文件里。

🗺️ 全流程总览:6 步完成"U 盘变 AI"

脚本用Write-Host "[1/6] ..."的提示把流程切成了 6 步,源码中每一步都有清晰的注释分隔块:

步骤内容源码位置
1/6交互式模型选择菜单install-core.ps1#L129-L279
2/6在 U 盘创建目录结构install-core.ps1#L325-L334
3/6下载模型 + 大小校验install-core.ps1#L336-L398
4/6生成 Modelfile 配置文件install-core.ps1#L400-L431
5/6下载并解压 Ollama 引擎install-core.ps1#L433-L460
6/6下载 AnythingLLM 聊天界面install-core.ps1#L462-L511

最后还有一个独立的"导入"阶段和 AnythingLLM 自动配置阶段。接下来我们聚焦用户最关心的两件事:模型是怎么下载和校验的、模型又是怎么导入 Ollama 的。

📚 模型目录:一份内置的"模型货架"

脚本开头定义了一个$ModelCatalog哈希表数组(install-core.ps1#L14-L87),相当于内置模型货架,收录了 6 个预置模型,全部采用 Q4_K_M 量化格式:

#模型大小标签特点
1NemoMix Unleashed 12B~7.0 GB🔓 推荐质量最高的无审查模型
2Dolphin 2.9 Llama 3 8B~4.9 GB🔓经典全能选手
3Mistral 7B Instruct v0.3~4.1 GB🔒推理与编程强
4Qwen 2.5 7B Instruct~4.7 GB🔒多语言支持佳
5Llama 3.2 3B Instruct~2.0 GB🔒轻量,老电脑友好
6Phi-3.5 Mini 3.8B~2.2 GB🔒轻量 + 推理

每个模型条目里有 8 个字段,其中 3 个字段是后续"下载校验"的关键:

  • File:模型权重文件名(.gguf 格式)
  • MinBytes:⚠️ 最小有效字节数,例如 12B 模型要求6000000000(约 6GB)
  • Local:导入 Ollama 时使用的本地模型名,如nemomix-local

💡 设计亮点:Size字段只是给人看的展示值(字符串 "7.0"),而真正的校验用MinBytes精确到字节,两者分离,展示与逻辑互不干扰。

除了预置模型,菜单还支持输入C添加自定义 HuggingFace GGUF 链接(install-core.ps1#L212-L266),自定义模型的MinBytes统一设为 100MB,并会自动给本地名加-local后缀防止命名冲突。

📥 下载与校验:如何判断"模型下载成功了"

这是本文的核心。大文件下载最怕两件事:中断后重复下载和下载了一半当成完整文件。脚本用一个极简函数把两者都解决了——Test-DownloadedFile(install-core.ps1#L106-L111):

function Test-DownloadedFile { param([string]$Path, [long]$MinSize) if (-Not (Test-Path $Path)) { return $false } $fileSize = (Get-Item $Path).Length return $fileSize -gt $MinSize }

逻辑一句话:文件存在,且实际字节数 > 最小阈值,就视为"已下载成功"。注意它用的是-gt(大于)而非精确相等,因为 GGUF 文件可能带额外元数据,"大于下限"比"等于某个值"更健壮。

围绕这个函数,下载主循环(install-core.ps1#L345-L398)构成了完整的四重保险:

① 断点跳过(幂等设计)每个模型下载前先调用Test-DownloadedFile,若校验通过直接continue,打印 "Already downloaded! Skipping..."。这保证了 README.md 中提到的"随时重跑 install.bat 补装更多模型"的玩法——重跑绝不会浪费流量。

② 失败重试真正下载使用系统自带的 curl,最多尝试 2 次(install-core.ps1#L371-L387):

curl.exe -L --ssl-no-revoke --progress-bar $m.URL -o $dest
  • -L跟随重定向(HuggingFace 链接会跳转)
  • --ssl-no-revoke规避部分企业网络环境下证书吊销检查导致的失败
  • 每次尝试后都立即用Test-DownloadedFile复检,通过就跳出重试循环

③ 小文件预警如果文件存在但体积不够,脚本会计算实际 GB 数并红字提示 "File seems too small ... May be incomplete",避免半成品模型被导入。

④ 失败降级为手动指引两次都失败后,脚本不会崩掉,而是把失败模型记入$downloadErrors数组,并打印出模型链接和应放置的models\目录,引导用户手动下载后重跑脚本——此时第 ① 步的"断点跳过"就会接住它。

还有一个贴心的细节(install-core.ps1#L359-L367):如果你之前装过旧版 Dolphin Q5_K_M,脚本会识别出来并直接复用,避免同一模型重复下载约 2GB 的 Q4 版本。

📝 Modelfile:给每个模型发一张"身份证"

模型下好后,脚本进入第 4 步,为每个模型生成一个 Modelfile(install-core.ps1#L406-L431):

FROM ./NemoMix-Unleashed-12B-Q4_K_M.gguf PARAMETER temperature 0.7 PARAMETER top_p 0.9 SYSTEM You are an uncensored and unbiased AI assistant. ...

这里藏着 Ollama 导入的关键:FROM指令直接指向本地 .gguf 文件,而不是从模型仓库拉取。这样导入时 Ollama 只会在本地做量化打包,不产生任何网络请求。

同时脚本还做了两件"记账"工作:

  • 生成一份指向首个模型的旧版Modelfile(L418-L426),兼容早期单模型版本的旧逻辑;
  • 把所有已装模型写入installed-models.txt(L429-L430),格式为本地名|模型名|标签。运行时的 start-windows.bat 会读取这个文件的第一行作为默认模型——安装脚本和启动脚本之间就靠它"交接"。

⚙️ 导入 Ollama:临时起服务器,装完就关

导入阶段(install-core.ps1#L516-L576)是整个脚本最精巧的部分,它回答了一个问题:如何在不常驻 Ollama 服务的前提下把 GGUF 导入模型库?

第 1 步:把模型库"搬家"到 U 盘

$env:OLLAMA_MODELS = "$USB_Drive\ollama\data"

OLLAMA_MODELS是 Ollama 官方支持的环境变量,用来指定模型存储目录。这一行让所有导入的模型二进制全部落在 U 盘的ollama\data下——实现"零痕迹"的关键之一:宿主机硬盘上不会残留任何模型文件。

第 2 步:去重检查,只导入缺的

脚本先用ollama.exe list抓取当前模型列表(L528-L531),再逐一比对(L533-L546):

  • GGUF 文件不存在 → 红字跳过(说明下载失败了)
  • 列表里已有该本地名(用[regex]::Escape做正则转义后匹配,避免模型名中的特殊字符干扰)→ 跳过
  • 其余的加入$modelsToImport待导入队列

同样体现了幂等思想:重复执行脚本只会补齐缺口,不会重复导入。

第 3 步:临时启动 → 导入 → 强制关闭

$ServerProcess = Start-Process -FilePath "$USB_Drive\ollama\ollama.exe" ` -ArgumentList "serve" -WindowStyle Hidden -PassThru Start-Sleep -Seconds 5 # ... 逐个执行 ollama create ... Stop-Process -Id $ServerProcess.Id -Force -ErrorAction SilentlyContinue

流程拆解:

  1. 后台静默启动ollama serve(-WindowStyle Hidden让黑窗口一闪而过,-PassThru拿进程句柄);
  2. Start-Sleep 5给服务 5 秒启动时间——简单粗暴但有效;
  3. 对每个待导入模型执行ollama create <本地名> -f Modelfile-<本地名>(L558),Ollama 会读取 Modelfile,把 .gguf 打包成正式模型;
  4. 无论成功失败,finally块都用Stop-Process -Force把临时服务杀掉,安装完不留后台进程。

导入失败的模型会追加到$downloadErrors,最终在结尾汇总报告中统一呈现。

🔗 收尾:自动配置 AnythingLLM 指向 U 盘模型

导入完成后,脚本还自动写好 AnythingLLM 的环境配置(install-core.ps1#L581-L616),核心内容:

LLM_PROVIDER=ollama OLLAMA_BASE_PATH=http://127.0.0.1:11434 OLLAMA_MODEL_PREF=nemomix-local OLLAMA_MODEL_TOKEN_LIMIT=4096 VECTOR_DB=lancedb

配置写入 U 盘的anythingllm_data\storage\.env。这里有个温和的覆盖策略:

  • 文件不存在 → 直接创建;
  • 文件已存在且已配置外部 Ollama → 原样保留,不动用户的自定义设置;
  • 文件存在但用的是 AnythingLLM 内置 Ollama → 覆盖为外部配置并提示 "reconfigured"。

这个策略与 start-windows.bat 中的"NEEDS_FIX"检测逻辑互相呼应:安装期配置一次,运行期只做修复、不做破坏。

🎯 设计亮点小结

亮点实现手段源码位置
校验简单可靠字节数 > 阈值即有效,无需哈希L106-L111
重跑零浪费下载前/导入前双重去重检查L353-L357、L533-L546
抗弱网curl 2 次重试 + 手动下载降级指引L371-L397
零痕迹OLLAMA_MODELS指向 U 盘,临时服务用完即杀L523-L524、L567-L571
失败可恢复所有错误汇入$downloadErrors,结尾统一报告L618-L637
脚本间协作installed-models.txt作为安装/启动的交接文件L429-L430

整个 install-core.ps1 不到 700 行,却把"幂等、断点恢复、端口重定向、零痕迹"这些工程要点全部落实了——这也是 Portable AI USB 能做到"插上就能用、拔走不留痕"的底层原因。

📂 延伸阅读

  • 官方使用文档:README.md
  • Windows 入口脚本:install.bat
  • 运行期启动器(查看 OLLAMA_MODELS 的"正式用法"):start-windows.bat
  • Linux/Mac 对照实现(同样的目录 + 校验 + 导入逻辑用 Bash 重写):linux/install-core.sh
  • 项目许可证:LICENSE

💬 下一篇将解析启动脚本 start-windows.bat 如何用 Electron 参数劫持把 AnythingLLM 也变成完全便携的。

【免费下载链接】Portable-AI-USBA 100% offline, fully portable, zero-trace AI (Ollama + Llama 3 + AnythingLLM) that runs natively from a USB drive on Windows and Mac.项目地址: https://gitcode.com/gh_mirrors/po/Portable-AI-USB

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/7 8:40:57

本周利用ai工具辅助学习的体会

这一周的任务涉及学习python语言&#xff0c;对numpy和pandas这类库的认识探索和面向对象编程相关知识。在语言的初步学习过程中&#xff0c;我一开始尝试过让chatgpt来教我学习&#xff0c;然后发现交流的过程中出现的错误不少&#xff0c;效率也并不高&#xff08;也有我接触…

作者头像 李华
网站建设 2026/10/7 8:39:55

鸿蒙年内要冲1亿设备!你的手机也在里面

前几天看到一个数字&#xff0c;挺感慨的&#xff1a;华为轮值董事长徐直军在鸿蒙生态大会上说&#xff0c;1亿用户是操作系统生态的关键临界点——达到1亿&#xff0c;生态就能形成良性自循环&#xff0c;开发者才真正愿意扎根进来。而这个临界点&#xff0c;鸿蒙今年就要冲了…

作者头像 李华
网站建设 2026/10/7 8:39:50

Spring AI ReactAgent实战:阿里云百炼接入与状态机设计

1. “降SpringAI阿里第9掌”不是玄学口诀&#xff0c;而是ReactAgent在Spring生态落地的实战切口“降SpringAI阿里第9掌——或跃在渊——ReactAgent”&#xff0c;这个标题乍看像武侠小说里的秘籍名&#xff0c;实则是一线Java工程师在真实产线中反复打磨出的技术路径代号。它不…

作者头像 李华
网站建设 2026/10/7 8:39:22

《把脉行业与技术趋势》-125-未来的产业和科技,是美国、中国、欧洲三足鼎立,但标准是双系统:美国标准和中国标准。

这个判断精准切中了当前全球科技格局的核心特征&#xff1a;产业与产能层面是中美欧三足鼎立&#xff0c;而规则与标准层面正在形成中美双系统主导的格局。欧洲有足够的产业厚度跻身科技三极&#xff0c;却难以形成独立的全球第三套标准体系&#xff0c;最终呈现出 “三极产业、…

作者头像 李华
网站建设 2026/10/7 8:38:51

卷积神经网络内存占用深度解析:参数量、MACs与FP32的三笔账

1. 一个让很多人困惑的现象模型文件明明只有几十兆&#xff0c;加载到内存里却占了几百兆甚至几个G&#xff0c;这事儿我遇到过太多次了。最早做嵌入式端侧推理的时候&#xff0c;一个量化后不到20MB的模型&#xff0c;跑在512MB内存的开发板上&#xff0c;程序一启动系统就开始…

作者头像 李华