GPT Communicate
基于 ChatGPT Next Web 改造的多人 GPT 对话平台,适合小范围同学、团队或朋友共用一个服务端 OpenAI API Key。项目保留原有聊天界面和浏览器本地会话存储,同时新增账号、独立管理员端、额度、模型倍率、用量记录和 Docker 部署能力。
当前定位
这个项目不是公开商业 SaaS,而是一个轻量自部署工具:
- 任何人可以开放注册。
- 新用户默认
0点,需要管理员分配额度后才能对话。 - 用户只通过服务端配置的
OPENAI_API_KEY对话。 - 管理员端独立运行,默认 Docker 宿主机端口为
32101。 - 管理员账号使用
.env中的ADMIN_ID和密码配置,不存放在用户表。 - 系统记录账号、额度、用量统计和流水,不记录完整聊天内容。
- 聊天记录仍保存在用户自己的浏览器
localStorage中。
原始项目来源:ChatGPT Next Web
功能概览
用户侧
- 注册、登录、退出。
- 登录后才能进入聊天页面。
- 侧边栏显示用户名和剩余点数。
- 有余额时可以正常对话。
- 模型下拉框只显示管理员后台启用的模型。
- 点数不足、模型未启用时会返回中文提示。
- 聊天上下文和历史记录继续保存在当前用户浏览器本地。
管理员侧
- 管理员端和用户端分开运行,Docker 默认宿主机端口分别为
32101和32100。 - 管理员身份通过
ADMIN_ID、ADMIN_PASSWORD或ADMIN_PASSWORD_HASH配置。 - 管理用户列表、状态和额度。
- 给用户加点、减点、设置总点数。
- 查看近期用量记录。
- 配置可用模型、显示名、倍率、排序、启用状态和备注。
- 导出用户余额 CSV、用量明细 CSV、费用分摊 CSV。
额度与计费
- 额度单位为“点”。
- 请求前按
输入 token + 最大输出 token乘模型倍率预留点数。 - 请求成功后按实际估算用量结算,并释放未使用的预留点。
- 请求失败会写入失败记录,并释放预留点。
- token 目前为估算值,适合内部费用分摊,不等同于 OpenAI 官方账单精确值。
隐私边界
数据库保存:
- 用户账号。
- session。
- 用户额度。
- 额度流水。
- 用量统计。
- 模型配置。
数据库不保存:
- 用户完整对话内容。
- 用户上下文历史。
- 用户浏览器 localStorage 中的聊天会话。
技术栈
- Next.js 13
- React 18
- Zustand
- Prisma
- SQLite
- Docker / Docker Compose
本地开发
1. 安装依赖
npm install如果需要严格按锁文件安装,例如 CI 或部署环境,可以使用:
npm ci2. 配置环境变量
cp .env.template .env至少配置:
OPENAI_API_KEY=sk-xxxx
LOCAL_DATABASE_URL=file:./dev.db
DOCKER_DATABASE_URL=file:/app/data/prod.db
APP_MODE=user
ADMIN_ID=admin
ADMIN_PASSWORD=你的管理员密码
HIDE_USER_API_KEY=1
CODE=说明:
- 用户端使用
APP_MODE=user,默认访问http://localhost:32100。 - 本地 npm 命令会自动使用
LOCAL_DATABASE_URL,不用手动切换 Docker 数据库路径。 - 管理端开发时另起一个进程执行
npm run dev:admin。 - 管理员账号只读取
ADMIN_ID和ADMIN_PASSWORD/ADMIN_PASSWORD_HASH,不会从普通用户表提权。 - 平台模式建议保持
CODE=为空,避免原项目访问码逻辑干扰账号系统。 - 平台模式建议保持
HIDE_USER_API_KEY=1,用户不能填写自己的 API Key。
3. 初始化数据库
npm run db:generate
npm run db:migrate
npm run db:seed4. 启动开发服务
npm run dev默认访问:
http://localhost:32100
管理端本地开发可在另一个终端启动:
npm run dev:admin默认访问:
http://localhost:32101
如果在 WSL 或受限环境中遇到端口绑定问题,可以改用:
npm run dev -- -H 127.0.0.1 -p 32100Docker 部署
1. 准备环境变量
cp .env.template .env生产环境建议至少配置:
OPENAI_API_KEY=sk-xxxx
DOCKER_DATABASE_URL=file:/app/data/prod.db
PORT=32100
ADMIN_PORT=32101
ADMIN_ID=admin
ADMIN_PASSWORD=你的管理员密码
HIDE_USER_API_KEY=1
CODE=
BILLING_DEFAULT_MAX_TOKENS=1000可选配置模型初始化:
DEFAULT_MODEL_CONFIGS=[{"model":"gpt-4o-mini","displayName":"GPT 4o Mini","multiplier":1,"enabled":true,"sortOrder":1}]2. 构建镜像
docker compose build3. 启动服务
docker compose up -d默认端口:
用户端: http://localhost:32100
管理端: http://localhost:32101
如果要改宿主机端口:
PORT=39100
ADMIN_PORT=39101然后重新启动:
docker compose up -d4. 查看日志
docker compose logs -f容器启动时会自动执行:
prisma migrate deploy如果配置了 DEFAULT_MODEL_CONFIGS,还会执行模型 seed。
5. 停止服务
docker compose down注意:默认数据库保存在 Docker volume gpt_communicate_data 中,docker compose down 不会删除数据。不要随意执行 docker compose down -v,这会删除 volume 和 SQLite 数据。
生产数据与备份
Docker 生产数据库默认路径:
/app/data/prod.db
备份 SQLite 数据库:
docker compose exec gpt-communicate sh -c 'cp /app/data/prod.db /app/data/prod.db.bak'
docker cp gpt-communicate:/app/data/prod.db.bak ./prod.db.bak恢复时先停止容器,再把备份放回 /app/data/prod.db 对应 volume。恢复前建议保留当前数据库副本。
管理员使用流程
- 配置
.env中的ADMIN_ID和ADMIN_PASSWORD,生产环境也可以改用ADMIN_PASSWORD_HASH。 - 启动用户端和管理端服务。
- 打开管理端,默认地址为
http://localhost:32101。 - 使用管理员 ID 和密码登录。
- 在模型配置中添加并启用可用模型。
- 在用户额度中给用户分配点数。
- 用户有余额后即可在用户端对话。
- 需要对账时导出余额、用量或费用分摊 CSV。
模型配置建议
管理员后台中的模型名必须和 OpenAI API 请求中的模型名一致,例如:
gpt-4o-mini
gpt-5.5
倍率只是本平台内部点数倍率。例如:
- 便宜模型:倍率
1 - 更贵模型:倍率
3 - 特别贵模型:倍率
5
一旦后台存在任意模型配置,系统会进入模型白名单模式:只有后台启用的模型会显示给用户,也只有启用模型可以被代理请求。
常用命令
本地开发:
npm run dev
npm run dev:admin
npm run lint
npm run build数据库:
npm run db:generate
npm run db:migrate
npm run db:deploy
npm run db:seed
npm run db:studioDocker:
docker compose config
docker compose build
docker compose up -d
docker compose logs -f
docker compose down重要环境变量
OPENAI_API_KEY
必填。服务端使用的 OpenAI API Key。
LOCAL_DATABASE_URL
本地 npm 命令使用的 Prisma 数据库连接地址。
LOCAL_DATABASE_URL=file:./dev.dbDOCKER_DATABASE_URL
Docker Compose 使用的 Prisma 数据库连接地址。Compose 会把它映射成容器内的 DATABASE_URL。
DOCKER_DATABASE_URL=file:/app/data/prod.dbAPP_MODE
运行模式。用户端使用 user,管理端使用 admin。
APP_MODE=userADMIN_ID
独立管理端登录 ID,不会匹配普通用户表。
ADMIN_ID=adminADMIN_PASSWORD
独立管理端登录密码。开发环境可以直接配置明文密码。
ADMIN_PASSWORD=change-meADMIN_PASSWORD_HASH
独立管理端登录密码哈希。生产环境建议使用哈希替代明文密码;设置后会优先使用哈希。
ADMIN_PORT
Docker 管理端宿主机端口。
ADMIN_PORT=32101HIDE_USER_API_KEY
建议生产环境设置为:
HIDE_USER_API_KEY=1这样用户不能填写自己的 API Key。
CODE
原项目访问码。当前账号/额度平台模式建议留空:
CODE=BASE_URL
OpenAI 兼容接口地址。留空时使用默认 OpenAI API 地址。
BASE_URL=如果使用兼容代理:
BASE_URL=https://your-openai-compatible-endpointPROXY_URL
容器内网络代理地址。通常留空。
PROXY_URL=DEFAULT_MODEL_CONFIGS
可选。容器启动时初始化模型配置。
DEFAULT_MODEL_CONFIGS=[{"model":"gpt-4o-mini","displayName":"GPT 4o Mini","multiplier":1,"enabled":true}]BILLING_DEFAULT_MAX_TOKENS
当请求没有携带 max_tokens 时,用于额度预留的默认最大输出 token。
BILLING_DEFAULT_MAX_TOKENS=1000测试记录与需求文档
- 需求文档
- 测试记录
当前已知待办
上线前建议继续处理:
- 清理生产日志,尤其是 access code、IP、代理路径等调试日志。
- 浏览器手动测试后台页面、模型下拉框、余额刷新和移动端表格。
- 完成
docker compose up -d后的容器运行复测。 - 配置 HTTPS 反向代理,例如 Caddy 或 Nginx。
许可证
本项目继承原 ChatGPT Next Web 的 MIT License。