NextChat 是一个自己搭的 AI 聊天网页。装好依赖再跑一条构建命令,2 分 02 秒后浏览器里就出现一个对话框。模型下拉和面具列表都在同一个页面里。插件入口也在这一页。它不带账号体系,也不需要服务器数据库,聊天记录写在浏览器的 localStorage 里。这篇在 Windows 上从源码编译到打开页面,把每一步的时间和报错都记下来。

装依赖 725 MB,构建 2 分 02 秒

npm install --legacy-peer-deps     2 分 36 秒,734 个包
npx tsx app/masks/build.ts         与下一条合计 2 分 02 秒
npx cross-env BUILD_MODE=standalone next build
node_modules 体积                  725 MB
.next 体积                         549 MB
首页 First Load JS                 716 kB
共享 chunk 合计                    86.1 kB
静态路由                           / 与 /_not-found 共 2 条
Edge 路由                          /api/[provider] 等 6 条

不加 --legacy-peer-deps 会在 peer 依赖上吵起来,装到一半就停。依赖体积比程序本身大得多,725 MB 里有大量构建期工具,跑起来之后真正发到浏览器的只有那 716 kB。构建产物里 .next/standalone 带了 server.js,拷到别的机器上不用再装依赖也能起。

打开就有点开能用的面具

构建完打开 127.0.0.1:3210 就是一张空对话页,端口起来到能访问是 3 秒。侧栏底部有齿轮。中间一排摆着新聊天和面具两个按钮,插件在更右边一格。面具就是预置好提示词的角色,点一下就开一个新对话,提示词已经替你写好了。不用注册,也不用登录。

清单数量来源文件
中文面具14 条public/masks.json
繁体面具14 条public/masks.json
英文面具4 条public/masks.json
插件3 条public/plugins.json
提示词3 条public/prompts.json

中文那 14 条的名字直接写在清单里:AI文生图 / 文案写手 / 机器学习 / 后勤工作 / 职业顾问 / 英专写手 / 语言检测器 / 小红书写手 / 简历写手 / 心理医生 / 创业点子王 / 互联网写手 / 心灵导师 / 越狱模式。英文只有 4 条:GitHub Copilot / Prompt Improvement / CAN / Expert。想改词就在 app/masks/cn.ts 里改 TypeScript 源文件,改完必须重跑 app/masks/build.ts 才会写进 public/masks.json,不跑这一步页面上的面具永远是你改之前的版本。设置页脚标注的版本是 v2.16.1。

发第一条消息,20 秒后收到超时

操作       新建对话,输入 hello,回车
默认模型   gpt-4o-mini
等待       20 秒
气泡内容   UND_ERR_CONNECT_TIMEOUT

没填任何密钥的情况下,请求会走项目自带的中转域名。返回不是一句客气的「请填写 API Key」,而是一个网络错误,20 秒后直接渲染在聊天气泡里。这一步在 v2.16.1 上稳定复现:只要没填密钥,20 秒后请求必然失败,气泡里读到的就是那行 UND_ERR_CONNECT_TIMEOUT。原因在 Node 侧,它发请求时不读 Windows 的系统代理设置,浏览器能翻出去不代表这个进程能。填了自己的 key 和 base_url 之后,请求就落在你指定的网关上,这条链路才通。

密钥和接口地址在同一个面板里改

要改的东西位置注意
接口地址设置 → 自定义接口填 OpenAI 兼容网关地址,末尾不要带 /v1/chat/completions
密钥设置 → 自定义接口存在浏览器里,换浏览器要重填
模型名对话顶部下拉与网关里的模型名逐字一致,写错就 404
语言与主题设置 → 通用简体中文要手动选
服务商预设constant.ts枚举里 15 项,选中即改请求地址

界面上把「接口地址」放在自定义接口那一栏,跟官方的 15 个预设并列(constant.ts 里 ServiceProvider 枚举 15 项,国内几家都在,含 DeepSeek 与 Moonshot)。国内常见的 one-api、LiteLLM 这类网关都能对接,只要它说 OpenAI 的协议。填完不用重启服务,刷新页面就生效。

对话存在浏览器里,换台机器就没了

存储位置     localStorage
服务端数据库 无
跨设备      需要自己配 WebDAV 或第三方同步
清理缓存     对话一起清掉

它没有后端数据库,所有会话都是浏览器本地数据。同一台机器换浏览器,或者用无痕窗口打开,看到的是 0 条记录。想跨设备同步得在设置里接 WebDAV,自己准备存储。多人共用一套记录的场景不合适。

什么样的用法适合自己搭

场景结论
手里有网关或 key,想要个干净界面合适,构建一次长期用
要给团队共用、带账号权限不合适,没有服务端账号体系
只在浏览器里随手问几句用官方网页更快
想改面具和界面文案合适,源码就在 app 目录

实测范围:Windows 10 22H2(10.0.19045.6466) / Node 22.22.2 / NextChat v2.16.1 / Chrome 1440×900 / 2026-10-21。真实模型对话没有跑通,测试环境没有可用的密钥与网关;WebDAV 同步、插件启用、多用户也没有验证,不作结论。