Agent 速率限制与成本攻击防御:Token 配额、滑动窗口、攻击向量实战

系统讲解 LLM Agent 在生产环境中的速率限制(Rate Limiting)与成本攻击(Cost Attack)防御:从单用户 Token 配额、多租户滑动窗口、Prompt 注入放大成本,到 DDoS 防护与 LangChain/CrewAI/AutoGen 框架的集成。

AgentList Team · 2026年7月6日
rate limitingcost controlprompt injectionagent security安全red team

2025 年是 LLM Agent 大规模上生产的一年。但几乎所有团队都会遇到同一个意外的账单:某个用户在一天之内烧掉了 10 万美元 Token。本文系统讲解 Agent 速率限制(Rate Limiting)与成本攻击(Cost Attack)防御的工程实践。

一、成本攻击的独特性

传统 API 攻击(如 DDoS)的目标是让服务不可用;成本攻击的目标是让对手花钱。两者在防御策略上有本质区别:

维度 传统 DDoS LLM 成本攻击
攻击者目标 服务宕机 受害者钱包出血
攻击成本 攻击者付带宽费 受害者付 Token 费
防御焦点 流量清洗 Token 配额
检测难度
攻击复用性 单次 可重复(同一 prompt)
法律风险 明确违法 灰色地带(prompt 注入)

关键洞察:传统 DDoS 是攻击者付成本、LLM 成本攻击是受害者付成本。这改变了攻防经济——攻击者可以零成本发起攻击。

二、攻击向量的完整分类

2.1 直接攻击

场景 1(单用户耗尽):攻击脚本 1 小时发 10000 次请求,每次消耗 50K Token,账单 $7500。场景 2(Token 放大攻击):构造让 LLM 必须输出极长回复的 prompt,100 Token 输入但 GPT-4 输出 20000+ Token。

2.2 间接攻击(via Prompt Injection)

更阴险的攻击:攻击者通过第三方数据源(文档、网页、邮件)注入 prompt,让用户的 Agent 替攻击者跑高成本任务。场景 3(邮件注入):攻击邮件正文要求 Agent 阅读所有 PDF 附件并生成摘要发到攻击者邮箱,Agent 执行这条指令因为 Prompt Injection 绕过了系统的安全检查。

2.3 分布式攻击

攻击者控制僵尸网络,每个节点发少量请求,绕过单 IP 速率限制。1000 个不同 IP,每个发 10 次/小时,总成本 $5000/小时。

2.4 链式攻击

利用 Agent 的多步执行能力,单次请求消耗大量 Token。比如分析公司所有 GitHub 仓库并生成可视化报告,可能触发 20 步 Agent 执行,总 Token ~500K。

三、防御体系:四层防御模型

Layer 4(应急响应):Kill Switch + 异常账单告警。Layer 3(异常检测):异常 Token 用量检测 + AI 行为分析。Layer 2(配额限制):用户配额 + 滑动窗口 + 熔断。Layer 1(入口防护):WAF + 速率限制 + 认证。

Layer 1:入口防护

传统 Web 防护,用于过滤明显的恶意流量。NGINX + Cloudflare 配置示例:单 IP 速率限制(rate=10r/s)、全局连接数限制(limit_conn 50)、限流突发允许 burst=20。

Layer 2:配额限制(核心)

LLM Agent 防御的核心。需要实现四类配额:请求数限制(每分钟/每小时/每天)、Token 限制(每分钟/每小时/每天)、单次请求上限(max_tokens_per_request、max_steps_per_agent)。

按 tier 配置(free / pro / enterprise)的 QuotaConfig 数据结构,包含 requests_per_minute/hour/day、tokens_per_minute/hour/day 等字段。

滑动窗口限流(Token Bucket 算法)

基于 Redis + Lua 脚本实现。读取当前 tokens 和 last_refill 时间戳,按时间差补充 tokens,判断 tokens >= cost 则扣减并允许,否则拒绝。每次操作都更新 last_refill 并设置 EXPIRE。

Layer 3:异常检测

配额限制是静态的,异常检测是动态的。检测维度:Token 用量突增 5x、单次请求 token 异常大(10x baseline)、错误率突增(可能是 prompt 注入探测)、Prompt 多样性降低(自动化攻击特征,unique_prompts < request_count * 0.1)。

Layer 4:应急响应(Kill Switch)

当检测到攻击时,必须能立刻熔断。KillSwitch 类提供 is_active(scope) 和 activate(scope, reason, duration_seconds) 接口,scope 可以是 user_id、tier、global。激活时同时触发告警(PagerDuty / Slack)。

四、LangChain/CrewAI/AutoGen 框架集成

LangChain Callback Handler

实现 BaseCallbackHandler,在 on_llm_start 时:检查 Agent 步数限制(step_count > max_steps_per_agent 报错)、预估本次 token 消耗、检查配额(Token Bucket check_and_consume)、记录实际 token 使用到 total_tokens_used。

CrewAI 集成

CrewAI 0.86+ 支持 step callback,使用 @before_llm_call 装饰器实现 enforce_quota 函数。

AutoGen 集成

继承 ConversableAgent 实现 QuotaAwareAgent,在 a_generate_reply 时检查总成本、估算 token、检查配额、累计实际成本。

五、Prompt 注入的成本防御

Prompt 注入是成本攻击的主要载体,防御需要双管齐下。

5.1 输入侧:限制 prompt 长度

MAX_PROMPT_LENGTH = 50_000 tokens,超出则抛出 PromptTooLong 异常。

5.2 行为侧:限制 Agent 步数和工具调用

MAX_STEPS = 20、MAX_TOOL_CALLS = 50、MAX_COST_PER_REQUEST = $1.00。CostAwareAgent 在每个 step 累计 step_count、tool_call_count、total_cost。

5.3 输出侧:检测异常响应

单次响应不应超过 8K Token;检测响应中是否包含敏感操作指令("忽略之前所有指令"、"disregard previous"等)。

六、生产部署架构

API Gateway(认证、配额查询、Token 配额检查)→ Agent Runtime(LangChain/CrewAI/AutoGen + Callback + Cost Tracker + Kill Switch)→ LLM Provider(OpenAI / Anthropic / 自托管)→ 监控(账单告警、异常检测、审计日志)。

关键组件:Redis(存 Token 桶、滑动窗口、配额计数,高频读写)、Postgres(存用户订阅、档位、历史用量,持久化)、Prometheus + Grafana(实时监控 Token 用量)、PagerDuty / Slack(异常账单告警,>$1000/hour 触发)、Langfuse / Helicone(LLM 调用全链路追踪)。

七、常见陷阱

  1. 配额 = 每分钟请求数:只限 QPS 不限 Token 没用,攻击者可以用大 prompt 耗尽 Token 配额。
  2. 硬编码免费用户限额:必须基于使用模式动态调整。
  3. Prompt 注入只是安全问题:Prompt 注入首先是成本问题。
  4. 事后查账单就行:账单是 T+1 的,必须实时监控 + 自动熔断。
  5. 用户配额就够了:忽略 IP 维度,单个用户用代理池轮换 IP 绕过。
  6. LLM Provider 的限流就够了:OpenAI/Anthropic 的限流只保护他们,不保护你。

八、推荐配置

场景 用户档位 Token 配额 单请求上限 Agent 步数
个人项目 / demo Free 100K/天 4K 10
SaaS 免费层 Free 500K/天 4K 15
SaaS 付费层 Pro 100M/天 16K 50
企业内 Enterprise 1B/天 32K 200

九、未来趋势

Token Bucket 标准协议(类似 HTTP 的 RateLimit Header RFC 9239)、AI 行为分析(用 ML 模型识别异常 Agent 行为模式)、联邦配额(跨多个 LLM Provider 的统一配额管理)、智能熔断(基于历史模式的预测性熔断)、成本即代码(把配额和成本策略写成代码)。

最后一句话:Agent 的成本防御不是事后补救,而是上线第一天就要做的事。2024 年至今已有数十起公开报道的 AI 账单失控事件,涉及金额从几千到几十万美元不等。