智能体一旦对外开放,就会被刷。爬虫、薅羊毛、恶意压测,甚至善意用户手抖连点,都能把你的调用量打爆。大模型调用是按 token 花钱的,被刷一晚上账单很难看。这篇是我给一个对外智能体加防护的清单,限流、熔断、超时三件套,照着加。

为什么必须加

我第一次把智能体发成 API 没设防,第二天发现有个 IP 一晚上请求了两万多次——明显是脚本在跑。token 烧了不少,正常用户还被挤得变慢。从那以后,对外的智能体我一律先上防护再上线。

一、限流:先按维度想清楚

限流不是设一个数字就完了,要先想"按什么维度限":

  • 按 IP:挡住单机脚本,最基础。

  • 按用户/API key:每个用户每分钟最多 N 次,防单个账号滥用。

  • 按全局总量:保护后端整体,别被总并发压垮。

我一般三层都设。具体数值:一个正常聊天用户,每分钟撑死问十几次,我就把单用户限到 20 次/分钟,超了返回"太快了稍等"。全局再设个总 QPS 上限兜底。

很多搭智能体的平台后台直接有限流配置项,按 key、按时间窗填数字就行,不用自己写令牌桶。能配置就别自己撸。

二、超时:必须设,而且要分层

大模型偶尔会卡住——上游慢、工具调用挂住,都会让一个请求悬着不返回。不设超时,这些卡住的请求会一直占着连接,并发名额很快耗光。

我设两层超时:

  1. 单次模型调用超时:比如 30 秒没返回就掐掉,返回兜底话术。

  2. 整个 Agent 任务超时:自主 Agent 多步执行的,给整个任务也设个总超时,别让它"想"到天荒地老。

三、熔断:连续失败就先停一下

熔断是说:当后端连续报错(比如上游模型服务挂了),别再傻傻地把请求往里送,先快速失败一段时间,给后端喘息,也避免用户一直等。

简单实现:统计最近一个窗口的失败率,超过阈值(比如 50%)就进入熔断状态,接下来 N 秒直接返回降级话术,N 秒后放几个探测请求试试恢复了没。

一个容易漏的点:token 级别的封顶

除了次数限流,我还加了单次对话的 token 上限。有人会故意发超长 prompt 想榨干你的额度。给单次输入和输出都设 max token,从成本侧再兜一道。

我上线前的防护清单

  • 按 IP / 按 key / 全局三层限流都配了;

  • 单次调用超时 + 任务总超时都设了;

  • 后端故障有熔断降级,不是裸奔;

  • 单次 token 上限设了,防超长 prompt;

  • 所有"被拦"的情况都有友好兜底话术,不是直接 500。

一点取舍

限流设紧了误伤真实用户,设松了挡不住脚本。我的做法是先按宽松值上线,盯几天真实流量分布,再把阈值收到刚好略高于正常用户峰值。没有一劳永逸的数字,得看着调。

这套防护我没自己写多少代码——用的那个能把智能体发布成 API 的平台后台就带限流和超时配置项。它走 MaaS 模式,模型 API 在后面顶着,我只要把这几道闸配好,就不怕一觉醒来账单爆炸。讯飞Agent这类平台,把"防刷"从开发活变成了配置活。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐