文心一言是百度提供的一个免费中文句子API,每日请求上限为1000次。尽管如此,仍有很多应用在高频调用过程中容易突破该限制,从而触发超限或被临时屏蔽。
频繁或突发的大量请求可能导致服务不可用,甚至影响同一平台上的其他用户。因此,在开发中合理限制请求次数和流量,能有效保障API的可用性和稳定性。
在PHP中,我们可以通过Redis记录并判断单个用户的请求频率,实现每日请求次数的限制。下面是一个典型的代码示例:
// 连接Redis服务器
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 获取用户IP和当前日期
$ip = $_SERVER['REMOTE_ADDR'];
$date = date("Y-m-d");
// 构建Redis键名
$key = $ip . '-' . $date;
$count = $redis->get($key);
if (!$count) {
// 第一次请求,初始化计数并设置过期时间
$redis->set($key, 1);
$redis->expire($key, 86400);
} else {
if ($count >= 1000) {
echo '请求次数超限';
exit;
}
// 增加计数
$redis->incr($key);
$redis->expire($key, 86400);
}
// 请求文心一言API
$url = 'https://v1.alapi.cn/api/shici?format=text';
$response = file_get_contents($url);
echo $response;
除了应用层的限流,还可以借助NGINX在服务层对请求速率做限制,避免短时间高并发造成压力。示例如下:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
}
server {
...
location / {
limit_req zone=one burst=5 nodelay;
proxy_pass ...;
}
}
上述配置含义如下:
通过PHP结合Redis进行请求限流,配合NGINX进行流量控制,是保障API稳定运行的有效方式。本文以百度文心一言API为例,提供了实际的实现代码与配置建议。类似的做法也可应用于其他高频调用的开放接口,开发者应根据业务需求合理设置限流策略。