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

By [payson](https://paragraph.com/@payson) · 2023-04-14

---

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

我们可以使用 [API keys](https://platform.openai.com/account/api-keys) 的方式使用 [GPT-3.5](https://platform.openai.com/docs/models)（目前 [GPT-4 API](https://openai.com/waitlist/gpt-4-api) 并未大范围开放），只需要在 [GitHub](https://github.com/) 上挑选一个适合自己的 Web 页面就行。

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

打开 [GitHub](https://github.com/) 并搜索 chatgpt web ，我们选择 stars 数较多的项目搭建，这里以 [ChatGPT-Next-Web](https://github.com/Yidadaa/ChatGPT-Next-Web) 为例，基本上满足了我的使用场景。

![](https://storage.googleapis.com/papyrus_images/7c970ffe5fa571b86ef0a7fd7202911ec6e68ac86cc26002e9f393d1e774223a.webp)

Docker 搭建是最方便的方法，如果你搭建在公司的内网，因为 OpenAI 的 API 在国内是无法直接访问，所以需要一个代理，可以在局域网的任何一台机器是上，推荐使用 [Surge](https://nssurge.com/) 或 [Clash](https://github.com/Fndroid/clash_for_windows_pkg/releases)，这样也可以通过控制台查看网络质量。或者也有更简单和安全的方式：gost

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

以下命令以 Debian 为例：

安装 Docker

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

运行程序，其中 OPENAI\_API\_KEY 通过[打开 OpenAI 后台](https://platform.openai.com/account/api-keys)创建，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](http://ip%E5%9C%B0%E5%9D%80:3000) 或者配置的域名即可访问；

![](https://storage.googleapis.com/papyrus_images/ece745daa8f08a1d01a41ea0c1d6c5b2420c781753a3d15f1859d7e2f090b863.webp)

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

*   默认修改为 Enter 键发送信息；
    
*   默认关闭发送预览气泡；
    

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

    submitKey:SubmitKey.Enter as SubmitKey,
    sendPreviewBubble: false
    

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

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

---

*Originally published on [payson](https://paragraph.com/@payson/api-chatgpt-offline-medium)*
