搭建基于 API 的 ChatGPT 网页 - Offline - Medium

ChatGPT 当前限制越来越多,注册需要海外手机号,IP 需要使用干净的住宅 IP,支付需要美国信用卡,如果想分享给身边的一些朋友使用还是挺麻烦,不过对于有需要的人,这些目前都不是什么问题,再不济淘宝也可以花钱解决。

我们可以使用 API keys 的方式使用 GPT-3.5(目前 GPT-4 API 并未大范围开放),只需要在 GitHub 上挑选一个适合自己的 Web 页面就行。

我的使用场景是,一部分给公司的同事使用,打开即用,不需要任何验证,公司支付 key 的费用。为了限制公司的同事传播到其他地方,我们可以搭建在内网中。另外一个场景是分享给家人和朋友,这就要求需要搭建在国内可以流畅访问的公网环境中,为了防止滥用,需要设置一些验证,这个验证最好是可以自定义,不需要直接将 key 分享。

打开 GitHub 并搜索 chatgpt web ,我们选择 stars 数较多的项目搭建,这里以 ChatGPT-Next-Web 为例,基本上满足了我的使用场景。

post image

Docker 搭建是最方便的方法,如果你搭建在公司的内网,因为 OpenAI 的 API 在国内是无法直接访问,所以需要一个代理,可以在局域网的任何一台机器是上,推荐使用 SurgeClash,这样也可以通过控制台查看网络质量。或者也有更简单和安全的方式:gost

代理可以参考这一篇文章:

以下命令以 Debian 为例:

安装 Docker

curl -sS https://get.docker.com/ | sh

运行程序,其中 OPENAI_API_KEY 通过打开 OpenAI 后台创建,PROXY_URL 为代理地址,通过代理网络访问 OpenAI API。

场景 1: 内网环境,不需要认证,打开即用;

docker run - name chatgpt-web -d -p 3000:3000 \
 -e OPENAI_API_KEY="sk-za******************n" \
 -e PROXY_URL="http://192.168.1.6:1080" \
 chatgpt-web:letest

场景2:公网环境,需要朋友填入 CODE 验证后才可使用,CODE 可以填写多个,使用逗号隔开,分别发送给不同的人;

docker run - name chatgpt-web -d -p 3000:3000 \
 -e OPENAI_API_KEY="sk-za******************n" \
 -e CODE="VAEv87LtEectGYs7KY" \
 -e PROXY_URL="http://192.168.1.6:1080" \
 chatgpt-web:letest

内网一般 80/443 无限制,可以增加一个 Nginx 转发,通过域名直接访问。

server {
 listen 80;
 server_name chat.abc.com;

 location / {
    proxy_set_header Host $host;
    proxy_cache off;
    proxy_buffering off;
    chunked_transfer_encoding on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 300;
    proxy_pass http://127.0.0.1:3003;
 }
}

4. 浏览器打开 http://ip地址:3000 或者配置的域名即可访问;

post image

搭建后发现,这个项目中默认的配置有点不舒服,简单修改了下,重新封了一个 Docker 镜像。

  • 默认修改为 Enter 键发送信息;

  • 默认关闭发送预览气泡;

修改方法:打开 app/store/app.ts 文件,找到相关的配置

submitKey:SubmitKey.Enter as SubmitKey,
sendPreviewBubble: false

修改后需要你自己编译项目并打包 Docker 镜像,推荐使用 Docker,如果单独运行项目,nodejs 不支持代理的方式请求,比较麻烦。

据我观察,需要 ChatGPT 提高工作效率的人自然会想各种办法解决手机号、IP、支付等问题,翻山越岭也要达到目的,不需要就算呈现到面前,开箱即用也是问几个问题,尝试让 ChatGPT 给一个错误答案,然后说“这玩意不行”。😄