NextChat 接入小鱼API:Docker 与环境变量配置全流程

NextChat(GitHub 上的 ChatGPT-Next-Web)接小鱼API,就三个动作:接口地址填 https://xyuapi.top/v1,API Key 填后台生成的 sk- 令牌,模型下拉里选一个模型名。自部署的走环境变量,直接开网页版的走左下角设置面板,两条路填的是同一批值,能踩的坑也差不多。

NextChat 是什么,两条路线怎么选

NextChat 是什么,接口走哪一套

NextChat 是一个开源聊天客户端,有网页版、桌面端和 Docker 镜像,上游镜像名是 yidadaa/chatgpt-next-web。它能对接好几种接口格式,接小鱼API 时选 OpenAI 兼容 这一套。小鱼API 是 AI API 接入平台(聚合平台),品牌站是 xyuai.cc。接口主地址 https://xyuapi.top/v1,备用地址 https://xyuai.cc/v1,备用这条同时带 /v1beta/ 路径,支持 Gemini 原生格式。

自部署与网页版分别适合谁

两条路线共用的三个值

不管走哪条路,要填的就三个值:接口地址 https://xyuapi.top/v1、API Key(sk- 开头)、模型名(手填,一字不差)。这三个值对上就能聊天,剩下的都是细节。

三个值分别填什么

先填接口地址

地址写完整:https://xyuapi.top/v1。带 https://,带 /v1,末尾不要斜杠。少任何一段都连不上:只写 xyuapi.top 客户端会把请求拼到当前站点上,写成 https://xyuai.cc 拼出来的是品牌站网页地址,不是接口地址。

再填 API Key

Key 是平台后台生成的令牌,sk- 开头,一长串。粘贴之前把前后的空格和换行删掉,相当一部分 401 就是这么来的。令牌一般在后台只完整显示一次,丢了就在后台重新生成一个,别指望从客户端里翻出来。

然后选模型名

NextChat 的模型下拉滚到底有一项叫「自定义模型名」,点它,把 claude-sonnet-4-5-thinking 这样的字符串原样填进去。大小写、连字符、数字都要对,写成 claude-sonnet-4.5-thinking 或者 claude-sonnet-45-thinking 都会报 model not found。模型清单在下面的价格表里,直接复制。

发一条请求验证能不能通

配置完别急着聊长内容,先发一条短消息试。「你好」两三个字就行,几秒内正常回复说明地址、Key、模型名三项都对上了。名字里带 thinking 的模型会先思考再答,首字可能等十几秒,这是正常的,不代表没连上。

curl https://xyuapi.top/v1/chat/completions \
  -H "Authorization: Bearer sk-你的令牌" \
  -H "Content-Type: application/json" \
  -d '{"model":"gemini-2.5-pro","messages":[{"role":"user","content":"你好"}],"stream":false}'

命令行能返回一段 JSON,就说明 Key 和地址本身没问题,剩下的排查都往客户端配置上找。

自部署路线:Docker 与环境变量

一条命令把 NextChat 跑起来

docker run -d --name nextchat -p 3000:3000 \
  -e BASE_URL=https://xyuapi.top/v1 \
  -e OPENAI_API_KEY=sk-你的令牌 \
  -e CUSTOM_MODELS=+claude-sonnet-4-5-thinking,+gemini-2.5-pro \
  -e DEFAULT_MODEL=claude-sonnet-4-5-thinking \
  -e CODE=你的访问密码 \
  -e HIDE_USER_API_KEY=1 \
  yidadaa/chatgpt-next-web

跑完浏览器打开 http://localhost:3000 就是聊天界面。-p 3000:3000 是端口映射,前面那个数字是宿主机端口,想换端口改前面那个,冒号后面的 3000 别动,那是容器里服务监听的端口。

环境变量逐项说明

环境变量填什么作用
BASE_URLhttps://xyuapi.top/v1接口地址,必须带 https:///v1
OPENAI_API_KEYsk-你的令牌平台后台生成的令牌
CUSTOM_MODELS+模型名 逗号分隔控制下拉里显示哪些模型
DEFAULT_MODELclaude-sonnet-4-5-thinking新会话默认用哪个模型
CODE自定义密码访问密码,不设就是空
HIDE_USER_API_KEY1设成 1 后用户看不到 Key 输入框

Vercel 与 Zeabur 用同一套变量

Vercel 导入这个仓库之后,在项目设置的 Environment Variables 页面按同样的变量名一条条加:BASE_URLOPENAI_API_KEYCUSTOM_MODELSCODE。Zeabur 同理,在环境变量面板里加。变量名一字不能差,写成 BASE_URLS 或者 OPENAI_KEY 都不认,加完要重新部署一次才生效。

改完环境变量要重建容器

docker run 后面的 -e 只在容器创建那一刻生效。改完必须删掉旧容器重新跑:docker rm -f nextchat,再执行上面那条 run 命令。用 docker compose 的就改 compose 文件里的 environment 段,然后 docker compose up -d --force-recreate。改完不重建,等于没改。

网页版路线:设置面板手填

设置入口在左下角

打开站点,左下角一排小图标,靠右那个齿轮就是设置。点开之后侧栏顶部是模型选择,往下是「自定义接口」区域,再下面是提示词、超时、导出导入这些高级项。手机浏览器上这块面板会变成全屏。

自定义接口怎么填

勾上「自定义接口」的开关,会展开两个输入框:

填完关掉面板,发一条消息试。这里填的值只存在当前浏览器的 localStorage 里,换设备、换浏览器、清浏览器数据都要重填一遍。

面板里的值会覆盖环境变量

这是卡人最多的地方。站点如果用环境变量配好了,而你又在这个设置面板里手填过一遍,浏览器里那份值优先生效。表现就是:你改了服务器上的环境变量、重建了容器,打开浏览器还是连不上——因为浏览器里存着旧地址和旧 Key。排查办法是把面板里的自定义接口开关关掉,或者把面板里的值改成和新环境变量一致。

网页版也能加自定义模型

模型下拉滚到底有一项「自定义模型名」,点它手动输入。站点如果配了 CUSTOM_MODELS,下拉里会直接列出这些模型名,点一下就能切;没配就只有一个自定义项,每次新建会话都得重新手填一遍模型名,比较烦。

CUSTOM_MODELS 语法与模型清单

CUSTOM_MODELS 的三种符号

语法就三个符号,多个之间用英文逗号分隔:

写成 -all,+gemini-2.5-pro 就是清空默认列表、只留一个。符号写错(比如用了中文逗号)整行可能被直接忽略,表现是下拉里一个模型都不出。

一行加满五个模型

CUSTOM_MODELS=+gemini-2.5-pro,+deepseek-v3.2-thinking,+grok-4.1,+claude-sonnet-4-5-thinking,+claude-opus-4-5-thinking,-gpt-4o

这一行的效果是:下拉里多出五个模型,同时把默认列表里的 gpt-4o 藏掉,避免有人点错模型名报错。想改成中文显示,就把其中几项写成 claude-sonnet-4-5-thinking=写代码,下拉里出现的是「写代码」,发出去的还是真名。

五个模型与按次计费价格

模型名(手填,一字不差)按次计费适合的活
gemini-2.5-pro0.031 元/次长文档阅读、日常问答,量大管饱
deepseek-v3.2-thinking0.049 元/次带思考链的推理,数学和逻辑题
grok-4.10.05 元/次时效性话题、中文写作
claude-sonnet-4-5-thinking0.09 元/次写代码、长文改写,综合表现均衡
claude-opus-4-5-thinking0.12 元/次复杂重构、难缠的 bug,慢但稳

价格按请求次数算,不按 token 算,所以同一次会话里上下文翻倍也不会翻倍扣费。这也是用 NextChat 聊长对话比按量计费省心的原因。

CODE 与 HIDE_USER_API_KEY 怎么配

CODE 是访问密码。不设这个变量时它是空的,谁打开站点都能直接聊,公网部署等于让别人用你的额度。设了之后打开站点要先输密码,验证过才进聊天界面。HIDE_USER_API_KEY=1 是另一个方向的控制:开了之后用户看不到 Key 输入框,只能用你配好的那一份,适合内部统一发放的实例。反过来想让每个人填自己的 Key,就别设这个变量。

报错对照:从现象找原因

地址写错的两类典型

model not found 与 400

下拉里手填的模型名对不上,常见三种:大小写写错、自己加了不存在的后缀(-latest-pro-max 这种)、把两个模型名拼到一起。400 一般是请求体格式问题,在 NextChat 里偶尔出现在模型名那栏填了中文显示名的情况——下拉里显示的文案和实际发出去的模型名是两件事,改名之后要确认发出去的是真名。

401 与 403

401 基本都是 Key 的问题:没填、sk- 前缀丢了、粘贴时带了空格、或者把别家平台的 Key 填了进去。403 更常见于访问密码没输对,或者实例设了 HIDE_USER_API_KEY 而你还在手动传 Key,两边冲突。

代理设置与直连

客户端如果走了系统代理,请求会先送到代理服务器,再回头访问接口地址,很多代理并不放行这个域名,表现就是一直转圈然后超时。建议把客户端的网络设置改成「不使用代理」,走直连。浏览器同理,顺手看一下系统的代理开关和浏览器插件有没有接管流量。

请求超时与流式输出,以及报错速查

思考模型(名字里带 thinking 的那几个)会先想再答,首字出来之前可能静默几十秒。NextChat 默认请求超时偏短,长思考会被判成超时然后断流,界面显示「请求失败」,其实请求还在跑。到设置里把「超时时间」改成 300 秒以上,同时确认流式输出是开着的。

现象大概率原因怎么改
一直转圈不出字走了系统代理改成不使用代理,走直连
model not found模型名拼错从上面的价格表复制模型名
401 未授权Key 错或带空格重新从平台后台复制度令牌
403访问密码没输对CODE 里的密码重开页面
404地址缺 /v1补成 https://xyuapi.top/v1
改了环境变量没反应面板里的值覆盖了关掉自定义接口并清掉旧值
几十秒后报失败请求超时太短超时改到 300 秒以上

会话记录、导出与备份

会话存在浏览器本地

NextChat 的聊天记录默认存在浏览器本地存储里,不在服务器上。换电脑、换浏览器、清理浏览数据,记录就没了。同一台机器换个浏览器也会看不到之前的会话,这不是丢了,是那份数据本来就不在那个浏览器里。给团队部署的时候要提前说清楚这一点,不然总有人来问会话去哪了。

导出与导入设置

设置面板底部有导出和导入。导出的文件里包含全部会话、配置和设置项。换设备之前先导出一次,新设备上导入同一个文件,会话和配置一起过来。养成一个习惯:每次改完接口配置就导出一次,文件丢自己网盘里,比事后重配省事得多。

升级、备份与多用户

升级镜像:docker pull yidadaa/chatgpt-next-web,然后删掉旧容器重新 run,聊天记录存在浏览器里,重建容器不影响。多用户场景建议给每个人单独开一个实例,而不是所有人共用一个——共用一个实例时 Key 是共用的,额度也算在一起,谁用得多看不出来。给团队用的话,每个实例配各自的 CODECUSTOM_MODELS

成本估算与上线前清单

一天大概花多少

按一天聊三十次算:全用 gemini-2.5-pro 是 0.93 元,全用 claude-sonnet-4-5-thinking 是 2.7 元,全用 claude-opus-4-5-thinking 是 3.6 元。实际用起来通常是混着来的:日常问答挂 gemini-2.5-pro,写代码和长文挂 claude-sonnet-4-5-thinking,真卡住了再切到 claude-opus-4-5-thinking。这么混着用,一个人一天两三块钱,比订阅制的盲盒感心里有数得多。

上线前的检查清单

按这份清单走一遍,NextChat 接小鱼API 基本一次就能通,剩下遇到的报错都能在上面的对照表里找到原因。

相关阅读

🚀 想要立即使用?来小鱼API体验全系列AI模型

查看全部产品

支持Gemini / Claude / GPT / Grok / DeepSeek · 国内直连 · 支付宝/微信