ChatGPT-Next-Web 部署后连不上模型?接口配置与排错指南
ChatGPT-Next-Web 是一个开源的 ChatGPT 网页界面,很多人用 Docker 或 Vercel 部署后,打开页面发现不能对话。
核心原因通常不是程序本身,而是接口地址、API Key 或模型名没有填对。
本文以 Docker 部署场景为例,说明配置入口在哪里、该填什么,以及连不上时如何逐步排查。
先确认你的部署方式与配置入口
ChatGPT-Next-Web 支持两种配置途径:环境变量(部署时写入)和页面设置(打开网页后手动填写)。
如果两者都配了,页面设置通常优先生效。
- Docker 部署:通过
-e参数或docker-compose.yml的environment段设置OPENAI_API_KEY、BASE_URL、CUSTOM_MODELS等变量。 - Vercel 部署:在项目 Settings → Environment Variables 中添加同名变量,修改后需要重新部署。
- 页面设置:点击左下角齿轮图标,在「设置」面板中找到「接口地址」「API Key」「自定义模型」等输入框。
关键点:如果你使用的是第三方中转 API,必须同时修改接口地址和 API Key,只改 Key 不行。
填写接口地址、密钥和模型名
打开设置面板,按你的 API 来源填写:
使用 OpenAI 官方 API
- 接口地址留空(默认
https://api.openai.com) - API Key 填
sk-开头的官方 Key - 模型名保持默认,或填写你账号有权限的模型,如
gpt-4o-mini
使用中转 API 服务
- 接口地址填服务商提供的地址,例如
https://api.example.com(注意不要带/v1/chat/completions后缀,程序会自动拼接) - API Key 填服务商给的令牌
- 模型名填服务商支持的模型名,常见如
gpt-3.5-turbo、gpt-4o
如果通过 Docker 环境变量配置,可以这样写:
environment:
- OPENAI_API_KEY=sk-你的密钥
- BASE_URL=https://api.example.com
- CUSTOM_MODELS=+gpt-4o,+gpt-3.5-turbo
修改后执行 docker compose up -d 重建容器,再刷新网页。
连不上时按顺序检查这几点
现象一:页面提示 401 Unauthorized
说明 API Key 无效或未生效。
先检查 Key 是否复制完整,没有多余空格;
中转服务还要确认 Key 是否已过期或被禁用。
可以先用 curl 测试:
curl https://api.example.com/v1/models \
-H "Authorization: Bearer 你的密钥"
返回模型列表说明 Key 和地址都通。
现象二:404 Not Found 或提示模型不存在
多半是接口地址多了或少了路径,或者模型名拼写错误。
接口地址只写到域名或 /v1 级别,不要带完整端点。
模型名要和 API 返回的列表一致。
现象三:页面一直转圈或超时
检查服务器网络能否访问目标 API 地址。
在服务器上执行 curl -I https://api.example.com 看是否返回 HTTP 状态码。
如果服务器在国内且访问官方 API,可能需要配置代理,但不要随意在公网暴露代理端口。
现象四:修改环境变量后不生效
Docker 容器不会自动加载新变量,必须重启容器。
另外,如果之前在页面设置里保存过旧配置,页面设置会覆盖环境变量,需要先在设置面板中清除或改成正确值。
验证对话是否真正连通
配置完成后,新建一个对话,发送「你好」。
如果收到回复,说明链路正常。
但还要确认两点:
- 回复内容是否来自你指定的模型。可以在设置中打开「显示模型名」,或在对话中问「你是什么模型」。
- 多轮对话是否正常。发送第二条消息,看历史上下文是否保留。
如果单次回复正常但多轮报错,通常是 API 服务商对上下文长度或并发有限制,不是前端问题。
容易踩坑的细节
- 接口地址结尾不要加斜杠,某些中转服务对末尾斜杠敏感。
- 自定义模型列表:在
CUSTOM_MODELS中用英文逗号分隔,+表示添加到默认列表,-表示从默认列表移除。写错会导致模型下拉框为空。 - Docker 端口映射:确保
-p 3000:3000映射正确,防火墙放行对应端口,否则页面都打不开。 - HTTPS 混合内容:如果通过 Nginx 反向代理并启用了 HTTPS,确保前端请求的接口地址也是 HTTPS,避免浏览器拦截。
按照以上步骤,绝大多数「部署后不能对话」的问题都能定位。
如果仍然失败,优先查看浏览器开发者工具的 Network 面板,找到失败的请求,根据状态码和响应内容判断是认证问题、地址问题还是网络问题。