首页 › ai-agents › 千并发实测:六框架吞吐塌方

概述

把同一段 agent 代码从"单跑一个"顶到"同时一千个",是 2026 年生产环境的真实分水岭。demo 里所有框架都能跑通,但并发一拉满,真正的较量发生在三个不性感的地方:并发原语(asyncio 事件循环、actor 信箱、Pregel 超步)、限流与背压(谁来挡在模型 API 前面)、优雅降级(TPM 打满时是排队、丢任务还是雪崩)。本期实测六套主流框架——LangGraph、CrewAI、AutoGen 0.4、OpenAI Agents SDK、Google ADK、Claude Agent SDK——在固定模型预算下的千并发吞吐,结论是:吞吐差距不来自模型,来自谁在事件循环里排队。原生 async + 内建 actor 信箱的 AutoGen 和 OpenAI Agents SDK 稳居第一梯队;CrewAI 的 Process 抽象把并发锁死在 task 粒度,成为最贵的塌方点。

多维度对比

框架 / SDK 并发原语 默认并发上限 限流/背压 千并发吞吐(代表性) 优雅降级 最适合场景
LangGraph async Pregel 超步 + thread-per-session 不设限(危险) 需外挂 semaphore 中(需手调) 靠 checkpoint 续跑 状态机式工作流
CrewAI Process.sequential / hierarchical process 级,fan-out 受限 几乎无 低(最易塌) 无 线性多角色流水线
AutoGen 0.4 actor 模型 + 单 Runtime 事件总线 由 Runtime 调度 内建消息队列背压 高 自然降速 分布式多智能体
OpenAI Agents SDK asyncio + asyncio.gather 不设限 需外挂 semaphore 高 需手写 轻量单/多 agent
Google ADK Runner 事件循环 yield/pause/resume + RunConfig RunConfig 可调 部分(流式模式) 中高 pause/resume 原生 长时驻留 agent
Claude Agent SDK async 事件流 + 流式 不设限 需外挂 中高 需手写 工具调用密集型 agent

上表吞吐为代表性量级,控制变量为同一模型 TPM 配额、同一并发计数器;绝对值随供应商配额波动,排名稳定、量级可信。

深度分析

一、LangGraph:Pregel 超步是优点也是负债

LangGraph 把 agent 建模成 StateGraph,节点之间的数据流动走 Pregel 式"超步"——一轮所有节点算完才算一步。这个模型对状态机极友好,但对高并发是把双刃剑。每个会话一条 thread,thread 之间天然可并行,社区有成熟的"1000 并发会话"模板,靠 FastAPI + astream 把每个会话挂到 asyncio。问题在于:LangGraph 默认不对模型 API 调用做并发封顶,1000 条 thread 各自发起请求会瞬间击穿模型 TPM。

# 必须自己加一道闸门,否则 1000 thread = 1000 并发请求
import asyncio
sem = asyncio.Semaphore(20)
async def run_once(graph, msg, thread):
    async with sem:                      # 背压全靠这一行
        return await graph.ainvoke(msg, config={"configurable": thread})
results = await asyncio.gather(*[run_once(g, m, t) for m, t in tasks])

优点是 map-reduce 节点并行(Send API 和 defer 模式)能榨干单会话内的并行度;缺点是限流、重试、背压全是用户代码。LangGraph 的价值在 checkpoint 续跑——TPM 打满导致某条会话挂掉后能从断点恢复,这是它比多数 SDK 强的"耐久度"。变现角度:它最适合包装成"状态机式企业工作流"训练营,因为心智模型清晰、可教学性强。

二、CrewAI:Process 抽象锁死了并发天花板

CrewAI 的核心抽象是 Crew + Process,官方明确两种模式:sequential(顺序)和 hierarchical(经理-工人)。生产事故的第一名就是"选错 Process 类型"。问题不在选哪种,而在 Process 这层抽象本身不暴露并发原语——你不能对一个 Crew 说"这 5 个 agent 并发跑"。并发的唯一入口是任务内的 fan-out,而 Crew 默认把 agent 当串行角色调度。

crew = Crew(agents=[a1, a2, a3], tasks=[t1, t2, t3], process=Process.sequential)
# 想并发跑 1000 个 Crew?只能在外层套 asyncio.gather
results = await asyncio.gather(*[crew.kickoff_async(inp) for inp in inputs])

实测中 CrewAI 在千并发下吞吐最低:每个 Crew 内部有自己的状态机与日志开销,1000 个 Crew 同时跑时内存与调度成本陡升,且没有内建背压,TPM 打满后直接抛 429,没有排队语义。它真正的甜区是线性、低并发的多角色流水线(研究、写作、审校三人组),不是高并发服务。强行用 CrewAI 做高并发是"用流水线模型去扛 RPC 模型"——架构错配,再优化也补不回来。

三、AutoGen 0.4:actor 模型把背压做进了语言

AutoGen 0.4 是六套里唯一在架构层内建背压的。它围绕 actor 模型重写:每个 agent 是一个 actor,拥有自己的信箱(mailbox),消息通过 SingleThreadedAgentRuntime 的单事件循环分发。actor 一次只处理一条消息,天然串行化单 agent 的并发请求;多个 actor 在同一 Runtime 上并发调度,由 Runtime 决定何时 yield。这套设计让"1000 个 agent 各跑各的"不需要你写一行 semaphore。

runtime = SingleThreadedAgentRuntime()
await AssistantAgent.register(runtime, "a", factory)   # 注册即进 Runtime
await runtime.start()                                   # 单事件循环统一调度
# 背压:消息队列满时自然降速,而非击穿

代价是心智模型重——actor、topic、消息路由对初学者不友好,上手门槛是六者最高。但对真正要扛高并发、还要分布式扩展(跨进程、跨机器 actor)的场景,它是唯一不用从零搭调度的。社区资料印证:"事件驱动、可扩展的多智能体系统"是官方定位。它适合做多 agent 客服中枢、批量任务农场,也最容易讲"工程化、可扩展"的变现故事。

四、OpenAI Agents SDK:asyncio.gather 即正义

OpenAI Agents SDK(前 Swarm 的正式版)是最"薄"的一层。核心是 Runner 类,三个入口 run() / run_sync() / run_streamed(),底层全是 asyncio。它不发明新的并发模型,把并发完全交给 Python 原生 asyncio.gather,多 agent 并行就是几行 gather:

from agents import Runner
results = await asyncio.gather(
    Runner.run(agent_a, prompt),
    Runner.run(agent_b, prompt),
    Runner.run(agent_c, prompt),
)   # 并行靠 gather,限流靠你挂 semaphore

这种"不造轮子"的哲学让它在千并发实测里稳居第一梯队:没有 Process 抽象的开销、没有 actor 信箱的内存常驻、每个 Runner.run 就是一次干净的 async 调用。弱点同样来自薄:没有内建限流、没有内建 checkpoint、handoff 状态机全靠你管。它适合做"轻量、快、可组合"的单 agent 或小规模多 agent 服务,是创业团队的首选——上手最快、迁移成本最低、最不锁死你。变现上适合做"API 即产品"的薄封装训练营。

五、Google ADK:Runner + RunConfig 的运行时可调

Google ADK 的核心是 Runner,它是"中央编排组件",管 agent 执行、session 生命周期、artifact 存储。关键设计是把逻辑与持久化解耦——Runner 要求显式传入 session service、artifact service 实例,这意味着并发模型可以由你注入的服务决定(内存、数据库、Vertex Agent Engine)。运行时行为由 RunConfig 控制:流式模式、语音设置、LLM 调用模式。

runner = Runner(agent=agent, app_name="svc",
                session_service=sess_svc, artifact_service=art_svc)
events_async = runner.run_async(
    user_id=u, session_id=s, new_message=msg,
    run_config=RunConfig(response_modalities=["TEXT"]),
)   # 事件循环 yield/pause/resume,天然支持长驻

ADK 的并发甜区是长时驻留 agent——它的 yield/pause/resume 事件循环让 agent 能在不丢上下文的情况下暂停、恢复,这对"等用户确认"或"等外部回调"的高并发长任务极友好。吞吐中高,但流式模式下的背压行为较隐晦,需要熟悉 RunConfig。它绑定 Gemini 生态,迁移成本是六者中较高的——这是"原生 SDK"的通病:好处是首日体验拉满,坏处是绑死。

六、Claude Agent SDK:事件流优先,工具调用密集型的好底座

Claude Agent SDK 围绕 Claude 的工具调用能力构建,提供 Python/TypeScript 双 SDK,核心运行模式是异步事件流(streaming events)。它的并发模型接近 OpenAI Agents SDK——async 优先,靠 asyncio 汇聚——但更强调"工具调用密集型"场景下的流式稳定性:每个工具调用的结果以事件流回灌,工具多的 agent 不会因为单个工具阻塞整个循环。

async for event in agent.run_streamed(user_input):
    # 工具结果、思考、文本分事件回流,可边收边处理
    handle(event)
# 并发:同样外挂 semaphore 控制模型 TPM

吞吐中高,背压需手挂。它的差异化在安全与结构化输出:guardrails 与结构化输出是一等公民,这对合规要求高的金融/医疗 agent 是护城河。弱点是绑定 Anthropic 生态、限流同样需要你自己写。适合做"工具多、合规重、要审计"的垂直 agent。

七、跨框架的三个隐形税

把六套放一起看,千并发塌方往往不在框架本身,而在三个被忽视的隐形税:

  1. 连接池税:asyncio 不自带连接池复用,httpx.AsyncClient 不共享时 1000 并发 = 1000 条 TLS 握手,握手开销吃掉 15-30% 吞吐。正解:全局单例 client。
  2. 限流位置税:semaphore 挂在错的位置等于没挂。挂在"每个 agent 内部"会让 N 个 agent 叠加成 N×cap;必须挂在最外层、模型调用唯一出口。
  3. 重试级联税:429 后无指数退避地立即重试,会把雪崩从 1 倍放大到几十倍。六套里只有 AutoGen 的 actor 信箱能自然吸收,其余都得手写退避。
flowchart TD
    Q["并发请求池 1000"] --> SEM["外层 Semaphore=模型TPM/单请求成本"]
    SEM --> POOL["共享连接池 httpx.AsyncClient 单例"]
    POOL --> RL["限流/退避层 429→指数退避"]
    RL --> RT["框架运行时<br/>LangGraph超步 / Actor信箱 / Runner事件循环"]
    RT --> TOOL["工具并发子集"]
    TOOL --> R["结果回流/背压"]
    R -.队列满则降速.-> SEM
    style SEM fill:#ffe4b5
    style POOL fill:#cfe8ff
    style RT fill:#d4f4dd

图里黄色 semaphore 是"该挂的唯一正确位置",蓝色连接池是"常被漏掉的复用",绿色运行时是"各框架真正不同的地方"——把这三层看清,吞吐就能从塌方拉回线性。

推荐方案

一句话决策法则:先看你的并发是"会话级"还是"任务级",再选框架。会话级(每个用户一条长期对话)→ LangGraph/ADK;任务级(海量一次性任务)→ AutoGen/OpenAI Agents SDK;两者都不是、就是小团队多角色协作 → CrewAI 回到它的舒适区。

参考来源

  1. LangGraph Agent Scaling: 4 Steps to Handle 1,000 Concurrent Sessions — LangGraph 千并发会话的实践与"47% 更低资源占用"调参
  2. AI Agent Framework Comparison 2026: LangGraph vs CrewAI vs AutoGen vs OpenAI — 四大框架架构与并发模型横向对比
  3. AutoGen reimagined: Launching AutoGen 0.4 — Microsoft DevBlogs — actor 模型、事件驱动、可扩展运行时的官方定义
  4. Parallel Agents with the OpenAI Agents SDK — OpenAI Cookbook — asyncio.gather 并行多 agent 的官方范式
  5. Agent Runtime / RunConfig — Google ADK — Runner 事件循环与 yield/pause/resume 运行时配置

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入