You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Google Perspective API遇HTTP Error 429:请求过多如何解决?

解决Perspective API请求429错误的方案

429错误的核心原因是请求频率或总量超出了Perspective API的配额限制,以下是针对性解决方法:

1. 精准控制请求速率

Perspective API免费版默认限制为每分钟60次请求,现有休眠策略不够严谨,建议调整为每个请求后添加固定休眠,配合批量缓冲休眠:

import time
import numpy as np

def aggressiveLanguage_mapper(input_data):
    key = "my_key"
    p = PerspectiveAPI(key)

    input_data['insult_prob'] = np.nan
    input_data['toxicity_prob'] = np.nan
    input_data['threat_prob'] = np.nan

    ignore_comments_counter = 0
    j = 0

    for ind, row in input_data.iterrows():
        j += 1
        # 每个请求后休眠1秒,严格控制在每分钟60次以内
        time.sleep(1)
        
        if j % 60 == 0:
            print(f'finished comment {j}/{len(input_data)}')
            # 批量完成后额外休眠5秒作为缓冲
            time.sleep(5)

        curr_comment_body = row['body']
        result = p.score(curr_comment_body, ["INSULT","TOXICITY","THREAT"])
        input_data.at[ind,'insult_prob'] = result["INSULT"]
        input_data.at[ind,'toxicity_prob'] = result["TOXICITY"]
        input_data.at[ind,'threat_prob'] = result["THREAT"]

    print(f'total number of comments ignored: {ignore_comments_counter}')
    return input_data

2. 实现失败重试与指数退避

即使控制速率,偶尔仍可能触发限制,添加重试机制,遇到429时延长休眠时间再重试:

import time
import numpy as np
from urllib.error import HTTPError

def aggressiveLanguage_mapper(input_data):
    key = "my_key"
    p = PerspectiveAPI(key)

    input_data['insult_prob'] = np.nan
    input_data['toxicity_prob'] = np.nan
    input_data['threat_prob'] = np.nan

    ignore_comments_counter = 0
    j = 0

    for ind, row in input_data.iterrows():
        j += 1
        curr_comment_body = row['body']
        curr_id = row['id']
        max_retries = 3
        retry_count = 0
        success = False

        while not success and retry_count < max_retries:
            try:
                result = p.score(curr_comment_body, ["INSULT","TOXICITY","THREAT"])
                input_data.at[ind,'insult_prob'] = result["INSULT"]
                input_data.at[ind,'toxicity_prob'] = result["TOXICITY"]
                input_data.at[ind,'threat_prob'] = result["THREAT"]
                success = True
                time.sleep(1)  # 正常请求后休眠
            except HTTPError as e:
                if e.code == 429:
                    retry_count += 1
                    sleep_time = 2 ** retry_count  # 指数退避:2s、4s、8s
                    print(f"评论{curr_id}触发限制,{sleep_time}秒后重试第{retry_count}次")
                    time.sleep(sleep_time)
                else:
                    raise  # 其他错误直接抛出
        if not success:
            ignore_comments_counter +=1
            print(f"评论{curr_id}多次请求失败,已忽略")
        
        if j % 60 == 0:
            print(f'finished comment {j}/{len(input_data)}')

    print(f'total number of comments ignored: {ignore_comments_counter}')
    return input_data

3. 减少无效请求

  • 去重处理:如果数据框存在重复评论,先对body列去重,处理后再合并回原数据,避免重复消耗配额。
  • 空值/短内容过滤:提前过滤空评论或长度过短的无效内容,减少不必要的请求。

4. 检查并升级API配额

登录Google Cloud控制台查看Perspective API的配额使用情况:

  • 若每日配额耗尽,可等待次日重置,或升级付费套餐提升配额;
  • 若速率配额仍不足,可申请提高速率限制。

5. 尝试批量请求(若API支持)

Perspective API部分版本支持批量提交评论,将多个评论打包为一个请求发送,可大幅降低请求次数,具体可参考官方文档中的批量接口说明。

内容的提问来源于stack exchange,提问作者Sar99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 23:27:15