51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

【实用Docker推荐】搭建NextChat—好用的AI聊天服务

前言

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

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

image-20240916105334402

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

image-20240916105500866

谈一谈为什么我推荐NextChat?

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

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

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

4、支持docker部署

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

准备工作

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

一、使用Vercel部署NextChat

1、在github界面点击 ForkNextChat项目

image-20240916110607946

2、打开vecel,点击 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 并管理使用金额,仅需修改接口地址为https://api.turboai.io(国外)/https://api.turboai.one(国内)即可快速使用。
  • 多种渠道来源*,官方/Azure/逆向等渠道,不同渠道享受不同折扣,可随时在令牌页面切换,详情请查看价格页面

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

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

image-20240916145450433

TurboAI的模型价格表

image-20240916145334762

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

image-20240916145751310

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

NextChatLobeChatMidjourneyProxy

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

image-20240916145910409

2、docker-compose部署NextChat

防火墙放行端口

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、环境变量 {#environmentvalue}

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 的消息,包含以下几个部分:

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

问题

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

添加环境变量 - 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 相关应用,可能被封。

参考资料

Nextchat:nextchat 的官网

https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web:nextchat github 地址

TurboAI : lincol29 目前在用的第三方API供应商。

网站地图 -- Lincol29 : 在这个网站地图中,你可以找到关于C#、常用生产力工具、面试面经、Docker、WordPress、RSS、等各类技术主题的教程和分享,以及对本站内容快速导航。

赞(0)
未经允许不得转载:工具盒子 » 【实用Docker推荐】搭建NextChat—好用的AI聊天服务