PHP调用AI API的真实成本取决于token预估、超时设置、并发控制和缓存策略;须用官方tokenizer精确计数,cURL设超时与错误检查,批量请求优化,并启用Redis/APCu缓存命中关键路径。

PHP 本身不训练模型,也不做推理,它只是个“调度员”——真正花钱的地方在 API 调用、token 消耗、并发防护和错误兜底。选错模型或忽略调用方式,成本可能翻倍甚至失控。
怎么算清一次请求的真实 cost?别只看单价
中文文本的 token 数远超 strlen(),比如一个 200 字的中文段落,实际可能是 300+ token(OpenAI 官方 tokenizer 测出来才准)。直接用 mb_strlen() 或 strlen() 估算,会导致预算严重低估。
- 必须用官方 tokenizer 库(如
openai/tokenizer)在 PHP 外预估,或调用/v1/chat/completions前先走/v1/embeddings+model=ada-002这类低成本 endpoint 做 token 预检 - 摘要、问答、审核等场景,输入+输出都要计费;
max_tokens设太小会截断,设太大则白付钱 - 带历史上下文的对话接口(如
gpt-3.5-turbo),每轮多加 50–100 token,长会话成本指数上升
cURL 不设超时,等于给账单开后门
没配 CURLOPT_TIMEOUT 或 CURLOPT_CONNECTTIMEOUT,一旦 AI 服务响应慢或卡住,PHP 进程就挂起,既拖垮并发,又持续计费(尤其按秒计费的流式接口)。
- 推荐值:
CURLOPT_TIMEOUT => 15(含网络+处理),CURLOPT_CONNECTTIMEOUT => 5 - 必须配合
CURLOPT_FAILONERROR => true和http_response_code()检查状态码,否则 429/503 错误会被当成功吞掉 - 别省事用
file_get_contents(),它没法控超时,也没法设 header 中的Authorization字段
批量请求不是“多发几次”,而是结构重设计
逐条 curl_exec() 发 100 个摘要请求,耗时约 10 秒+,API 调用频次还容易触发限流;改成单次传 100 条文本进 batch 参数(如果服务商支持),或用 Guzzle 的 Pool 并发控制,成本能压到原来的 30%。
- OpenAI 目前不原生支持批量文本摘要,但 Hugging Face Inference API 支持
inputs: ["...", "..."]数组格式 - 自己拼 JSON 数组发过去前,务必检查总 token 是否超限(比如
gpt-3.5-turbo上限是 16k) - 并发数别盲目设高:PHP-FPM worker 数 × 并发连接数 > 后端 API 配额,直接 429;建议从 3–5 起步,观察日志里的
X-RateLimit-Remaining
缓存不是可选项,是成本防火墙
相同问题反复问、同类文档反复摘要、固定提示词(prompt)反复用——这些场景不加缓存,等于把钱烧在重复计算上。
立即学习“PHP免费学习笔记(深入)”;
- 用
md5($prompt . $input_text)当 key,存 Redis 或 APCu,TTL 设 1 小时足够覆盖多数业务冷热周期 - 注意:不能缓存含用户隐私数据的响应(如身份证号脱敏结果),要提前清洗再哈希
- 缓存命中时跳过 API 调用,直接返回;但需记录
cache_hit: true到日志,用于后续分析哪些 prompt 最“烧钱”
curl_setopt() 和 tokenizer 接进日常开发流程,越不容易某天看到账单愣住。



















