框架对比文章经常试图选出一个赢家,但这本身就是错误的问题。

Agent 框架只是更大系统里的一个运行时选择。完整系统还包括模型、工具、身份、数据、队列、存储、策略、可观测性和运维人员。一个在 Demo 里显得优雅的框架,一旦遇到工作进程崩溃后要恢复、要为一笔退款留下"谁批准的"证据链、或要阻止不可信文档去挑选工具时,可能完全不是好选择。

本文不制造通用排行榜,而是对比六类 Agent 运行时,提供:

  • 区分框架各层次的词汇;
  • 以工作负载为中心的决策矩阵;
  • 可复现的公平评测流程;
  • 常被营销表格遗漏的失败与安全指标;
  • 保留业务逻辑、降低框架迁移成本的方法。

文末的官方文档才是当前 API 的权威依据。产品能力和版本会不断变化,本文记录的是架构取舍,而非永久的功能承诺。

先给结论

从"能表达这条工作流的最简单运行时"开始:

需求 可优先考察 原因
显式分支、持久状态、回放、审批暂停 LangGraph 或其他低层工作流运行时 拓扑和状态变化保持可见
Python 优先的小型循环,含交接、工具、护栏、追踪 OpenAI Agents SDK 原语少,且内置托管的 Agent 循环
面向多个模型提供方的代码优先循环 Strands Agents Agent 抽象轻量,提供方可配置
用 Agent、任务、Crew、Flow 表达业务流程 CrewAI 声明式的任务/流程模型更贴近业务
对话密集的群体模式,或已有 AutoGen 代码 AG2 丰富的对话抽象可降低迁移成本
以 Claude 为中心、需要其工作区与沙箱模型的运行时 Claude Agent SDK 仅当其当前产品与运营约束适配时才用

这些只是起始假设。用真实工具做一个两天的验证性原型(Spike),比任何流行度排名都更有证据价值。

先决定是否真的需要 Agent

在比较框架之前,先比较架构。

以下情况优先使用确定性工作流:

  • 步骤和分支已知;
  • 每个操作有稳定的输入和输出;
  • 可审计性比开放式探索更重要;
  • 故障恢复可以建模为状态机。

以下情况使用配备窄化工具的单个 Agent:

  • 任务需要灵活地理解自然语言;
  • 可用的操作数量有限;
  • 重要结果可以人工审核;
  • 循环可以设置硬性上限。

只有当多个 Agent 真正提供了一道边界时才使用它:

  • 不同的凭证或数据范围;
  • 不应共享的独立上下文;
  • 可以独立评测的专业工作;
  • 并行工作的收益足以抵消协调成本。

"Agent 更多"不是一种成熟度等级,而是又一套分布式系统。

先拆分系统层次

很多对比表把不同层次的产品塞进同一行。更清晰的模型是:

text
模型提供方
    |
Agent 循环 / 运行框架
    |
编排运行时 -------- 状态与持久化
    |
工具与 MCP 适配器 - 身份与策略
    |
外部服务 ---------- 追踪与运营
  • **模型提供方:**生成文本、结构化输出或工具调用提议。
  • **Agent 循环:**在拿到工具结果后决定如何继续。
  • **编排运行时:**表示分支、重试、事件和依赖关系。
  • **状态层:**保存工作状态、检查点、记忆和产物。
  • **工具层:**在身份和授权约束下执行各项能力。
  • **运营层:**提供队列、截止时间、追踪、评测和事故响应。

没有哪个框架能免去对其他层的需求。内置的追踪页面不等于租户级审计日志;检查点 API 也不自动等于事务;MCP 连接器更不是一套授权系统。

六类能力画像

LangGraph:显式的编排运行时

LangGraph 把自己定位为面向长时间、有状态 Agent 的低层编排框架和运行时。它有用的核心抽象,是一张由节点读取并更新状态的图。当前文档强调持久化、持久化执行、流式输出,以及人在回路的中断。

优势

  • 拓扑和条件路由可见;
  • 检查点可持久化、工作可恢复;
  • 状态归约器和子图组合明确;
  • 适合审批、回放和运营调试。

成本

  • 需要更多的设计和状态建模工作;
  • 很容易构建出过于复杂的图;
  • 授权、事务和工具策略仍由应用代码负责;
  • 周边的 LangChain 生态是可选的,但混用其抽象时要划清边界。

当工作流形状本身就是产品要求、而不仅仅是实现细节时,选择它。

OpenAI Agents SDK:围绕 Agent 循环的轻量运行时

OpenAI Agents SDK 提供一小组原语:Agent、工具、交接(或"Agent 作为工具")、护栏、会话和追踪。它的文档明确区分了 SDK 与直接调用 Responses API:SDK 在模型调用之上增加了更高层的循环和运行时行为。

优势

  • Python 应用的快速落地路径;
  • 交接与专家 Agent 的组合直观;
  • 函数工具的 Schema 自动生成与校验;
  • 内置追踪,并可选用会话或沙箱工作流。

成本

  • 需要核验提供方和运行时假设是否满足可移植性;
  • 一次交接不等于一笔完整的工作流事务;
  • 护栏不能替代对象级授权;
  • 长时间运行的持久性仍需独立的运营设计。

当少量原语恰好映射到任务、且团队愿意自己拥有周边服务时使用它。

Strands Agents:代码优先、模型驱动的循环

Strands 提供面向 Python 和 TypeScript 的轻量代码优先 SDK,核心是一个简单的 Agent 抽象和可配置的模型提供方。它模型驱动的循环代码很简洁,但代码简洁并不意味着行为确定。

优势

  • 单 Agent 与工具类工作流的仪式感低;
  • 提供方和部署方式灵活;
  • 从本地原型到服务化的路径直接;
  • 适合让模型在少量工具中自主选择的受限任务。

成本

  • 由模型选择的路由,比显式的图更难审计;
  • 状态持久化和业务事务仍是应用的责任;
  • 社区工具需要供应链和权限审查;
  • 与 AWS 的适配既可能是优势,也可能形成耦合,取决于部署方式。

在定义好外部预算和策略之后,把它用于边界清晰的工具类任务。

CrewAI:Agent、任务、Crew 与 Flow

CrewAI 围绕 Agent、任务、Crew 和 Flow 组织工作。当前文档还覆盖了状态、持久化、恢复、护栏、回调,以及人在回路的触发点。

优势

  • 词汇贴近业务流程;
  • 支持顺序、层级和混合的任务流程;
  • 原型路径相对易上手;
  • Flow 能提供比自由式 Crew 更明确的外层工作流。

成本

  • 角色和背景设定不能替代一套权限模型;
  • 任务委派可能隐藏延迟、Token 和故障成本;
  • 持久性行为必须实测,不能从抽象名称去推断;
  • 企业版功能与开源运行时的能力可能不同。

当任务/流程语义确有价值、且团队仍愿意检查底层调用时使用它。

AG2:面向对话的协调

AG2 是 AutoGen 家族的社区项目,其差异化在于面向对话的协调:多个 Agent 在一个管理者和终止策略下交换消息。

优势

  • 能表达群聊、嵌套和顺序对话等模式;
  • 适合已有 AutoGen 家族代码的项目;
  • 天然契合研究性模拟和审议类实验。

成本

  • 自由式对话可能成倍增加模型调用,并让终止条件变得不透明;
  • 达成共识不等于结论正确;
  • 代码执行和生成的产物必须隔离;
  • 采用前应核验项目方向、兼容性和支持质量。

当"对话本身"就是工作负载时使用它,而不是因为"多 Agent"听起来更先进。

Claude Agent SDK:与产品绑定的运行时

Claude Agent SDK 应当被当作一个特定产品的运行时来评估,而不是一个通用的 Function Calling 包装器。在投入之前,请先核对当前的软件包、模型支持、会话语义、工作区隔离、MCP 生命周期、网络策略、价格和数据驻留。

可能适合

  • 以 Claude 为中心的应用;
  • 需要托管工作区或沙箱模型的任务;
  • 愿意接受提供方耦合的组织。

必须先回答的问题

  • 当前支持哪个 API 和软件包?
  • 保存什么、保存多久、保存在哪里?
  • 默认启用了哪些工具和网络路径?
  • 用户身份、审批、取消和审计如何逐层传播?
  • 如果运行时或模型发生变化,退出方案是什么?

不要从一篇博客里复制一段 SDK 代码,就推断它带来了生产级保证。

按决策维度比较

维度 真正应该问的问题
工作流拓扑 分支、循环、依赖和终止是否显式?
状态 崩溃后能恢复吗?状态是否有版本、且按租户隔离?
人工控制 能暂停并恢复"同一个精确操作"吗?
模型可移植性 更换模型是否需要重写业务逻辑?
工具治理 身份、对象级授权、来源和外发是否位于模型之外?
故障语义 超时、重复投递、部分失败和取消分别如何处理?
可观测性 运维人员能还原模型、工具、状态、策略和用户事件吗?
部署 能运行在要求的区域、网络、队列和算力模型中吗?
成本 每次成功任务的成本是多少(含重试和空转的工作进程)?
退出成本 哪些代码可迁移,哪些代码绑定了框架?

状态不是记忆

要区分:

  • **线程状态:**当前这一次运行及其检查点;
  • **工作流状态:**业务进度和外部事务 ID;
  • **长期记忆:**有自己的同意与删除策略的、可复用的用户或领域信息;
  • **产物:**有所有者和保留期限的文件与报告;
  • **审计事件:**关于"发生过什么"的不可变证据。

一个框架可能只提供其中一项,把其余的都留给你。

交接不是授权

无论框架把它叫作交接、委派、子 Agent 还是管理者,接收方都必须只拿到一个缩减后的能力集合。传递一个类型化的任务和范围化的上下文,而不是把父 Agent 的环境凭证和完整对话记录整个交过去。

安全与运营

把模型输出、工具描述、MCP 元数据、检索到的文档和工具结果,全部当作不可信输入。绝不能让框架把一句有说服力的话自动升级为权威指令。

最低控制要求:

  • 位于模型之外的、经过认证的主体与租户上下文;
  • 每一次工具调用都做对象级授权;
  • 使用窄化的业务工具,而非通用的 SQL、HTTP 和 Shell;
  • 为外部来源派生的数据追踪其来源;
  • 把确认绑定到规范化后的参数和资源版本上;
  • 让生成的代码运行在没有环境默认密钥的沙箱里;
  • 出站白名单与重定向控制;
  • 写操作使用持久化的幂等机制;
  • 步数、时间、Token、成本和并发的预算;
  • 把删除操作传播到检查点、记忆、索引和产物。

选型时,加入一个滥用场景来检验:

一份恶意文档要求 Agent 把私有数据发送到一个新地址,而工作进程恰好在审批期间重启了。

真正的赢家不是功能表最漂亮的框架,而是其周边架构能够证明"这一幕不会变成越权副作用"的框架。

可复现的评测流程

如果别人无法复现你的实验,就不要发布分数。

1. 固定变量

记录:

  • 精确的软件包版本和提交号;
  • 模型、端点、温度和推理设置;
  • Prompt、工具 Schema 和工具策略;
  • 硬件、区域、并发和网络;
  • 数据集版本和随机种子;
  • 重试、超时和 Token 预算。

2. 建立任务矩阵

至少包含:

  • 一次确定性的读操作;
  • 一次带单点故障的多步读操作;
  • 一次需要审批的写操作;
  • 一次超时后的重复投递;
  • 一次工作进程从检查点重启;
  • 一份含注入指令的对抗性文档;
  • 一次跨租户访问尝试;
  • 一次在工具调用期间的取消;
  • 一个"正确答案是拒绝或反问"的任务。

3. 测量结果

text
utility_success =
  正确完成用户可见的任务,且未违反策略

unsafe_success =
  发生了越权读取、写入、披露或外部副作用

recovery_success =
  在注入故障或重启之后正确地继续

cost_per_success =
  (模型 + 工具 + 计算 + 运维成本) / 成功任务数

报告分布,而不是单一平均值:

  • 任务成功率与拒答质量;
  • 越权操作率;
  • P50/P95 延迟;
  • 模型调用、工具调用、Token 和重试次数;
  • 重启与重复投递下的恢复情况;
  • 每次事故的运维分钟数;
  • 部署与迁移的工作量。

不要跨不同模型或不同 Prompt 去比较裸准确率。只有当任务、策略、模型和预算都保持一致时,一次框架基准才有意义。

4. 测试负向路径

最强的框架不是"永远能完成任务"的那个,而是能够做到以下几点的那个:

  • 拒绝一个越权请求;
  • 在事务失败时保住其不变量;
  • 停止一个无限循环;
  • 诚实地报告部分结果;
  • 在不重复触发副作用的前提下恢复;
  • 给运维人员留下一段可审计的解释。

迁移策略

让下面这些边界保持与框架无关:

text
领域命令
  -> 类型化的工具契约
  -> 策略与授权
  -> 幂等适配器
  -> 状态/事件 Schema
  -> 框架运行时

不要把业务规则放进 Prompt 字符串、框架回调或提供方专用的消息对象里。围绕工具和状态转换编写契约测试,这样一次迁移改动的就只是编排代码,而不会牵动支付、身份或数据策略。

一套务实的迁移顺序:

  1. 盘点工具、副作用、身份和状态;
  2. 从现有的 Agent 循环里提取领域命令;
  3. 补上授权、幂等和结果契约;
  4. 用匿名化的追踪数据在新运行时上回放;
  5. 执行负向路径矩阵;
  6. 在切换写操作之前先做影子流量;
  7. 为状态和外部操作保留一条回滚路径。

常见问题

功能更多的框架更适合生产吗?

不一定。更多功能也可能意味着更多未经审查的行为。生产就绪指的是:能执行不变量、能从故障中恢复、能观察结果,并能在自己的威胁与成本模型内运营系统。

应该从多 Agent 设计开始吗?

不应该。先从一个确定性工作流、或一个有边界的 Agent 开始。只有当一个独立的上下文、权限或可独立测试的能力足以证明其合理时,才增加另一个 Agent。

供应商锁定一定是坏事吗?

不一定。一个托管运行时可以减少运维工作,并提供有价值的能力。把耦合当作一个刻意的取舍来处理:记录清楚数据路径,导出状态与追踪数据,隔离领域契约,并算清退出成本。

基准百分比能决定框架吗?

不能。Agent 的性能,是模型、Prompt、工具、数据、策略、运行时和预算共同决定的属性。把公开基准当作假设,再在你自己的工作负载上执行一次受控评测。

总结

脱离工作负载去谈"Agent 框架之战",没有意义。可持续的选择,是那个能让你在意的重要属性变得可见、可执行的框架:

  • 需要恢复时,使用显式状态;
  • 需要安全时,使用窄化能力;
  • 需要控制成本时,使用有界循环;
  • 需要运营时,使用追踪和回放;
  • 技术路线可能调整时,使用可移植的领域契约。

用能表达真实工作流的最小运行时去做原型;只有当它通过了故障、滥用、重启和成本的考验之后,才把它提升到生产环境。这个方法,比选择功能列表最响亮的框架要可靠得多。

一手资料