本地跑大模型这件事,难的一直不是模型本身。下载一份 GGUF 权重只是开头,后面还要找推理后端、调线程数和上下文长度、起一个兼容 OpenAI 的接口,再找到一个能同时管模型、管会话、管提示词的窗口。这套东西每换一台机器就要再拼一遍,散在四五个工具里的配置谁也没法整体迁移。
Jan 把这些收进了一个桌面客户端。本次收录的是 v0.8.8,基于 Tauri 2 + Rust 外壳 + React 19 前端,Apache-2.0。它的分工很明确:推理交给本地 llama.cpp 扩展,界面负责会话、模型中心、本地接口服务和 MCP 工具这几块。我按源码把前端完整构建了一遍——依赖安装 7 分 33 秒,七个 tauri 插件构建 9 秒,核心与扩展构建 4 秒,前端生产构建 60 秒产出 559 个文件;预览服务起来后首页 HTTP 200,四个页面巡检下来 0 个 4xx/5xx、0 个页面级 JS 错误。
先说清楚边界:它适合想把模型权重和会话都留在自己机器上、又不想自己拼推理服务的人;不适合指望装完就能对着满血模型聊天的人——它不自带模型权重,首次启动还要联网拉推理引擎;Linux 上它是 ELF 可执行文件,没有图形界面的机器上起不来。下面按我实际跑过的顺序写,数字都来自当次运行。
Jan 是什么
一句话:一个可以完全落在本机的桌面 AI 客户端,模型、会话、推理后端都在你自己的硬盘上。
- 项目名:Jan,本次收录版本 v0.8.8
- 许可:Apache-2.0
- 形态:Tauri 2 桌面应用,Rust 外壳 + React 前端 + 本地 llama.cpp 扩展
- 平台:Windows 64 位、macOS 通用包、Linux amd64
- 体积:成品包 10.30 MB,解压后 1954 个条目,其中源码文件约 275 MB
- 构建链:yarn 4.5.3 工作区 + Vite 6.3.2,桌面包由 cargo 编译
- 数据:不需要数据库服务,消息、下载的模型和配置都在本地应用数据目录
按界面上的分区把功能过一遍,全部来自截图与构建产物:
- 会话:新建对话、项目(Projects)、全局搜索,快捷键 Ctrl+N / Ctrl+P / Ctrl+K
- 模型中心:内置模型列表,可按大小、量化档位下载到本地,模型文件落在本机
- 推理:本地 llama.cpp 扩展,加载 GGUF 权重直接跑,不经过任何外部服务
- 接入:设置里有本地接口服务(Local API Server)、HTTPS 代理、模型提供方三项
- 工具:MCP 服务器、附件、联网搜索各占一个设置项,MCP 与 Claude Code 两项在截图里仍标着 Experimental
- 外观与语言:亮色基础界面,语言可在设置里切换
和纯聊天客户端差在哪
同类工具不少,分工上其实是三档:
- 托管网页版:会话在别人的服务器上,内网模型接不进来,断网即失
- 只连云模型的桌面客户端:界面很顺,但推理发生在服务商那边,本地只是一个输入框
- 本地推理引擎(llama.cpp 一类):能跑,但没有会话管理、模型下载和界面,全靠命令行
- Jan:引擎、模型下载、会话和界面收在一个客户端里,权重不出本机
差别落在三点:推理在哪台机器上跑、模型文件归谁、断网之后还能不能开工。前两点决定隐私与长期成本,第三点决定它能不能进内网。
我的测试环境
- 系统:Windows 11 64 位;Linux 侧在 WSL2 Debian 13(x86_64,glibc 2.41)内验证
- 实测时间:2026-11-04
- 运行时:Node.js v22.22.2、yarn 4.5.3;本机未装 Rust,桌面外壳未编译
- 源码:tag v0.8.8 的归档,242,703,783 字节,解压出 2,770 个文件、287,672,248 字节
- 截图:桌面视口 1400×900 四张,窄屏视口 390×844、2 倍像素比两张,实际输出 780×1688
- 未验证项:没有编译 Rust 桌面包,没有做长会话与多模型并发压测,性能数字只来自构建、预览与页面巡检
安装:Windows 从源码构建
这几步的顺序有讲究,顺序错了会在前端构建那一步报错。
- 解压成品包,进入 Jan离线AI客户端-v0.8.8 目录,这里就是项目根目录
- 启用 yarn 4,根目录的配置把版本钉死在 4.5.3
- 装依赖、构建插件、构建前端
corepack enable
corepack prepare yarn@4 --activate
yarn install
yarn build:tauri:plugin:api
yarn workspace @janhq/tauri-plugin-hardware run build
yarn build:extensions
yarn workspace @janhq/web-app build依赖安装这一步实测 7 分 33 秒,装进 1,813 个包,体积 +876.27 MiB;七个 tauri 插件(agent-tools、hardware、llamacpp、mlx、rag、vector-db、websearch)的 JS 侧构建 9 秒;核心与七个扩展构建 4 秒,core 产出 189 个文件 270 KB,llamacpp 扩展 dist/index.js 161 KB。
前端构建 60 秒,vite 本体占 41.43 秒,产出 dist 下 559 个文件共 26.24 MB。想在本机出安装程序再加一步 yarn build,前提是装好 Rust 1.98 与 Tauri 的系统依赖:Windows 需要 WebView2 与 VS 生成工具。这一步我本机没有 Rust 环境,没有跑。
安装:Linux
Linux 侧的构建步骤与 Windows 一致,把命令换成 bash 即可:
corepack enable
corepack prepare yarn@4 --activate
yarn install
yarn build:tauri:plugin:api
yarn build:extensions
yarn workspace @janhq/web-app build桌面端要另外装 GTK 与 WebKitGTK 的开发包(libwebkit2gtk-4.1-dev、libgtk-3-dev 一类),再 yarn build 出 AppImage 或 deb。成品包里另带一份 amd64 的 AppImage 可作对照:669,769,728 字节,文件头是 ELF 8 字节。它在没有 FUSE 的环境里要先 --appimage-extract 解包再运行,解包后的主程序同样要有图形环境。
按「开发机不装重依赖」的口径,Linux 这一侧我只做了前端产物的探活:把 Windows 构建出的同一份 dist 复制进 WSL2,用静态服务跑起来,首页 HTTP 200,耗时 0.0053 秒,返回 3,929 字节,HTML 与 Windows 侧逐字一致。
上手:从引导页到第一次对话
- 起一个本地预览看界面:
node web-app/node_modules/vite/bin/vite.js preview --port 1430,浏览器打开 127.0.0.1:1430 - 首次进入是四步引导,第一步写明它会下载推理引擎和一个小型文件检索模型,点「Let's start」开始
- 进 Hub,在模型列表里选一个本地模型,点下载,选好量化档位,文件直接落到应用数据目录
- 回主界面新建对话,选刚下载的模型就能开聊
- 想让别的程序调用这套模型,去「设置 - 本地接口服务」把它打开,界面上会给你一个本机端口
要接云端的模型服务,就在设置底部的模型提供方里加一项,填接口地址和密钥。本地模型和云端模型可以在同一个会话列表里混着用。
实测数据
- 源码归档:242,703,783 字节,约 231.46 MB,解压 3 秒,2,770 个文件、287,672,248 字节
- 成品包:10.30 MB,1954 个条目,web-app 1174 个、src-tauri 470 个、core 108 个、extensions 78 个
- 依赖安装:7 分 33 秒,1,813 个包,+876.27 MiB
- tauri 插件构建:9 秒,7 个插件全部产出 dist-js
- 核心与扩展构建:4 秒,core 189 个文件 270 KB,llamacpp 扩展 161 KB
- 前端生产构建:60 秒,vite 本体 41.43 秒,12,672 个模块,dist 559 个文件 26.24 MB
- 预览探活:Windows 首页 HTTP 200、3,929 字节;WSL2 同一份 dist 200、0.0053 秒
- 页面巡检:桌面四页 + 窄屏两页,HTTP 4xx/5xx 0 条,请求失败 0 条,页面级 JS 错误 0 条
- 控制台报错:8 条,全部是同一条「Failed to sync model param defaults」
界面长什么样
主界面是左侧导航加右侧内容区,导航只有五项,字号克制,浅灰底:

设置页把功能分成了三组:通用项、Experimental 标记的集成项,以及竖排的模型提供方列表。应用版本、自动更新、数据目录、日志、语言都在第一组:

Hub 是模型中心,顶部只有一个搜索框、排序和「已下载」开关,每条模型卡片写着参数量、体积、量化档位和下载按钮:

会话区在没有下载模型之前一直是空的,引导卡片会固定在中间,下面那一屏就是新建对话时的样子:

窄屏下同一套导航与引导会重排,卡片纵向堆叠,这一张是 390 宽视口下的引导页:

Hub 在窄屏下改为单列卡片,描述文字截断成一行,下载按钮留在原位:

需要说明的是,它是桌面客户端,窄屏这两张是把视口压窄之后的效果,手机上的实际体验不在本次实测范围内。
一个真实的坑
第一次在纯浏览器里起预览,控制台连着写了八条同样的报错:
Failed to sync model param defaults: TypeError: Cannot read properties of undefined (reading 'invoke')原因不在构建。Jan 的界面平时跑在 Tauri 自己的 WebView 里,取值、读文件、拉起推理引擎都走桥接对象;换成普通浏览器打开,那个对象不存在,读取 invoke 就报 undefined。页面本身照常渲染,Hub 里的模型列表也是真实数据,所以这八条当作使用方式带来的噪声看即可,真正跑桌面版不会出现。
第二个坑更容易把人卡住,在第 2 步:yarn install 刚装完就直接构建前端,会报一串 TS2307,说找不到 @janhq/tauri-plugin-*-api。这不是依赖没装好,而是插件 JS 侧的接口声明还没生成。先跑 yarn build:tauri:plugin:api 再构建前端就正常了,项目内置的 e2e 依赖准备脚本也是这个顺序。
第三个是界面版本号。设置页里应用版本显示的是 v0.7.6,和外面写的 v0.8.8 对不上。这是前端包的版本号字段没跟上发布节奏,实测如实记录,不影响使用。
上线与长期使用
它是单机客户端,没有「上线」这一步,但有三件长期运行的事值得先想好:
- 模型目录:默认在应用数据目录下,模型动辄 2.5 GB 起,换一块大分区时用设置里的「Change Location」搬过去,别让系统盘被塞满
- 本地接口服务:打开后等于给本机开了一个推理端口,只在内网需要时开,开之前确认监听地址没有暴露到公网
- 更新:默认开机和定时检查更新,想固定一个版本就在设置里关掉自动检查
- 重置:设置最底部有一个红色 Reset,会把模型和会话全部清掉,按之前先确认数据目录备份过
这几类人适合,这几类不适合
适合:
- 想把权重、会话和配置都留在自己硬盘上的人
- 已经有一台带独立显卡或者 16 GB 以上内存的机器,想直接跑 GGUF 量化模型
- 需要给内网其他程序留一个本机推理接口的开发者
- 同时用 Windows 和 Linux,希望两边是同一套客户端
不适合:
- 装完就想聊的人。它不自带权重,首个模型要自己下,最小的也是 2.5 GB
- 完全没有图形环境的服务器。它是桌面程序,命令行里起不来
- 指望完全断网部署的人。首次引导要联网下载推理引擎,得先把这一步在有网的机器上走完
- 需要多人共享会话的团队。它是单机客户端,没有账户体系
常见问题
{collapse-item label="它自带模型吗?"}A:不带。Hub 里列出的模型要你自己选档位下载,单个体积从 2.5 GB 起;也可以把已有的 GGUF 文件放进模型目录让客户端扫描。{/collapse-item}
{collapse-item label="前端构建报 TS2307 找不到 @janhq/tauri-plugin 怎么办?"}A:先跑 yarn build:tauri:plugin:api 生成接口声明,再构建前端。顺序反了就会报这个错,和网络无关。{/collapse-item}
{collapse-item label="浏览器里打开控制台一直报 invoke 相关错误,是坏了吗?"}A:不是。那是界面在普通浏览器里找不到 Tauri 桥接对象的正常反应,跑桌面版不会出现。{/collapse-item}
{collapse-item label="数据存在哪?"}A:消息、下载的模型和配置都在本机应用数据目录,设置页的 Data Folder 能看到具体路径,也能整体搬走,不需要单独的数据库服务。{/collapse-item}
{collapse-item label="能把本地模型接到别的程序里用吗?"}A:可以。设置里有本地接口服务,打开后会暴露一个本机端口,按 OpenAI 兼容格式调用,局域网里的其他工具也能接。{/collapse-item}
源码获取
建议先转存到自己网盘再下载。手机上打开链接点右下角「保存到网盘」,回头在夸克 App 的「我的网盘」里下。