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