Agentic 洪水:当 AI Agent 把你的请求量放大 5 倍,如何既扛住洪峰又不误伤真人

·阅读约 10 分钟·Evergreen Tools Team
Stack of paper forms representing a surge of submissions

💡 工具推荐应对 agentic 洪水本质上是排队与身份工程。用 JSON 格式化工具校验入站载荷,用 UUID 生成器生成幂等键,用 Cron 表达式生成器安排批处理任务,再用 API 测试工具检查接口响应。 JSON 格式化工具, UUID 生成器, Cron 表达式生成器

AI 让填表、写申诉、提交投诉变得前所未有的容易,于是公共服务正在被「洪水」冲击。研究者 Chris Schmitz 给这种现象起了个名字:agentic flooding(Agent 洪水)。数字很有说服力:英国住房申诉专员的投诉量自 ChatGPT 出现以来翻了一倍多(从 2022 年 2600 件升至去年 7000 多件),美国 CFPB 的投诉量同期增长约 5 倍,巴西司法请愿与德国议会请愿也有类似跃升。但真正关键、也最容易被误解的一点是:这些新增申请里,绝大多数来自享有正当权利的真实个人,而不是恶意水军。

1. 什么叫 agentic flooding

Schmitz 正在追踪这股上升趋势,他称之为 agentic flooding。一篇将于下月在 AI Ethics and Society 会议上发表的论文研究了 11 个司法辖区内的 84 个潜在「洪水」案例,发现广泛证据表明 AI 工具正在改变人们与公共服务交互的方式。方法论上,论文谨慎地没有直接断言「AI 造成了申请量激增」,但大多数案例都呈现同一弧线:2022 年前提交量大致平稳,随后随着 AI 技术扩散而加速上升;更关键的是,大多数案例的增长尚未放缓,意味着未来数年可能持续攀升。

# Per-identity token bucket: smooth bursts without banning real people.
import time

class TokenBucket:
    def __init__(self, rate, capacity):
        self.rate, self.capacity = rate, capacity
        self.tokens, self.updated = capacity, time.time()

    def allow(self, n=1):
        now = time.time()
        self.tokens = min(self.capacity, self.tokens + (now - self.updated) * self.rate)
        self.updated = now
        if self.tokens >= n:
            self.tokens -= n
            return True
        return False

b = TokenBucket(rate=0.5, capacity=5)   # 30/min burst 5
print(b.allow(), b.allow())

2. 洪水从哪来:行政负担被 AI 抬走了

为什么 AI 会推动激增?Schmitz 的解释很朴素:人们发现「原来这事可以这么干」,而且做起来越来越容易。过去可能需要费力地拼凑上下文、精确地提示 ChatGPT 3.5;现在可能只需要把一封信拍照传进 Claude 应用,一次性就能得到一个相当不错的回复。在政策领域,这被称为「行政负担(administrative burden)」——如果这些人以前没去申领福利,很可能是因为申请流程本身太劝退。AI 把这道门槛抬走之后,被压抑的合法需求就释放了出来。这一点决定了应对策略的方向:不能简单地把增量都当成垃圾。

Dashboard showing a rising volume chart
# Distinguish bulk-agent traffic from a genuine claimant.
def triage(features):
    score = 0
    score += 3 if features["same_template_as_50_others"] else 0
    score += 2 if features["no_human_dwell_time"] else 0
    score += 2 if features["submits_24_7"] else 0
    score -= 3 if features["verified_identity"] else 0
    score -= 2 if features["attachment_is_real_document"] else 0
    return "human_review" if score >= 4 else ("fast_path" if score <= 0 else "queue")

print(triage({"same_template_as_50_others": True, "no_human_dwell_time": True,
              "submits_24_7": True, "verified_identity": False,
              "attachment_is_real_document": False}))

3. 「洪水」不等于「垃圾」:与漏洞赏金的关键差别

这种量级跃升让人想起去年许多漏洞赏金项目经历的情况:企业发现收件箱被 LLM 生成的低质量报告淹没,这些报告几乎不包含真实安全问题,企业却仍必须逐一甄别,造成巨大资源消耗。公共服务很容易面临类似困境——预算不变,却要处理 5 倍申请。但关键在于:漏洞赏金里被灌进来的多是「无价值提交」,而 Schmitz 说,公共服务的新增申请大多来自真实的人。他告诉 TechCrunch:「我们发现的绝大多数案例,都是有权申领某项东西的人,在申领那项东西。」因此,把「防刷」当作唯一目标,会同时伤到最需要服务的人群。

# Collapse near-duplicate submissions without dropping distinct claims.
import hashlib, re

def normalize(text):
    t = re.sub(r"s+", " ", text.lower()).strip()
    return t

def simhash(text, bits=64):
    v = [0] * bits
    for tok in normalize(text).split():
        h = int(hashlib.md5(tok.encode()).hexdigest(), 16)
        for i in range(bits):
            v[i] += 1 if (h >> i) & 1 else -1
    out = 0
    for i in range(bits):
        if v[i] > 0:
            out |= (1 << i)
    return out

def hamming(a, b):
    return bin(a ^ b).count("1")

a = simhash("I was overcharged for my utility bill in March")
b = simhash("I was overcharged for my utility bill in March!")
print(hamming(a, b) <= 3)

4. 工程应对之一:限流、背压与排队

无论增量多么合法,系统的并发与吞吐是有限的,工程上第一步是限流与背压。对公共服务这类接口,建议用「按身份令牌桶」而非简单封禁:允许短时突发(例如 30 次/分钟、突发 5 次),平滑流量而不是直接拉黑。当队列超过阈值时,不要粗暴丢请求,而是返回 429 并附带 retry_after,或返回 202 加预计完成时间——对 Agent 客户端而言,明确的退避信号比错误更友好。同时用容量模型把「5 倍量」翻译成「需要多少人力工时」,在承诺 SLA 之前先算清利用率,避免用同样的预算硬扛 5 倍洪峰。

Person working through documents at a desk

5. 工程应对之二:近似重复检测,而非一刀切封杀

洪水中确实混有高度模板化的批量提交,但「相似」不等于「无价值」。可行的做法是近似重复检测(如 simhash + 汉明距离)与分诊评分:把「与 50 份模板相同」「没有人类停留时间」「24 小时不间断提交」作为可疑信号,把「身份已验证」「附件是真实文档」作为减分项,得分超过阈值才转人工复核,低分走快速通道。这样既能压缩重复提交的处理成本,又不会把格式相似但内容真实的合法申请误杀。这里的分诊要可解释、可审计,因为公共服务的决策关系到真实权益。

# Backpressure: queue instead of rejecting, and tell clients when to retry.
import time

def admit(queue_len, drain_rate_per_s, incoming, max_queue=10000):
    if queue_len + incoming > max_queue:
        wait = (queue_len + incoming - max_queue) / drain_rate_per_s
        return {"status": 429, "retry_after": round(wait, 1)}
    return {"status": 202, "eta_s": round((queue_len + incoming) / drain_rate_per_s, 1)}

print(admit(9900, 50, 300))   # 429 with a retry_after
print(admit(100, 50, 10))     # 202 with an ETA

6. 从「防洪水」到「为 AI 时代重塑服务」

Schmitz 把这场洪水看成一个罕见的机遇,而不只是威胁:「让 AI 走好的一个重要部分,是能够把『好的版本』描绘清楚。任何用 ChatGPT 报过税的人都知道,这里面存在一个好版本——你被帮助了。」他说的可能是重塑几乎整个流程的时刻。落到工程上,这意味着把公共服务设计成「Agent 友好」的:提供结构化提交接口与幂等键以避免重复申报,提供清晰的字段校验与错误信息,提供稳定的限流与退避契约。实现这些时,用 JSON 格式化工具校验入站载荷,用 UUID 生成器签发幂等键,用 Cron 表达式生成器安排批量分诊任务,并用 API 测试工具验证接口在各种负载下的响应。真正的目标不是把 AI 挡在门外,而是让洪水变得可被治理。

# Make the intake agent-friendly: idempotency keys stop double-filing.
import hashlib

def submission_id(claimant, period, form_type):
    raw = f"{claimant}|{period}|{form_type}".encode()
    return hashlib.sha256(raw).hexdigest()[:32]

seen = set()
def submit(payload):
    sid = submission_id(payload["claimant"], payload["period"], payload["form"])
    if sid in seen:
        return {"status": "duplicate", "id": sid}
    seen.add(sid)
    return {"status": "created", "id": sid}

p = {"claimant": "u-123", "period": "2026-Q3", "form": "housing-complaint"}
print(submit(p), submit(p))

📌 常见问题 FAQ

什么是有据可查的增长幅度?

英国住房申诉专员投诉量从 2022 年的 2600 件升至去年的 7000 多件;美国 CFPB 同期增长约 5 倍;巴西司法请愿与德国议会请愿也出现类似跃升。

什么是有据可查的增长幅度?

英国住房申诉专员投诉量从 2022 年的 2600 件升至去年的 7000 多件;美国 CFPB 同期增长约 5 倍;巴西司法请愿与德国议会请愿也出现类似跃升。

什么是有据可查的增长幅度?

英国住房申诉专员投诉量从 2022 年的 2600 件升至去年的 7000 多件;美国 CFPB 同期增长约 5 倍;巴西司法请愿与德国议会请愿也出现类似跃升。

什么是有据可查的增长幅度?

英国住房申诉专员投诉量从 2022 年的 2600 件升至去年的 7000 多件;美国 CFPB 同期增长约 5 倍;巴西司法请愿与德国议会请愿也出现类似跃升。

什么是有据可查的增长幅度?

英国住房申诉专员投诉量从 2022 年的 2600 件升至去年的 7000 多件;美国 CFPB 同期增长约 5 倍;巴西司法请愿与德国议会请愿也出现类似跃升。

这些新增申请都是恶意的吗?

不是。Schmitz 表示绝大多数案例是享有正当权利的人在申领其应得之物;此前这些需求可能因「行政负担」过重而被压抑。

这些新增申请都是恶意的吗?

不是。Schmitz 表示绝大多数案例是享有正当权利的人在申领其应得之物;此前这些需求可能因「行政负担」过重而被压抑。

这些新增申请都是恶意的吗?

不是。Schmitz 表示绝大多数案例是享有正当权利的人在申领其应得之物;此前这些需求可能因「行政负担」过重而被压抑。

这些新增申请都是恶意的吗?

不是。Schmitz 表示绝大多数案例是享有正当权利的人在申领其应得之物;此前这些需求可能因「行政负担」过重而被压抑。

这些新增申请都是恶意的吗?

不是。Schmitz 表示绝大多数案例是享有正当权利的人在申领其应得之物;此前这些需求可能因「行政负担」过重而被压抑。

为什么这和漏洞赏金被灌水不同?

漏洞赏金收到的大多是无价值提交,而公共服务的新增申请多数来自真实的人;因此一刀切防刷会伤及最需要服务的群体。

为什么这和漏洞赏金被灌水不同?

漏洞赏金收到的大多是无价值提交,而公共服务的新增申请多数来自真实的人;因此一刀切防刷会伤及最需要服务的群体。

为什么这和漏洞赏金被灌水不同?

漏洞赏金收到的大多是无价值提交,而公共服务的新增申请多数来自真实的人;因此一刀切防刷会伤及最需要服务的群体。

为什么这和漏洞赏金被灌水不同?

漏洞赏金收到的大多是无价值提交,而公共服务的新增申请多数来自真实的人;因此一刀切防刷会伤及最需要服务的群体。

为什么这和漏洞赏金被灌水不同?

漏洞赏金收到的大多是无价值提交,而公共服务的新增申请多数来自真实的人;因此一刀切防刷会伤及最需要服务的群体。

工程上先做什么?

先做按身份的令牌桶限流与背压:允许短时突发、队列过载时返回 429 加 retry_after 或 202 加 ETA,并用容量模型把 5 倍量折算成人力工时。

工程上先做什么?

先做按身份的令牌桶限流与背压:允许短时突发、队列过载时返回 429 加 retry_after 或 202 加 ETA,并用容量模型把 5 倍量折算成人力工时。

工程上先做什么?

先做按身份的令牌桶限流与背压:允许短时突发、队列过载时返回 429 加 retry_after 或 202 加 ETA,并用容量模型把 5 倍量折算成人力工时。

工程上先做什么?

先做按身份的令牌桶限流与背压:允许短时突发、队列过载时返回 429 加 retry_after 或 202 加 ETA,并用容量模型把 5 倍量折算成人力工时。

工程上先做什么?

先做按身份的令牌桶限流与背压:允许短时突发、队列过载时返回 429 加 retry_after 或 202 加 ETA,并用容量模型把 5 倍量折算成人力工时。

如何处理批量重复提交?

用近似重复检测(如 simhash 加汉明距离)配合可解释的分诊评分,把高度模板化、无人类停留时间等作为可疑信号,超过阈值才转人工,避免误杀合法申请。

如何处理批量重复提交?

用近似重复检测(如 simhash 加汉明距离)配合可解释的分诊评分,把高度模板化、无人类停留时间等作为可疑信号,超过阈值才转人工,避免误杀合法申请。

如何处理批量重复提交?

用近似重复检测(如 simhash 加汉明距离)配合可解释的分诊评分,把高度模板化、无人类停留时间等作为可疑信号,超过阈值才转人工,避免误杀合法申请。

如何处理批量重复提交?

用近似重复检测(如 simhash 加汉明距离)配合可解释的分诊评分,把高度模板化、无人类停留时间等作为可疑信号,超过阈值才转人工,避免误杀合法申请。

如何处理批量重复提交?

用近似重复检测(如 simhash 加汉明距离)配合可解释的分诊评分,把高度模板化、无人类停留时间等作为可疑信号,超过阈值才转人工,避免误杀合法申请。