利用 API 反向代理搭建 ChatGPT 镜像站简单实现方式

发布于:2025-03-08 ⋅ 阅读:(127) ⋅ 点赞:(0)

写在前面:
由于一些原因,不能直接使用gpt、claude等模型,因此,国内有很多镜像站开始出现。
在这一过程中,出现了很多术语,例如api转换、反代、抓cookie等。然后我看了下,对于一些初学者而言,网上好像并没有比较好的解释。因此,就有了这份报告,主要是镜像站背后的技术原理,不涉及具体实现,适合初学者或者相关感兴趣的从业人员。
另外,还有一个比较有意思的话题是这些镜像站的成本与盈利模式,可以作为一个商业观察的通道,也可以通过镜像站的发展去推测AI产业的相关发展。这个有时间可以做一下。

镜像站的常见实现方式

① 基于 API 反向代理(主流方案)

例如:AICNN

  • 原理:该方案通过在境外部署服务器,转发用户请求到 api.openai.com,以隐藏真实的 API 密钥。通过这种方式,用户访问镜像站时并不会直接与 OpenAI 的服务器通信,而是通过中间服务器进行转发,从而保护 API 密钥的安全性,防止泄露。

  • 代码示例(Node.js 代理)

    javascript复制代码app.post('/v1/chat/completions', async (req, res) => {
      const userMessage = req.body.messages[0].content;
      
      // 1. 从池中随机选取一个 OpenAI API Key
      const apiKey = getRandomKeyFromPool(); 
      
      // 2. 转发请求到 OpenAI 官方接口
      const response = await fetch('https://api.openai.com/v1/chat/completions', {
        method: 'POST',
        headers: {
          'Authorization': `Bearer ${apiKey}`,
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({
          model: "gpt-3.5-turbo",
          messages: [{role: "user", content: userMessage}]
        })
      });
      
      // 3. 将响应返回给用户
      const data = await response.json();
      res.send(data);
    });
    
  • 关键优化

    • API Key 轮询池:为了解决 OpenAI API 使用过程中可能出现的请求频繁导致密钥封禁问题,可以通过多个账号的 API 密钥池分摊调用压力。这种做法通过轮流使用不同的密钥,避免单个密钥因超出请求限制而被封禁。
    • 请求缓存:针对一些常见且不变的问题(如“你是谁?”等简单查询),可以对响应进行缓存。当用户请求相同问题时,直接返回缓存内容,减少对 OpenAI 服务器的压力,同时提升响应速度。
    • 流量限制:为了避免滥用 API 服务,镜像站可对免费用户实施流量限制,设定每分钟的请求次数上限。这样可以避免用户通过大量请求来消耗过多的资源,确保公平使用。

在搭建镜像站时,除了后端的 API 转发外,前端的设计和实现也是一个重要部分。大多数镜像站的前端页面都基于官方页面进行修改和定制。这是因为直接复用官网的前端可以大大降低开发难度,并且保证用户界面的熟悉度和一致性。

前端界面复用
  • 原理:镜像站的前端界面通常会基于 OpenAI 等官网的 HTML、CSS、JavaScript 代码进行复制或修改。这样,用户进入镜像站后,界面和功能几乎与官方无异,只是背后的服务器处理逻辑发生了变化,用户仍然能够以熟悉的方式与服务交互。
  • 修改点
    • 接口替换:将前端的请求地址替换为镜像站的后端 API 地址。这样,用户操作界面时发出的请求会被转发到镜像站的服务器,而不是直接发送给 OpenAI 的 API。
    • UI 优化:镜像站可能会根据需求做一些UI上的微调,比如去除一些不必要的功能或者增加广告位等。尽管如此,整体的设计仍然力求保持与官网一致,避免用户在使用过程中产生陌生感。
  • 开发优势:通过这种方式,镜像站不仅可以快速搭建一个用户友好的界面,而且不需要从零开始设计 UI,减少了开发成本和时间。这种“克隆式”开发也使得镜像站能够在短时间内上线并投入使用。
② 网页逆向工程(高风险,已逐渐淘汰)

例如:GitHub - dairoot/ChatGPT-Mirror: 🚀 一键部署个人的 ChatGPT 镜像站

  • 原理解析
    • 该方案通过抓包分析 ChatGPT 网页版的通信协议,直接模拟网页端的请求与响应过程。通过提取和复用 session_tokenaccess_token 等身份认证信息,用户无需输入 OpenAI 的 API 密钥即可访问 ChatGPT 服务,通常也会复用网页版提供的免费额度进行请求。
    • 这种方式通常涉及到直接模拟浏览器行为,利用 Cookie 或 Token 来完成用户登录状态的保持,减少直接请求 API 端口的需要。
  • 缺陷
    • 易被封禁:由于该方法涉及模拟用户登录状态,因此 OpenAI 可以通过检测不常见的 IP 地址或设备指纹来识别并封禁这些非正常访问请求。一旦 OpenAI 发现有大规模的非法请求或者滥用行为,通常会采取封禁措施。
    • 高成本的反爬虫防护:自 2023 年起,OpenAI 在其服务上新增了 Cloudflare 反爬虫技术,这使得通过逆向工程模拟网页请求的成本大幅增加。反爬虫机制能够通过分析请求频率、IP 来源、设备指纹等手段,快速发现并封锁逆向攻击者,因此这一方案逐渐被淘汰。