高速、免费的 ChatGPT 代理节点
体验机器人可直接加QQ: 775762961
QQ 交流群:752372415。
下面的 API 可以直接使用 ⬇️ ⬇️ ⬇️
使用方法
注意
1. 使用 curl 访问
curl -X POST --location "https://external.hdcjh.xyz/gateway/free-proxy/v1/chat/completions" \
-H "Authorization: Bearer qq-group-752372415" \
-H "Content-Type: application/json" \
-d "{
\"model\": \"gpt-3.5-turbo\",
\"messages\": [
{
\"role\": \"system\",
\"content\": \"You are a helpful assistant.\"
},
{
\"role\": \"user\",
\"content\": \"hi\"
}
]
}"
流式传输:
curl -X POST --location "https://external.hdcjh.xyz/gateway/free-proxy/v1/chat/completions" \
-H "Authorization: Bearer qq-group-752372415" \
-H "Content-Type: application/json" \
-d "{
\"model\": \"gpt-3.5-turbo\",
\"messages\": [
{
\"role\": \"system\",
\"content\": \"You are a helpful assistant.\"
},
{
\"role\": \"user\",
\"content\": \"explain me the TFCC injury and how to rehab.\"
}
],
\"stream\": true
}"
2. 使用 python openai 模块访问
注意
import openai
# 这里记得修改成自己的 API KEY
openai.api_key = 'qq-group-752372415'
openai.api_base = 'https://external.hdcjh.xyz/gateway/free-proxy/v1'
# 一个调用的小例子
messages = [{"role": "user", "content": "老公,你说句话呀"}]
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages,
temperature=0.9,
max_tokens=1024,
n=1,
)
response = completion.choices[0]
print(response['message']['content'])
3. 免费的 API Token
点击这里或者搜索加入 QQ 群:752372415
进群加机器人好友后,会自动回复免费的代理 Token,限流为 500 次每周且 100 次每天。
用的舒服的话,不妨点个 star~
代理服务器搭建方法
- 搭建 k3s 集群
- 安装 cert-manager / prometheus-operator / fluentd / traefik / metrics-server 等基础组件
- 配置 traefik 转发规则
- 使用 gin 框架写 openai 的转发
Tech overview
There have 3 entities involved in this procedure except gateway(traefik) and openai:
- Gin-based transmitting server to provide concurrency.
- Django-based web server to provide developer's efficiency and concurrency insensitive web pages.
- Redis to store valid tokens and token usage per request.
I only added two middleware in the transmitting procedure.
- Token Usage Accounting Middleware calculates prompt / completion token usage, and save it to redis for each request.
- Token Validation Middleware check whether token usage in the whitelist, the whitelist is maintained by Django.
Here is some tidbits:
COPY
req and resp body while transmitting, handle it after response.- For validating token, use 2-stage cache, which means check local cache first, and then query redis if not found.
代理服务器搭建方法 (旧方法,单节点,但依然可以用)
原理
使用 Traefik 作为反向代理,把关于 ChatGPT 的请求转发到 openai 即可。
关于代理 Token:
- 代理 Token 就是在请求 OpenAI 的时候,Traefik 先检测代理 token 是否有效,如果有效则替换为 OpenAI 的 API KEY,最后再转发到 OpenAI。
关于限流:
- 第一层限流在 Traefik,直接配置插件
- 第二层限流在代码里,使用 Redis 存储每个代理 Token 在一段时间范围内的请求次数,超过限制则返回错误。
- 更进一步可以考虑批量获取请求次数,例如限流为 10000/hour,那么就可以每次取 100 个请求次数,等本地的 Redis token 消耗光了以后再重新获取,以提升整体性能。缺点是可能产生限流误差,比如在这个例子中最大的误差就是 10%
- 更进一步也可以考虑在协程中使用信号去控制请求是否返回,主请求通路和验证同时进行,以降低延迟。缺点是可能会比较费 Token。
前期准备
- 买一个国外的 VPS 或者白嫖大厂的 VPS
- 大厂基本每年都有打骨折的活动,下面链接里是相关的 2023 年的一些活动链接,还有一些本身就很便宜的直接去官网买就行。
- AWS /
- Azure /
- Digital Ocean /
- 甲骨文免费服务器 /
- hosteons
- 申请免费的 Redis 存储
- 可以直接去 redis lab 申请,注册就送永久 30MB 免费存储,对于小网站来说 30MB 绝对够用了。
- 为 VPS 申请域名、证书
- 直接使用 Cloudflare 托管域名,然后在 Cloudflare 中一键申请,或者也可以去 Let's Encrypt 申请短效证书。
- 在 VPS 上安装 docker
- 直接看官网文档
- 使用 docker 安装 traefik
- 也是直接看官方文档按步骤来即可
配置 Traefik
- 创建一个配置文件
/etc/traefik/traefik.yml
记得把里面的 example@mail.com 替换为自己的邮箱,该邮箱将用于 Traefik 自动去 Let's Encrypt 上申请证书。
global:
checkNewVersion: true
sendAnonymousUsage: false # true by default
# (Optional) Log information
# ---
# log:
# level: ERROR # DEBUG, INFO, WARNING, ERROR, CRITICAL
# format: common # common, json, logfmt
# filePath: /var/log/traefik/traefik.log
# (Optional) Accesslog
# ---
accessLog:
format: common # common, json, logfmt
filePath: /var/log/traefik/access.log
bufferingSize: 100
# (Optional) Enable API and Dashboard
# ---
api:
dashboard: true # true by default
insecure: true # Don't do this in production!
# Entry Points configuration
# ---
entryPoints:
web:
address: :80
# (Optional) Redirect to HTTPS
# ---
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: :443
# Configure your CertificateResolver here...
# ---
certificatesResolvers:
staging:
acme:
email: example@mail.com
storage: /ssl-certs/acme.json
caServer: "https://acme-staging-v02.api.letsencrypt.org/directory"
httpChallenge:
entryPoint: web
production:
acme:
email: example@mail.com
storage: /ssl-certs/acme.json
caServer: "https://acme-v02.api.letsencrypt.org/directory"
httpChallenge:
entryPoint: web
# (Optional) Overwrite Default Certificates
# tls:
# stores:
# default:
# defaultCertificate:
# certFile: /etc/traefik/certs/cert.pem
# keyFile: /etc/traefik/certs/cert-key.pem
# (Optional) Disable TLS version 1.0 and 1.1
# options:
# default:
# minVersion: VersionTLS12
providers:
docker:
exposedByDefault: false # Default is true
file:
filename: /etc/traefik/config.yml
watch: true
providersThrottleDuration: 10s
experimental:
hub: true
metrics:
prometheus:
addEntryPointsLabels: true
addServicesLabels: true
entryPoint: websecure
addRoutersLabels: true
- 创建 Traefik 的动态配置文件
/etc/traefik/config.yml
# official config file example: https://doc.traefik.io/traefik/reference/dynamic-configuration/file/
http:
routers:
chatGPT:
# md5(b'ChatGPT').digest()[:8].hex()
rule: "Host(`external.hdcjh.xyz`) && PathPrefix(`/62239e6c0f995ae1`)"
service: chatGPT
middlewares:
- chatGPT
tls:
certResolver: production
domains:
- main: "hdcjh.xyz"
sans:
- "*.hdcjh.xyz"
services:
chatGPT:
loadBalancer:
servers:
- url: https://api.openai.com
passHostHeader: false
middlewares:
chatGPT:
stripPrefix:
# md5(b'ChatGPT').digest()[:8].hex()
prefixes:
- "/62239e6c0f995ae1"
forceSlash: false
- 编写 docker compose,用于启动 traefik copy 下面的代码到自己的 docker-compose.yml 文件:
version: '3.9'
services:
reverse-proxy:
image: traefik:v2.9
container_name: traefik
command:
- --api.insecure=true
- --providers.docker=true
ports:
- "80:80"
- "443:443"
- "8080:8080"
environment:
- TZ=Asia/Shanghai
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /var/log/access.log:/var/log/access.log
- /etc/traefik:/etc/traefik
- traefik-ssl-certs:/ssl-certs
whoami:
image: traefik/whoami
labels:
- "traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`)"
networks:
default:
external:
name: traefik
volumes:
traefik-ssl-certs:
driver: local
- 手动添加网络,运行下面的命令即可
docker network create traefik --driver bridge
- 启动代理
docker compose up -d
- 去 8080 端口查看 traefik 执行情况 例如在我这里就是直接访问 https://external.hdcjh.xyz:8080 这个链接。 可以看到 traefik 反向代理运行良好,然后就可以直接使用啦~
常见问题
- 别人访问了我的 Traefik 面板怎么办?
- 首先,因为使用了 Cloudflare 代理,第三者不知道服务器的真实 IP ,所以压根就无法访问面板端口。
- 其次,可以使用 Traefik 的 BasicAuth 中间件实现登录操作,只需要给 traefik 的 container 添加相应的 label 即可。
- 有人 DDos 攻击我的服务器怎么办?
- 首先,Cloudflare 可以开启 DDos 防护
- 其次,Traefik RateLimit 中间件可以实现限流,我这里设置的是每10秒最多100次请求
其他问题请留言,我会一一回答。