使用docker以及vercel搭建NextChat—好用的AI聊天服务

Lincol29 2024-10-13 15:31:06 阅读 80

前言

nextchat是一个目前非常流行的 AI 聊天服务,支持许多的 AI 模型供应商。如:支持 GPT3、GPT4 和 Gemini Pro。

学习网站文章更全:Lincol29'S Blog 

如果文章信息错误或过时,请移步至我的博客:https://www.lincol29.cn

内容更新仅在个人博客可见(请到我的博客获取第一手信息),欢迎关注!

可以点击直接使用。基础界面如下:

image-20240916105334402

https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web 在 Github 非常受欢迎,当时也是看重 Star 数很多,就选择部署 NextChat。

image-20240916105500866

谈一谈为什么我推荐 NextChat?

1、先入为主的概念,第一次搜索到就被吸引了。

2、在上文中也提到 github 的 start 数量非常多,更新很活跃。

3、有较多的面具和插件可支持使用

4、支持 docker 部署

5、支持许多常用的 AI 模型。例如我正在使用的:<code>gpt-4o、gpt-4o-min

准备工作

拥有 Open API key。如果没有官网的,可以使用代理商:(目前 lincol29 正在使用,注册即送一美金的使用资格。小伙伴可以先试试,如果觉得性价比好,可以通过 lincol29 推广链接进行注册。)域名(可选)服务器或者 NASdocker

一、使用 Vercel 部署 NextChat

1、在 github 界面点击 Fork NextChat 项目

image-20240916110607946

2、打开vercel,点击 Add New – Project

image-20240916110810178

3、导入 NextChat 的 github 项目

记得在环境变量页填入 API Key 和 CODE;

类似这个样子,自行填写即可。

image-20240916111056645

4、解析到自己的域名(可选)

目前 Vercel 分配的域名 DNS 在某些区域被污染了,绑定自定义域名即可直连。

image-20240916111306188

至此,已经部署完成,可以使用域名进行访问。

二、使用 docker 部署 NextChat

Docker 版本需要在 20 及其以上,否则会提示找不到镜像。

⚠️ 注意:docker 版本在大多数时间都会落后最新的版本 1 到 2 天,所以部署后会持续出现 “存在更新” 的提示,属于正常现象。

如果你已经拥有第三方 API 代理,请直接跳转 docker 部署

1、指定 proxy 代理 – 第三方 API 供应商 turboai

TurboAI 为您提供全面的 AI 模型接口代理服务,以支持您的软件和应用程序,助您轻松应用领先的 AI 技术。提供反向代理的 API 接口,无需境外网络环境即可便捷访问 OpenAIClaudeMidjourney 等 AI 模型,在自然语言处理、图像识别、智能推荐和自动问答等不同场景中发挥作用。高度自由的 API 管理,可根据您需求轻松创建 API key 并管理使用金额,仅需修改接口地址为 <code>https://api.turboai.io(国外)/https://api.turboai.one(国内) 即可快速使用。多种渠道来源 *,官方 / Azure / 逆向等渠道,不同渠道享受不同折扣,可随时在令牌页面切换,详情请查看。

(目前 lincol29 正在使用,注册即送一美金的使用资格。小伙伴可以先试试,如果觉得性价比好,可以通过 lincol29 推广链接进行注册。)

TurboAI 拥有颜值非常顶的仪表盘

image-20240916145450433

TurboAI 的模型价格表

image-20240916145334762

可以通过日志查看模型使用情况,能了解每次对话产生的 token 以及费用。

image-20240916145751310

如果你是小白,不想动手。可直接使用 TurboAI 已经安装好的三个服务进行使用。(新手推荐)

NextChat 、LobeChatMidjourneyProxy

直接点击 playground , 选择服务商。

image-20240916145910409

2、docker-compose 部署 NextChat

防火墙放行端口

<code>ufw allow 3219/tcp

   

创建工作目录

work=/docker/nextchat && mkdir -p $work && cd $work

   

创建 docker-compose.yml 文件

vim docker-compose.yml

   

将以下代码复制进 yml 中

version: '3'
services:
chatgpt-next-web:
container_name: nextchat
image: yidadaa/chatgpt-next-web:latest
restart: always
ports:
- "3219:3000"
environment:
- OPENAI_API_KEY=sk-xxx #你的api key
- CODE=995415ada #密码
- BASE_URL=https://xx.xx.io #第三方代理地址
- DEFAULT_MODEL=gpt-4o-mini #默认模型
- ENABLE_BALANCE_QUERY=1 #启用余额查询

   

点击 查看环境变量含义

上线服务

docker-compose up -d

   

使用 ip + 端口即可访问了。

如果你按照我的配置文件搭建的 nextchat,那么会提示你需要使用密码访问。输入你配置文件中的 CODE 即可

image-20240916144503635

现在就可以愉快的使用了,先向他提问吧。鲁迅和周树人谁更聪明呢?

image-20240916144423624

3、环境变量

<code>OPENAI_API_KEY (必填项)

OpanAI 密钥,你在 openai 账户页面申请的 api key,使用英文逗号隔开多个 key,这样可以随机轮询这些 key。

CODE (可选)

访问密码,可选,可以使用逗号隔开多个密码。

警告:如果不填写此项,则任何人都可以直接使用你部署后的网站,可能会导致你的 token 被急速消耗完毕,建议填写此选项。

BASE_URL (可选)

Default: https://api.openai.com

Examples: http://your-openai-proxy.com

OpenAI 接口代理 URL,如果你手动配置了 openai 接口代理,请填写此选项。

如果遇到 ssl 证书问题,请将 BASE_URL 的协议设置为 http。

DEFAULT_MODEL (可选)

更改默认模型

HIDE_USER_API_KEY (可选)

如果你不想让用户自行填入 API Key,将此环境变量设置为 1 即可。

DISABLE_GPT4 (可选)

如果你不想让用户使用 GPT-4,将此环境变量设置为 1 即可。

ENABLE_BALANCE_QUERY (可选)

如果你想启用余额查询功能,将此环境变量设置为 1 即可。

三、使用 NextChat

什么是面具?它和提示词的区别是什么?

面具 = 多个预设提示词 + 模型设置 + 对话设置。

其中预设提示词(Contextual Prompts)一般用于 In-Context Learning,用于让 ChatGPT 生成更加符合要求的输出,也可以增加系统约束或者输入有限的额外知识。

模型设置则顾名思义,使用此面具创建的对话都会默认使用对应的模型参数。

什么是历史摘要?

历史摘要功能,也是历史消息压缩功能,是保证长对话场景下保持历史记忆的关键,合理使用该功能可以在不丢失历史话题信息的情况下,节省所使用的 token。

由于 ChatGPT API 的长度限制,我们以 3.5 模型为例,它只能接受小于 4096 tokens 的对话消息,一旦超出这个数值,就会报错。

同时为了让 ChatGPT 理解我们对话的上下文,往往会携带多条历史消息来提供上下文信息,而当对话进行一段时间之后,很容易就会触发长度限制。

为了解决此问题,我们增加了历史记录压缩功能,假设阈值为 1000 字符,那么每次用户产生的聊天记录超过 1000 字符时,都会将没有被总结过的消息,发送给 ChatGPT,让其产生一个 100 字所有的摘要。

这样,历史信息就从 1000 字压缩到了 100 字,这是一种有损压缩,但已能满足大多数使用场景。

什么时候应该关闭历史摘要?

历史摘要可能会影响 ChatGPT 的对话质量,所以如果对话场景是翻译、信息提取等一次性对话场景,请直接关闭历史摘要功能,并将历史消息数设置为 0。

如果你想节省 token,请调节历史消息数。

image-20240916152440956

当用户发送一条消息时,有哪些信息被发送出去了?

当用户在对话框输入了一条消息后,发送给 ChatGPT 的消息,包含以下几个部分:

系统级提示词:用于尽可能贴近 ChatGPT 官方 WebUI 的使用体验,可在设置中关闭此信息;历史摘要:作为长期记忆,提供长久但模糊的上下文信息;预设提示词:当前对话内设置的预设提示词,用于 In-Context Learning 或者注入系统级限制;最近 n 条对话记录:作为短期记忆,提供短暂但精确的上下文信息;用户当前输入的消息。

问题

Q:如果不是国外的服务器,请在 docker 部署的时候添加代理

添加环境变量 <code>- PROXY_URL=http://127.0.0.1:7890

Q:使用时提示 “现在是未授权状态,请在设置页输入访问密码”?

项目通过环境变量 CODE 设置了访问密码。第一次使用时,需要到设置中,输入访问码才可以使用。

Q:最好不要使用备案域名

image-20240916141123417

Q : 什么是代理,如何使用

由于 OpenAI 的 IP 限制,中国和其他一些国家 / 地区无法直接连接 OpenAI API,需要通过代理。你可以使用代理服务器(正向代理),或者已经设置好的 OpenAI API 反向代理。

正向代理例子:科学上网梯子。docker 部署的情况下,设置环境变量 HTTP_PROXY 为你的代理地址(例如:10.10.10.10:8002)。反向代理例子:可以用别人搭建的代理地址,或者通过 Cloudflare 免费设置。设置项目环境变量 BASE_URL 为你的代理地址。

Q : 国内服务器可以部署吗?

可以但需要解决的问题:

需要代理才能连接 github 和 openAI 等网站;国内服务器要设置域名解析的话需要备案;国内政策限制代理访问外网 / ChatGPT 相关应用,可能被封。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。