减少Gemini API请求次数的核心是单次请求并行处理多条文本,PHP 8.1中应使用genai->generate_content(['文本1','文本2','文本3'])替代循环调用,配合本地清洗、结构化提示与输出强约束,实测100条任务耗时从28秒降至9秒。

PHP 8.1 调用 Gemini API 做批量文本处理时,减少请求次数的核心不是“少发几次”,而是让每次请求干更多事、更准的事——避免无效调用、重复结构、单条低效交互。
用 batch_requests 替代 foreach 循环
别对每条文本单独调用 generate_content()。Gemini 官方 SDK 支持直接传入文本数组,一次请求并行处理多条:
- 正确写法:
genai->generate_content(['文本1', '文本2', '文本3']); - 错误写法:循环 3 次调用
generate_content('文本X') - 实测耗时从 28 秒降至 9 秒(100 条任务),吞吐量提升 3–5 倍
- 注意单批次建议控制在 50–100 条以内,避免超长输入触发截断或超时
预处理合并语义相近任务
把能归为一类的处理目标提前聚合,再用结构化提示统一解决:
- 例如:要对 20 条用户评论分别做「情感判断+关键词提取」,不要发 20 次,而是拼成 JSON 数组格式:
[{"id":"c001","text":"产品太卡了"},{"id":"c002","text":"物流很快"}]- 提示词明确要求:“返回同结构 JSON 数组,每个元素含 sentiment(positive/neutral/negative)和 keywords(最多3个)字段,不加解释”
- 这样既规避了每轮系统消息重复计费,又防止模型自由发挥加废话
本地清洗 + 结构化前缀压缩输入
原始文本常含大量干扰 Token(HTML 标签、多余空格、BOM 头 \ufeff),PHP 8.1 可高效预处理:
立即学习“PHP免费学习笔记(深入)”;
- 用
str_replace()批量删固定噪声:str_replace(['<script>', '[广告]', "\ufeff"], '', $text) - 用
preg_replace('/\s+/', ' ', $text)合并空白符 - 对长文本不直接喂原文,改用 PHP 本地轻量摘要(如关键词提取)生成前缀:
"【场景:电商差评,情绪:负面,关键词:卡顿、发热】"(≤40 Token) - 这步可砍掉原始输入 30%–90% 的无效 Token,显著降低单次请求成本
输出强约束防冗余
不让 Gemini “多说一句”,PHP 端要在请求参数和提示中双重锁定:
- 设置
max_output_tokens = 256(gemini-1.5-flash 免费额度门槛) - 指定
response_mime_type = 'application/json' - 提示词里写死:“只返回合法 JSON,无注释、无换行、无```包裹、无任何额外字符”
- 禁用流式:
stream => false,避免预扣 Token 浪费



















