先确认是不是 Workers AI 本身慢

我会先把一次调用拆成四段看,而不是直接怪模型。

段落需要记录常见误判
客户端到 WorkerrequestId、入口时间、用户 id浏览器超时被当成模型失败
Worker 编排KV/D1/R2/fetch 每段耗时数据读取慢被当成 AI 慢
Workers AI 调用模型名、输入大小、首包时间、错误类型模型排队与参数错误混在一起
fallback / 重试第几次、退避时长、替代模型重试成功但成本翻倍

先补日志。我的最小字段是 requestIdtaskTypemodelinputSizeattemptdurationMserrorClassfallbackModel。没有这些字段时,讨论「该不该换模型」通常是在猜。

Cloudflare 官方文档把 Workers AI 放在 Workers 生态里使用,适合边缘侧推理和应用编排;Cloudflare Queues 则适合把异步工作从用户请求里拆出去。这个限制很关键:不是所有 AI 任务都应该在一次 HTTP 请求里完成。

最短止血路径怎么走?

第一步,先给同步请求定一个硬限制。我的做法是:用户当前页面必须看到的结果才同步,例如一句标签分类、一段短摘要、一个轻量 embedding。长报告、批量改写、批量图片描述,一律只返回任务 id。

第二步,给 Workers AI 调用加业务级超时。不要让 Worker 无限等模型。超过你设定的时间后,返回结构化状态:queuedretryablefailed,而不是让前端拿到一个模糊的 500。

第三步,把重试从「立即再来一次」改成退避。第一次失败后等 1-2 秒,第二次等 4-8 秒,并带上同一个幂等键。没有幂等键的重试最危险:用户刷新一次,你可能创建两份任务、扣两次额度、写两条结果。

第四步,立刻关掉无脑 fallback。很多独立开发者会把「A 模型失败就换 B 模型」写得很顺手,但没有成本表。fallback 应该是配置项:哪些任务允许、最多几次、替代模型是谁、单次预算多少。

什么时候必须上队列?

我用三个判断条件。

  1. 单次输入不可控:用户上传文本、CSV、网页内容,长度由用户决定。
  2. 结果可以晚一点拿:摘要报告、批量标签、后台质检,不影响当前付款或登录。
  3. 需要多步编排:先抽取、再分类、再生成、再写库,中间任何一步失败都要恢复。

满足两个条件,我就放进 Cloudflare Queues。前端拿到 jobId 后轮询 /api/jobs/:id,状态只给五个:receivedqueuedrunningsucceededfailed。不要发明十几个状态,客服和用户都记不住。

队列消费者里再调用 Workers AI,并把每一次 attempt 写进日志或数据库。失败时只让 worker 自己重试,不让浏览器刷新触发新任务。

重试策略应该怎么写?

我的规则很保守:

错误是否重试原因
网络中断、临时 5xx可以可能是短时波动
429 或容量不足可以,但退避更长立即重试通常更差
400、参数错误不重试输入不改,结果不会变
401/403不重试密钥或权限问题
输出过长、输入过大不重试,改任务需要切片或换流程

重试次数我一般设 2 次。超过以后进入失败队列,给后台一个「人工重跑」按钮。自动系统要有刹车,不然凌晨某个上游波动,会把所有失败任务排成第二天的成本账单。

fallback 成本怎么算才不失控?

把任务分级,不要按模型分级。

任务默认模型fallback成本策略
标签分类轻量模型同级模型允许自动 fallback
客服草稿中等模型更强模型只对付费用户开启
长报告队列任务人工重跑或异步强模型需要预算上限
批量处理队列 + 分片降级输出禁止无限 fallback

每个 job 存一个 estimatedCostactualCost,哪怕一开始只是估算也比没有强。等你看到某类任务的 fallback 率超过 10%,不要急着加预算,看是不是输入过长、prompt 太散、模型选择不对。

如果你的 AI SaaS 既要接 OpenAI 又要接 Claude,模型切换和账单口径会更复杂。我一般会把高成本路径接到稳定调用 Claude / OpenAI 的中转服务,至少让多模型调用、余额和失败重跑在同一套记录里,不要散在三四个后台。

还没恢复时,单独查 Workers AI retry

做降级,不要硬扛。

  1. 关闭批量入口,只保留单条处理。
  2. 把长任务全部改为异步,前端只显示任务状态。
  3. 临时降低 fallback 等级,不让轻任务跳到高成本模型。
  4. 给免费用户加每日队列上限,付费用户保留优先级。
  5. 导出最近 24 小时失败任务,按错误类型排序,而不是按用户投诉排序。

如果这五步之后还是慢,再考虑换模型、换地区或拆服务。很多时候真正的问题不是 Workers AI,而是你把同步产品体验、异步任务、成本控制写在了一段函数里。

相关阅读