Table of Contents
- Step 1: 获取 Access Token
- Step 2: 获取 Share Token
- Step 3: 网页版镜像站使用
- (Optional) Step 4: API 使用(Chat2API)
- (Optional) Step 5: 代理 backend-api/public-api(ChatGPT 后端接口)
- 总结(反代姿势):
- 注意:服务器资源问题,以上都只服务 ChatGPT Plus / Teams 账号(不过 Plus 账号的 3.5 可用)。
Step 1: 获取 Access Token
ChatGPT 官方的 Access Token
-
Option 1: https://token.oaifree.com/auth
-
Option 2: 直接登陆官网获取 https://chatgpt.com/api/auth/session
{ "expires": "2024-07-23T04:24:45.080Z", "accessToken": "ey...", "authProvider": "login-web" }
原帖: https://linux.do/t/topic/40591
Step 2: 获取 Share Token
使用 Step 1 获取到的 Access Token 来获取 Share Token。
Share Token 是基于 Access Token 套了一层,更短,更安全,可用来分享。
同一个名字的 Share Token 理论应该是保持不变的,access token 过期之后(7 天),
你需要做的事就是更新这个 Share Token 对应的 Access Token。
x: 获取 Refresh Token (等级够 3 了再说)
-
POST https://token.oaifree.com/api/auth/refresh
curl 'https://token.oaifree.com/api/auth/refresh' -H 'Content-Type: application/x-www-form-urlencoded' -d 'refresh_token=<refresh token here>'
Step 3: 网页版镜像站使用
目前还未支持之前 pandora 的会话隔离,主要是是
Option 1: new.oaifree.com
- 支持 GPTs!
- 可以隔离!
- 可以免墙!
Option 2: demo.oaifree.com (别被始皇这域名误导,此为 pandora classic)
- 不支持 GPTs!
- 但是:轻量速度快!
- 同上!
鉴于始皇这个域名太随意了,建议使用自己的域名反代掉始皇域名!看下面总结的「反代姿势」
登录方式
-
页面输入 Access Token 或 Share Token 登录
-
通过 https://chatfree.xxx.workers.dev/auth/login_share?token=fk-xxx 使用 Share Token 快捷登录
-
使用 https://chatfree.xxx.workers.dev/api/auth/oauth_token 接口创建 OAuth Token 登录。此种方式类似于 Share Token 快捷登录,但是不会泄露 Share Token ,便于集成。登录链接也只能使用一次,3分钟有效。接口使用方法如下:
curl 'https://chatfree.xxx.workers.dev/api/auth/oauth_token' \ -H 'Origin: https://chatfree.xxx.workers.dev' \ -H 'Content-Type: application/json' \ -d '{"share_token": "fk-xxx"}' | jq .login_url
会返回 JSON:
{
"login_url": "https://chatfree.xxx.workers.dev/auth/login_oauth?token=xxx",
"oauth_token": "xxx"
}
访问 login_url 即可直接登录。 这也太好用了!!
原帖: https://linux.do/t/topic/59728
(Optional) Step 4: API 使用(Chat2API)
不用多说了,有个 Plus/Team 基本就够自己个人 API Free 了!(另外用官方 platform API 也容易被封号)。
- Option 1: 直接使用 https://api.oaifree.com/v1/chat/completions
- Option 2: 参考 Step 3 里的方法,同理,你也可以用自己的域名反代 api.oaifree.com
- 频控目前 10/10s (
)
- Team 账号 只需要验证加上 ChatGPT-Account-ID 即可(一串 uuid)
可通过 F12 看 ChatGPT 接口请求 Headers 里的 ChatGPT-Account-ID 找到
测试
model: gpt-4
curl https://apifree.xxx.workers.dev/v1/chat/completions \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer sk-xxx' \
-d '{
"model": "gpt-4",
"stream": false,
"messages": [
{
"role": "user",
"content": "you are ChatGPT based on GPT-3.5 or GPT-4? your knowledge cutoff date is? answer concisely: "
}
]
}' | jq .choices[0].message
{
"role": "assistant",
"content": "I am based on the GPT-4 architecture, and my knowledge cutoff date is December 2023."
}
model: GPTs
curl https://apifree.xxx.workers.dev/v1/chat/completions \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer sk-xxx' \
-d '{
"model": "g-2DQzU5UZl",
"stream": false,
"messages": [
{
"role": "user",
"content": "you are ChatGPT based on GPT-3.5 or GPT-4? your knowledge cutoff date is? answer concisely: "
}
]
}' | jq .choices[0].message
{
"role": "assistant",
"content": "I am based on GPT-4, and my knowledge cutoff date is December 2023."
}
model: whisper
- 支持 whisper,使用 https://api.oaifree.com/v1/audio/transcriptions
model: tts
-
接口地址: https://api.openai.com/v1/audio/speech => https://api.oaifree.com/v1/audio/speech
-
文档地址:https://platform.openai.com/docs/api-reference/audio/createSpeech
model: dall-e
- 图片生成:https://api.openai.com/v1/images/generations => https://api.oaifree.com/v1/images/generations
- 图片编辑: https://api.openai.com/v1/images/edits => https://api.oaifree.com/v1/images/edits
原帖: https://linux.do/t/topic/50789
搭配起来使用
completions + whisper + tts
- https://api.oaifree.com/v1/chat/completions
- https://api.oaifree.com/v1/audio/transcriptions
- https://api.oaifree.com/v1/audio/speech
(Optional) Step 5: 代理 backend-api/public-api(ChatGPT 后端接口)
基于 ChatGPT 后端接口可以糊自己的 UI,也可以获取到一些未开放的数据,比如 GPTs 的详细数据。
-
https://chat.openai.com/backend-api/* => https://chat.oaifree.com/dad04481-fa3f-494e-b90c-b822128073e5/backend-api/*
-
https://chat.openai.com/public-api/* => https://chat.oaifree.com/dad04481-fa3f-494e-b90c-b822128073e5/public-api/*
-
其中 /backend-api/conversation 接口频率 10/10s per IP 对应 1QPS,其余接口没有限制。
curl https://apifree.xxx.workers.dev/backend-api/gizmos/g-2DQzU5UZl/about \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer sk-xxx' \
原帖: https://linux.do/t/topic/53338
总结(反代姿势):
为了方便,我随便糊了两个 Cloudflare workers 反代,仅供参考
- 镜像站:
- 新款(支持 GPTs): chatfree.xxx.workers.dev => new.oaifree.com
- 经典款(不支持 GPTs 但是速度快,配合 fk-xx 完美的会话隔离):classic.xx.workers.dev 或者 pandora.xx.workers.dev => demo.oaifree.com
- 后端 API & Chat2API:
- 获取 fk-xxx(Share Token): https://apifree.xxx.workers.dev/token => there is no wall - 搞七捻三 - LINUX DO
- 后端 Public API: https://apifree.xxx.workers.dev/public-api/* => there is no wall - 搞七捻三 - LINUX DO*
- 后端 Backend API: https://apifree.xxx.workers.dev/backend-api/* => there is no wall - 搞七捻三 - LINUX DO*
- Chat2API:https://apifree.xxx.workers.dev/v1/* => https://api.oaifree.com/v1/*
1. chatfree 镜像站
这个就随便用上面 Step 3 的就行。
新建一个 Worker,粘贴以下代码,部署,然后 Settings > Triggers > Add Custom Domain,填写你的域名(域名 必须解析到 Cloudflare)。
export default {
async fetch(request, env) {
const url = new URL(request.url);
url.host = 'new.oaifree.com'; // 'demo.oaifree.com'
return fetch(new Request(url, request))
}
}
2. 后端 API & Chat2API
在 wokers env vars 里配置下面几个字段食用:
API_KEY
: 随便定义自己的 API Key,比如sk-fucking-real-api-free
;ACCESS_TOKEN
: 暂时没有 Refresh Token, 填入获取到的 Access Token,支持多个账号的 ac, 用,
分割;CHATGPT_ACCOUNT_ID
: 可选,Teams 账号填入账号 uuid;
worker.js
export default {
async fetch(request, env) {
const url = new URL(request.url);
console.log(`Received request for URL: ${request.url}`);
if (url.pathname.startsWith('/v1/')) {
url.host = 'api.oaifree.com';
if (['POST', 'PUT'].includes(request.method)) {
const reqBody = await request.json();
if (reqBody && reqBody.model) {
reqBody.model = reqBody.model.replace('gpt-4-gizmo-', '');
request = new Request(request.url, {
method: request.method,
headers: request.headers,
body: JSON.stringify(reqBody)
});
}
}
} else if (['/backend-api/', '/public-api/'].some(path => url.pathname.startsWith(path))) {
url.host = 'chat.oaifree.com';
url.pathname = `/dad04481-fa3f-494e-b90c-b822128073e5${url.pathname}`;
} else if (['/token', '/static', '/cdn-cgi'].some(path => url.pathname.startsWith(path))) {
url.host = 'chat.oaifree.com';
return fetch(url.toString(), request);
} else {
url.host = 'chat.oaifree.com';
}
const incomingApiKey = request.headers.get('Authorization')?.replace('Bearer ', '');
if (incomingApiKey !== env.API_KEY) {
console.error('Invalid API Key');
return new Response('Invalid API Key', { status: 401 });
}
const tokens = env.ACCESS_TOKEN.split(',');
let retryCount = 0;
while (retryCount < tokens.length) {
const headers = new Headers(request.headers);
let authorizationKey = `Bearer ${tokens[retryCount]}`;
if (env.CHATGPT_ACCOUNT_ID) {
authorizationKey += `,${env.CHATGPT_ACCOUNT_ID}`;
}
headers.set('Authorization', authorizationKey);
for (const key of headers.keys()) {
if (key.toLowerCase().startsWith('x-') && key !== 'x-api-key') {
headers.delete(key);
}
}
url.protocol = 'https:';
url.port = '';
const modifiedRequest = new Request(url.toString(), {
method: request.method,
headers,
body: request.body,
});
console.log(`Attempting fetch with token index ${retryCount}`);
const response = await fetch(modifiedRequest);
if (response.ok) {
console.log(`Request successful with token index ${retryCount}`);
return response;
}
console.warn(`Request failed with token index ${retryCount}, status: ${response.status}`);
retryCount++;
}
console.error('All tokens failed after retries');
return new Response('All tokens failed', { status: 401 });
},
};
更新
- 05/11 加班脚本已经更新!:
- 支持多个
ACCESS_TOKEN
Rotate (没有 Refresh token 的痛)
- 支持 new-api 传入
gpt-4-gizmo-g-xxxx
- 支持多个
- 05/15 新增极致反代版本:
推荐使用 【极致反代 oaifree】之【糊】之【拼车】之 【究极优雅】 之 pandora-4o
Example 使用方法:
curl https://apifree.<你的 CF 用户名>.workers.dev/v1/chat/completions \ # 建议搞个域名免墙
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer sk-fucking-real-api-free' \
-d '{
"model": "g-2DQzU5UZl",
"stream": false,
"messages": [
{
"role": "user",
"content": "you are ChatGPT based on GPT-3.5 or GPT-4? your knowledge cutoff date is? answer concisely: "
}
]
}' | jq .choices[0].message
注意:服务器资源问题,以上都只服务 ChatGPT Plus / Teams 账号(不过 Plus 账号的 3.5 可用)。
水第一贴(还不知道多少分)到手 [抱拳]