文档
NextChat
自托管的 NextChat 通过现有的 OpenAI 相关变量连接 Kunavo:OPENAI_API_KEY 存储密钥,BASE_URL 存储来源地址,CUSTOM_MODELS 存储模型 ID。无需分叉项目,也无需修改代码。
三个环境变量 — OPENAI_API_KEY、BASE_URL(裸源地址)和 CUSTOM_MODELS — 让自托管 NextChat 通过一个密钥接入 Claude 与 GPT。
CODE=your-access-password
OPENAI_API_KEY=sk-kn-...
BASE_URL=https://api.kunavo.com
HIDE_USER_API_KEY=1
CUSTOM_MODELS=-all,+claude-sonnet-5@OpenAI,+claude-opus-5@OpenAI,+claude-haiku-4-5@OpenAI,+gpt-5-6-sol@OpenAI,+gpt-5-6-terra@OpenAIBASE_URL 应填写不带路径的来源地址,不含 /v1。文档页面没有直接说明后缀,但其自身的配置项已给出答案:文档中的默认值是 https://api.openai.com,而非 https://api.openai.com/v1——其余路径由 NextChat 自动附加。手动添加的 /v1 会变成 /v1/v1/chat/completions,最终返回 404,看起来像端点故障,而不像输入错误。OPENAI_API_KEY 后,服务器会使用你的密钥调用 Kunavo;任何通过 CODE 的人都会消耗你的余额。HIDE_USER_API_KEY=1 的文档说明为“如果不希望用户输入自己的 API 密钥,请将此值设为 1”——如果不设置此项,每位访客都可以在“设置”中输入自己的密钥,这正是共享实例所需的模式。-all 前缀和 @OpenAI 后缀;该表只涵盖 +、- 和 name=displayName。它们来自同一天读取的 NextChat 自身模型收集代码:-all 会清空内置列表,以免选择器提供 Kunavo 会拒绝的 ID;@OpenAI 会将每个新 ID 固定到 OpenAI 提供商,以便其请求发送到 BASE_URL。如果写入的 ID 不带该后缀,提供商名称就会采用该 ID 本身,并且请求不会通过你配置的路径发送。大小写需保持原样。ENABLE_BALANCE_QUERY 留空:余额检查会调用 OpenAI 自己的仪表板账单路由,这些路由不属于兼容 OpenAI 的接口范围。你的余额信息位于 /app/billing。sk-kn- 开头),并充值 $10 起——调用费用从该余额中扣除,失败的调用不会收费。随后,控制台会打开 NextChat 设置页面。分步操作
- 在
/app/keys创建密钥并复制——它只会显示一次。 - 将
OPENAI_API_KEY设为该密钥,并将BASE_URL设为https://api.kunavo.com。在 Vercel 中,这些是项目环境变量;在 Docker 中,它们是-e标志;本地部署则将它们写入.env.local。 - 将
CODE设为访问密码,否则任何找到 URL 的人都能访问部署,而调用费用会由你的密钥支付。 - 在
CUSTOM_MODELS中列出所需的 ID,每个 ID 都带有@OpenAI后缀,并以-all开头以移除内置模型。 - 重新部署——环境变量由服务器读取,因此 Vercel 项目需要进行新部署,容器则需要重启。单独编辑变量不会改变正在运行的实例。
- 打开应用,在模型选择器中选择一个 ID 并发送消息。如果收到回复,说明这三个变量配置一致。
已于 2026年9月21日 对照 NextChat 的环境变量页面 检查。第三方设置会发生变化;如果这里的字段名称不再与你看到的内容一致,应以该页面为准,而不是本页。
调试客户端前先验证
一个请求即可确定故障来自端点、密钥还是配置文件。如果返回 JSON,则相同的基础 URL 和密钥可以在 NextChat 中使用。
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."字段中应填写哪个模型 ID
每个文本模型都可通过模型 ID 访问——实时列表见 GET /v1/models,包含价格的目录见模型页面。费率单位为每 1M token 的美元,格式为输入 / 输出。
| 模型 ID | Kunavo 输入 / 输出 | 它在 NextChat 中的位置 |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | 日常对话线程——进行长时间对话,无需盯着余额 |
claude-opus-5 | $3.50 / $17.50 | 每周一次、值得使用高价模型回答的问题 |
claude-haiku-4-5 | $0.70 / $3.50 | 摘要、聊天重命名,以及共享实例中占比最高的简短来回对话 |
gpt-5-6-sol | $2.00 / $12.00 | 在同一个密钥下的同一个选择器中添加第二个模型系列 |
gpt-5-6-terra | $0.70 / $4.20 | 粘贴长文档时,上下文窗口是决定性因素 |
常见问题
如何让 NextChat 指向自定义 API 端点?
将 BASE_URL 设为端点的来源地址,并将 OPENAI_API_KEY 设为端点签发的密钥,两者都作为自托管部署的环境变量进行设置。NextChat 自己的环境变量页面将 BASE_URL 说明为“覆盖 OpenAI API 请求的基础 URL”,因此无需修改代码:应用会继续使用 OpenAI 线路格式,只是将请求发送到其他地址。之后请重新部署——这些值由服务器读取,正在运行的实例不会自动获取它们。
NextChat 的 BASE_URL 末尾需要加 /v1 吗?
不需要。NextChat 会自行追加版本段和路由,因此文档中 BASE_URL 的默认值是纯源站地址 https://api.openai.com,而不是 https://api.openai.com/v1。填写 https://api.kunavo.com 即可,不要添加其他内容。自行添加后缀会导致路径重复并返回 404,很容易误以为端点已宕机。
如何将自定义模型添加到 NextChat 的模型列表?
CUSTOM_MODELS 接受逗号分隔的列表,其中 + 用于添加模型,- 用于隐藏模型,name=displayName 用于重命名模型。NextChat 不认识的 id 会立即创建,因此 +claude-sonnet-5@OpenAI 会将该 id 添加到选择器中。有两点值得原样照做:在列表开头加上 -all,这样内置的 OpenAI id 就会被隐藏,避免有人选择后请求失败;保留 @OpenAI 后缀,这样该 id 会通过 BASE_URL 路由,而不是发送给一个以模型命名的提供商。
NextChat 应使用服务器 API 密钥,还是让每位用户粘贴自己的密钥?
两种方式都支持,区别在于由谁付费。OPENAI_API_KEY 中的密钥属于服务器,因此通过 CODE 密码访问的每位访客都会消耗同一笔余额——适合私人实例,用于共享链接则成本可能很高。如果不设置 HIDE_USER_API_KEY,访客可以在“设置”中输入自己的密钥并自行付费;将其设为 1 则会移除该字段。无论哪种方式,除非用户亲自在浏览器中输入密钥,否则密钥都不会传到浏览器。