源码湾 源码湾

Jan 离线 AI 客户端 v0.8.8:本地跑 GGUF 模型,不联外网也能聊

源码湾
47分钟前发布
资源信息 Tauri 桌面客户端,本地 llama.cpp 跑 GGUF 模型,模型与会话都在本机。
版本
v0.8.8
授权
Apache-2.0
体积
10.30 MB
语言
TypeScript/Rust
数据库
无
夸克网盘 无提取码 下载

今日下载 0 累计下载 0 还剩 4 个

本地跑大模型这件事,难的一直不是模型本身。下载一份 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 从源码构建

这几步的顺序有讲究,顺序错了会在前端构建那一步报错。

  1. 解压成品包,进入 Jan离线AI客户端-v0.8.8 目录,这里就是项目根目录
  2. 启用 yarn 4,根目录的配置把版本钉死在 4.5.3
  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 侧逐字一致。

上手:从引导页到第一次对话

  1. 起一个本地预览看界面:node web-app/node_modules/vite/bin/vite.js preview --port 1430,浏览器打开 127.0.0.1:1430
  2. 首次进入是四步引导,第一步写明它会下载推理引擎和一个小型文件检索模型,点「Let's start」开始
  3. 进 Hub,在模型列表里选一个本地模型,点下载,选好量化档位,文件直接落到应用数据目录
  4. 回主界面新建对话,选刚下载的模型就能开聊
  5. 想让别的程序调用这套模型,去「设置 - 本地接口服务」把它打开,界面上会给你一个本机端口

要接云端的模型服务,就在设置底部的模型提供方里加一项,填接口地址和密钥。本地模型和云端模型可以在同一个会话列表里混着用。

实测数据

  • 源码归档: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」

界面长什么样

主界面是左侧导航加右侧内容区,导航只有五项,字号克制,浅灰底:

Jan 首次启动的四步引导页与左侧导航

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

Jan 设置页的通用选项、数据目录与语言切换

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

Jan Hub 模型中心的模型列表与量化档位下载入口

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

Jan 会话页,模型尚未下载时停留的引导卡片

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

390 宽视口下的 Jan 引导页

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

390 宽视口下的 Jan 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
  • 完全没有图形环境的服务器。它是桌面程序,命令行里起不来
  • 指望完全断网部署的人。首次引导要联网下载推理引擎,得先把这一步在有网的机器上走完
  • 需要多人共享会话的团队。它是单机客户端,没有账户体系

常见问题

源码获取

建议先转存到自己网盘再下载。手机上打开链接点右下角「保存到网盘」,回头在夸克 App 的「我的网盘」里下。

实测说明

本文截图全部来自本站实测环境(源码湾 yuanmawan.com),实测版本 Jan v0.8.8,许可证 Apache-2.0。

© 版权声明
THE END
喜欢就支持一下吧
点赞 0 分享 收藏
评论 抢沙发
OωO
取消