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 同步、插件启用、多用户也没有验证,不作结论。











