Agent 技术选型:从最小确定性流程逐层增加能力
核验日期:2026-07-16。比较对象为原生模型 API/自建工具循环、MCP、A2A、OpenAI Agents SDK TS、LangGraph.js 与 AI SDK。它们处在不同层,表格用于界定职责,不是同类产品排行榜。
选型时别急着问“哪个 Agent 框架最强”,先看当前任务缺少哪种原语:模型调用、结构化输出、工具连接、远程 Agent 协作、Web 流、角色交接、持久图、人工等待还是质量门禁。确定性步骤用普通代码表达,只有动态语义决策需要模型;协议和框架按边界逐步增加,不必一次装齐。
先画任务,不先选库
写出输入、成功结果、允许数据/动作、状态、最长时间、并发、失败恢复、权限、人工节点、评测和成本。若步骤和分支可以完整枚举,普通函数/队列/工作流往往比 Agent Loop 可靠。若只是从自然语言抽取一个对象,单次结构化输出即可。若要基于语义反复选择工具,才进入有限 Agent Loop。
AI SDK 也可执行多步工具,Agents SDK 也可流式,LangGraph 也能组合模型供应商;流程图表示主要选型重心,不是排他能力声明。
分层坐标
| 技术 | 主要抽象 | 稳定解决 | 不自动解决 |
|---|---|---|---|
| 原生模型 API | request/response/stream | 最小模型能力、供应商最新特性 | 工具循环、UI、持久状态、评测、安全 |
| 自建 Agent Loop | 自有状态机/端口 | 精确控制 step、预算、工具与错误 | 协议生态、现成 trace/session/HITL |
| MCP | Host-Client-Server、tools/resources/prompts | 能力发现与工具/上下文互操作 | Agent 规划、业务授权、长任务编排 |
| A2A | Agent Card、Message、Task、Artifact | 独立 Agent 的异步任务互操作 | 本地工具执行、跨系统事务、结果可信 |
| OpenAI Agents SDK TS | Agent、Runner、tool、handoff、guardrail | 轻量 Agent 循环、多 Agent 原语、trace/session/HITL | 业务事务、通用持久图、多 provider UI 一致性 |
| LangGraph.js | state graph/entrypoint、checkpoint、interrupt | 长运行状态、恢复、人工介入、显式路线 | Prompt/模型质量、工具权限、业务 exactly-once |
| AI SDK | generate/stream、tools、UI messages/provider | TypeScript 多 provider 调用与 Web 流式体验 | durable workflow、领域授权、任务数据库 |
协议可以和框架组合:LangGraph 节点调用 MCP 工具,某节点通过 A2A 委托远程 Agent;AI SDK 在 Web 层流式展示 LangGraph task;Agents SDK tool adapter 连接领域 API。组合前给每层唯一 owner:谁推进 loop,谁持久化,谁重试,谁审批,谁把事件流给浏览器。两套 loop 或两套 retry 嵌套会造成指数调用。
固定成本比较
原生 API 固定成本最低,但工具/trace/兼容需要自建。自建循环代码量不必大,真正成本在持续维护模型适配、approval、session 和观测。Agents SDK 固定成本是框架类型、模型生态和运行语义;LangGraph 增加 state schema、checkpoint store、节点/图版本与恢复运维;AI SDK 增加 provider/UI message/stream 协议;MCP/A2A 增加协议生命周期、认证、发现、兼容和远端 SLO。
不要只比较初始代码行。用三年成本看升级、测试、数据迁移、on-call、供应商变化、招聘和退出。框架越多,配置组合与安全审查越多;但成熟能力也可能显著减少自研缺陷。以 spike 证据而非偏好决策。
原生 API 与自建有限循环
适合单一模型、少量工具、严格自定义状态和团队愿意维护薄适配器。优点是行为可见、依赖少、领域类型不外泄;缺点是 provider 流/工具差异、trace/session/approval 需要自己定义。最小循环加 max step、deadline、验证、授权和 fake model 通常不到一个大型框架的复杂度。
退出成本最低:模型适配器和工具端口可替换。风险是团队以为“代码短”就漏掉幂等、审批和持久化。若需求开始出现多种 handoff、长等待和 checkpoint,不要继续向一个 while 塞状态,升级为显式工作流。
OpenAI Agents SDK TS
适合以 OpenAI 模型/平台为主、需要工具、Agent 角色、manager/handoff、guardrail、sessions、HITL 和内建 tracing 的服务。它提供统一 Runner 语义,减少自建胶水。团队仍需用领域服务执行工具,并核对 guardrail 对 function/hosted/MCP/agent-as-tool 等不同路径的覆盖。
主要锁定来自 SDK 模型/消息/run item/trace 语义和平台能力。通过 application port、领域 Schema、独立 session/task store 和 OpenTelemetry 关联降低退出成本。若未来切换 provider 是硬约束,用实际第二 provider spike 验证,不凭“可以封装”口头保证。
LangGraph.js
适合跨请求或跨天的状态图、动态路由、并行、checkpoint/replay、人工中断和复杂恢复。图把每个节点的输入/输出与路线变成可观察状态,特别适合审核“等待什么、下一步是什么”。Functional API 可减少为了图而重构。
成本是持久状态 schema、thread 并发、checkpointer 运维、interrupt 重放语义、图/代码升级和旧 checkpoint 迁移。外部副作用仍需幂等。若组织已有 Temporal/Camunda/队列工作流,可把模型当 activity,比较是否真的需要 LangGraph 的 Agent 状态/调试;不要默认双引擎。
AI SDK
适合 TypeScript Web 产品,需要 provider abstraction、streamText、类型化 tools/outputs、UI Message 流和 React/Next.js 等交互。它让 text/tool/source/error 成为类型化 parts,比手写 SSE 字符串可靠。provider 差异通过 warning/options/profile 显式管理。
成本是 AI SDK major/实验 API、消息持久化迁移和多 provider 实际能力差。它不是长任务引擎:超出 HTTP 生命周期的 run 要交给 task/worker。若没有 Web 流或多 provider 需求,官方 provider SDK 可能更直接。
MCP
适合一个或多个 Host 需要以标准方式发现多个 server 的 tools/resources/prompts,或要接入外部生态。它把 N×M 私有 adapter 降为协议 client/server,但只在双方真实采用且 capability 有重用价值时成立。
成本是协议版本、stdio/HTTP 生命周期、OAuth、用户同意、server 供应链和内容注入。一个固定内部 API 只有一个调用方时,OpenAPI/typed SDK 更简单。保留领域 API,MCP server 做 adapter,避免协议侵入业务。
A2A
适合独立 Agent 有自身所有者、部署、安全域和长任务生命周期,需要 Agent Card 发现、Message/Task/Artifact、stream/push 互操作。比如组织 A 委托组织 B 的研究 Agent,而不是调用一个具体搜索函数。
成本是远端身份/委托、Task 持久、幂等、webhook、结果验证、跨组织 SLO 和协议兼容。内部“规划 Agent 调写作 Agent”若同进程、同团队且无独立生命周期,普通函数/子图更便宜。A2A 不保证对方结果正确,必须本地验收。
硬约束淘汰
先用不可妥协条件淘汰:数据地域/供应商政策;目标 runtime;模型/工具能力;离线/私有部署;长任务/checkpoint;协议互操作;身份/OAuth;可访问性;SLO;预算;许可与支持;团队语言。硬约束没有满足,不用加权总分补救。
例:任务必须跨天等待审批且进程重启恢复,纯 HTTP streamText 不是完整方案;必须让多个外部 Host 使用标准工具,项目内自建函数不够;只能使用多个供应商且随时路由,把单平台运行类型铺满领域层会增迁移风险。
证据评分
硬约束后按项目权重比较,不复制通用分数:
| 维度 | 要求的证据 |
|---|---|
| 任务质量 | 固定数据集、分层成功/失败、真实模型多次运行 |
| 可靠性 | timeout、重试、取消、崩溃恢复、幂等和旧状态迁移演练 |
| 安全 | prompt injection、越权、审批、数据外发、供应链负例 |
| 性能 | 同输入的 TTFT/p95/p99、step/tool、并发与 backpressure |
| 成本 | 每成功任务 token/API/存储/trace/人工与失败重试 |
| 开发 | 首个示例、调试、测试、类型、文档和本地体验 |
| 运维 | 部署、指标、trace、任务扫描、升级/回滚和 on-call |
| 生态 | 所需 provider/tool/protocol/持久后端是否成熟 |
| 退出 | 领域类型隔离、数据导出、替换 spike 与双跑方案 |
每项记录环境、版本、样本、原始结果、owner 和复审日期。没有实际 prototype 的“5 分”只是猜测。
典型场景决策
FAQ/文档问答
固定 RAG pipeline:query → ACL 检索 → 重排 → context → 单次结构化/引用回答。通常不需要 Agent Loop、A2A 或 LangGraph。Web 需要流可用 AI SDK;多 Host 复用知识资源可加 MCP Resource/Tool。评测重点是检索、引用和拒答。
技术目录助手
只读查询用一到两个 function tools + 有限循环,自建或 Agents SDK。Next.js UI 可用 AI SDK。目录工具被多个 IDE/Host 使用才加 MCP。写收藏/任务采用预览审批、领域 API 幂等,不把事务放模型。若有跨天迁移计划/多审批,再引入 durable graph。
客服工单
检索知识、读取订单、草拟回复可单 Agent;退款/发信严格审批。复杂分诊可 Agents SDK handoff 或显式图。长期等待客户输入/后台任务需要持久工作流。外包专门 Agent 跨组织时才评估 A2A。质量按解决、引用、正确工具和危险副作用分层。
代码执行 Agent
框架不是首要决策,沙箱、仓库权限、网络、secret、资源和 patch 审核才是。工具循环最小化,写文件/命令明确批准或策略,测试确定性。跨 IDE 工具可 MCP;远程构建 Agent 独立服务可 A2A。不可因使用成熟 SDK 就直接给宿主 shell。
长运行研究/报告
摄取/检索、并行子任务、人工确认和最终合成适合 LangGraph 或通用 durable workflow;浏览器只订阅 task stream。外部研究 Agent 可 A2A,数据库/搜索工具可 MCP。各子任务预算与来源去重,最终 claim-source 验证。若只有一次搜索+摘要,保持固定 pipeline。
组合架构的 Owner 表
一个可控组合示例:AI SDK 只拥有 HTTP/UI stream;LangGraph 拥有 task 状态和节点恢复;节点内 Agents SDK 或自建循环最多选其一拥有模型 tool loop;MCP adapter 只连接工具;A2A adapter 只连接远端任务;领域服务拥有授权/事务/幂等;评测平台读取统一 trace。
禁止的模糊组合:AI SDK 自动多步外面又包 Agents Runner,Runner tool 内再启动 LangGraph Agent;三层都重试模型。若确需嵌套,定义最大总步数、父子 deadline、usage 汇总、取消传播、trace parent 和失败映射。
数据与状态可移植性
领域 task/session/message/citation/tool call 使用项目 Schema,SDK 对象作为 adapter 输入输出;存储模型/Prompt/tool/index/framework 版本但不把私有序列化当唯一记录。checkpoint 需要导出/迁移策略;trace 导出 OpenTelemetry 或通用事件;MCP/A2A 保存协议消息和业务映射。
退出演练:用 fake model 跑同一 contract;导出一条会话/任务;把一个工具换为直接 API;把模型 provider 换候选;从旧 checkpoint/approval 恢复。不能执行的退出计划不算计划。
版本与升级策略
锁依赖与协议观察点,订阅 Release/安全公告。升级先读 migration/changelog,跑类型/单元/协议 golden/离线评测/安全/性能;对等待任务做兼容组合;shadow/canary 后扩量。模型别名变化也当依赖升级。不要在同一发布同时换模型、Prompt、框架 major 和索引,除非有分因子证据。
MCP/A2A 通过协商和 capability 处理不同版本,仍要测试真实对端。SDK 的 experimental API 可在小版本变化,隔离封装。记录最后核验日期和下次触发:新风险、新 provider、流量/SLO、跨组织、长任务、重大版本或团队变化。
最小复杂度阶梯
- 普通函数/规则解决确定部分。
- 单次模型调用 + Structured Output。
- 固定 RAG + 引用。
- 一个有限工具循环,fake model 可测。
- Web 流/UI 协议(确有交互需求)。
- MCP(确有跨 Host server 互操作)。
- 持久图/工作流(确有长任务、恢复、人工等待)。
- A2A(确有独立远程 Agent 边界)。
- 多 Agent/动态路由(数据证明单 Agent 不够)。
每一级先达到质量、安全、可靠性和成本门槛再升级。层数不是成熟度,删掉不必要层同样是工程进步。
决策记录模板
记录问题/非目标、当前参照结果、任务/数据/权限、硬约束、候选、prototype 版本/环境、质量/安全/性能/成本结果、选择、为什么不选其他、已知风险与 owner、数据/状态退出、发布/回滚、复审触发。Decision Record 和原始数据同仓,不把市场文案当证据。
最终评审随机追问:为何需要循环而非固定流程;谁拥有状态/重试;工具如何授权/幂等;断线/部署如何恢复;某个外部 server/Agent 如何信任;框架升级怎样处理旧任务;质量回归怎样发现;总成本如何限制。答不清就继续简化或补证据。
结论
默认从原生能力开始:RAG 提供事实,Schema 提供结构,确定性执行器提供权限和副作用,评测提供变更证据。Agents SDK 优化轻量 Agent 原语,LangGraph 优化持久状态图,AI SDK 优化 TypeScript provider/Web 流,MCP 优化工具/资源互操作,A2A 优化独立 Agent 任务互操作。它们互补,但没有一个能替代安全后端和清晰任务规格。