了解 OpenAI 速率限制
OpenAI强制执行 速率限制 在 API 密钥和 IP 地址层面上都会出现问题。如果你像鹦鹉啄铁皮屋顶一样疯狂地攻击他们的端点,就会收到 429 错误(“请求过多”)。这意味着你每分钟的请求数 (RPM) 或每分钟的令牌数 (TPM) 已超过允许的限制。.
典型速率限制:
| 模型 | 默认转速 | 默认TPM |
|---|---|---|
| GPT-3.5 | 3500 | 90,000 |
| GPT-4 | 500 | 40,000 |
但关键在于:如果您使用多个 IP 地址,就可以绕过 IP 级别的限制,因为每个唯一的 IP 地址都有自己的配额。.
选择合适的代理解决方案
市面上的代理商比澳大利亚内陆的袋鼠还多,但并非所有代理商都一样。以下是简要分析:
| 代理类型 | 优点 | 缺点 | 最适合 |
|---|---|---|---|
| 免费公共代理 | 简单、免费、资源丰富 | 不可靠、速度慢、经常被阻塞、存在安全隐患 | 一次性、低优先级 |
| 住宅 | 更难屏蔽,更合法。 | 成本高、速度慢、有时带宽受限 | 持续抓取 |
| 数据中心 | 快速、低成本、可扩展 | 通常会被列入黑名单,可能会触发滥用检测。 | 批量、高速任务 |
| 轮换代理 | 自动切换,使用方便 | 可能费用高昂,偶尔重复的IP地址 | 绕过速率限制 |
想在不花一分钱的情况下开始使用吗?请查看 ProxyRoller(https://proxyroller.com). 它会抓取并更新网络上的免费代理,无需注册。.
设置代理:分步指南
1. 从 ProxyRoller 获取代理
首先,我们来获取一批新的免费代理。.
curl https://proxyroller.com/api/proxies?protocol=http
您将获得一个代理的 JSON 数组,例如:
[
{
"ip": "154.16.192.70",
"port": "1080",
"protocol": "http"
},
...
]
您可以按协议筛选(http, https, socks4, socks5)根据需要。
2. 在 Python Requests 中集成代理
获取多个代理服务器,并在进行 API 调用时轮流使用它们。.
import requests
import itertools
proxies_list = [
{'http': 'http://154.16.192.70:1080'},
{'http': 'http://38.54.101.103:8080'},
# ... more proxies from ProxyRoller
]
proxies_cycle = itertools.cycle(proxies_list)
def openai_request(payload):
proxy = next(proxies_cycle)
response = requests.post(
"https://api.openai.com/v1/chat/completions",
headers={"Authorization": f"Bearer YOUR_OPENAI_KEY"},
json=payload,
proxies=proxy,
timeout=10
)
if response.status_code == 429:
print("Rate limited, switching proxy!")
return openai_request(payload) # Try next proxy
return response.json()
3. 自动代理轮换
如果追求效率,可以在每次请求时或出现 429 错误后自动轮换代理。.
示例逻辑:
– 从 ProxyRoller 的 API 加载代理。.
– 每次请求时,选择下一个代理。.
– 如果出现 429 错误,请尝试使用不同的代理。.
定期刷新代理列表,以避免使用失效的代理。.
应对常见陷阱
a. 失效或运行缓慢的代理
说真的,免费代理服务器可能比树丛里的野熊还不靠谱。使用代理服务器之前一定要先测试:
def is_proxy_alive(proxy):
try:
requests.get("https://api.openai.com", proxies=proxy, timeout=3)
return True
except:
return False
working_proxies = [p for p in proxies_list if is_proxy_alive(p)]
b. OpenAI 屏蔽代理
OpenAI 有时会屏蔽代理服务器,尤其是免费代理或数据中心代理。如果您持续收到 403 错误或连接错误,请从 ProxyRoller 刷新您的代理列表,或者考虑为关键任务使用付费的住宅代理服务。.
ProxyRoller 使用速查表
| 特征 | 如何操作 |
|---|---|
| 获取 HTTP 代理 | curl https://proxyroller.com/api/proxies?protocol=http |
| 获取 HTTPS | curl https://proxyroller.com/api/proxies?protocol=https |
| 获取 SOCKS5 | curl https://proxyroller.com/api/proxies?protocol=socks5 |
| 代理数量 | 每小时更新多达 1000 条以上 |
| 过滤器 | 按国家/地区、匿名级别、协议筛选 |
更多文档和指南: https://proxyroller.com/docs
利用代理池绕过速率限制
如果你想全力以赴,那就设置一个代理池管理器。这里有一个使用 Python 和 ProxyRoller 的简易代理池示例:
import threading
import queue
proxy_queue = queue.Queue()
for proxy in working_proxies:
proxy_queue.put(proxy)
def worker(task_payload):
while not proxy_queue.empty():
proxy = proxy_queue.get()
try:
resp = requests.post(
"https://api.openai.com/v1/chat/completions",
headers={"Authorization": f"Bearer {OPENAI_KEY}"},
json=task_payload,
proxies=proxy,
timeout=10
)
if resp.status_code == 200:
print("Success!", resp.json())
break
except Exception as e:
print(f"Proxy failed: {proxy}. Error: {e}")
threads = []
for payload in tasks:
t = threading.Thread(target=worker, args=(payload,))
t.start()
threads.append(t)
for t in threads:
t.join()
免费代理与付费代理的比较
| 属性 | 免费代理(ProxyRoller) | 付费代理 |
|---|---|---|
| 成本 | $0 | $10–$200/月 |
| 可靠性 | 低至中 | 高的 |
| 速度 | 变化多端,通常进展缓慢 | 快速地 |
| 阻止率 | 高的 | 低的 |
| 匿名 | 中等的 | 高的 |
| 设置时间 | 立即的 | 设置/账户只需几分钟 |
其他资源
记住,伙计:负责任地使用代理。别败坏互联网的名声——轮换代理、验证代理,保持高雅。如果遇到限速,深呼吸,换个代理,继续。.
评论 (0)
这里还没有评论,你可以成为第一个评论者!