LangGraph / OpenAI Agents SDK / ADK / CrewAI 怎么选?为什么不少团队最后自己写循环?

Q3-17框架选型高频框架选型LangGraphAgents SDKADKCrewAI抽象泄漏绞杀者重写

谁在问:一二面通用;面试官用「为什么很多团队最后自己写循环」这一问区分调包与掌控

口语化问法

  • 你们用的什么框架?当初怎么选的?
  • 这几个主流框架你怎么比较?
  • 听说很多团队做着做着就把框架扔了自己写,你怎么看?

考察意图

框架名单会随时间变,所以面试官不会以"你知不知道某个框架"论英雄,他要看的是:

  1. 有没有选型判据。 能说出"我需要在循环的哪一层插手、需不需要持久化、能不能拿到最终请求体"的人,换个框架名单照样会选。
  2. 理解不理解框架的价值边界。 核心循环本身只有几十行(见 Q3-06),框架的价值在周边——持久化、人在环、可观测。看不到这一点的人,会把框架当成"Agent 能力的来源"。
  3. 有没有被抽象泄漏坑过。 说得出"排障时要读框架源码才知道 prompt 长什么样"的,是真用过。
  4. 会不会平衡。 一味吹"自己写更可控"的人,通常没算过持久化、并发、trace、人在环这些要自己补的账。

参考答案

图 2 · 60 分与 90 分差在哪:代价、演进、怎么验证

60

60 分答案(及格线)

我不会先看框架名单,先看四个需求维度:

维度 问自己什么 影响什么
控制粒度 要不要在每一步插手(注入指令、条件分支、中断)? 图/状态机类框架 vs 轻量 SDK
状态与持久化 任务会不会跑很久、要不要断点续跑、有没有人工审批? 是否需要 checkpoint 能力
可观测 trace 是否内建、能否接入现有体系 排障成本
绑定风险 是否绑定某家模型或云生态 长期迁移成本

截至 2026-08 的粗略定位(以官方文档为准):LangGraph 走图/状态机路线,控制力和持久化、断点续跑是强项,代价是概念多、学习曲线陡;OpenAI Agents SDK 轻量、贴近原生接口,上手快,但生态倾向明显;Google ADK 面向企业部署,和自家云与模型整合紧;CrewAI 用角色协作的抽象,做 demo 极快,但控制粒度偏粗、深度定制时容易顶到天花板。

至于"很多团队最后自己写循环",原因是核心循环本身很短,而框架的抽象在排障时反而挡路。

90

90 分答案(有生产经验的回答)

补三层。

1. 加两条选型硬指标,比功能列表更实用。

  • 能不能一行代码拿到最终请求体? 上下文和提示词是产品的核心资产,看不到发出去的是什么,调优和排障都无从谈起。这条我会在技术选型时当场试,试不出来就淘汰。
  • 能不能只用一部分? 好的库允许你只取持久化或只取 trace;框架式的全家桶往往要么全用要么不用。可拆卸性直接决定了将来的迁移成本。

再加一条现实考量:这个领域 2024–2026 的破坏性变更非常频繁,升级成本要计入选型。

2. "自己写循环"的真实动因,三条。

  • 核心逻辑短:一个带预算、指纹、降级的循环几十行就够(Q3-06)。框架替你省下的这部分,其实不是瓶颈。
  • 抽象泄漏:出问题要读源码才知道框架偷偷加了什么系统提示、重写了工具描述、吞掉了哪个错误、token 统计为什么对不上。调试成本从"写代码"转移到"读别人的代码",而且发生在最紧急的时候。
  • 上下文控制被挡:上下文工程恰恰是差异化所在(见 Q1-11),而框架的默认封装往往正好挡在这一层。

3. 但要说清自己写的代价,否则这个答案是偏的。 自建意味着持久化与恢复、并发与限流、重试与幂等、trace 接入、人在环审批、提示词版本管理,全部自己建;团队新人上手也没有现成文档可依。所以正确表述是:框架的价值随团队成熟度和场景特殊性递减——早期用框架跑通业务假设是划算的,跑通之后再逐层收回控制权。

4. 我的实际选择通常是折中:自己写核心循环,周边用库不用框架——schema 校验用一个库、持久化用现成的工作流引擎、trace 直接对 OTel(截至 2026-08,GenAI 语义约定 v1.41 已定义 invoke_agent → chat → execute_tool 的嵌套与 token 指标,虽然多数属性仍是实验性,但对齐它能避免将来重做)。这样每一块都可替换,没有哪一块能绑架我。

5. 三段式看框架解决脚手架、持久化、可观测、社区验证过的模式;代价是抽象泄漏、上下文控制被挡、破坏性变更、生态绑定;不该用在核心竞争力就是上下文编排、已有成熟基础设施、或需要极致定制的场景。

追问链

图 1 · 五层追问树:面试官会往哪儿挖
五问不问框架名单,只问「你要在循环的哪一层插手」

  1. 长任务 + 中途人工审批 + 断线能续跑,你怎么选?

    期望三条指向同一个能力 —— 状态外置且可恢复,执行状态不能只活在进程内存。两条路径:带 checkpoint 的图类框架;或自己写循环 + 挂公司已有的工作流引擎管持久化与恢复。约束:审批等待是小时到天级,循环必须能挂起—唤醒,每步幂等(唤醒后不重跑已完成的写),状态要人看得懂
    信号抓住「状态外置 + 步骤幂等」、提到公司已有工作流引擎 → 做过长任务;只答「选 LangGraph 有 checkpoint」→ 记住功能没想清约束
  2. 自己写循环,要补的东西里哪三样最容易低估?

    期望① 持久化与恢复(进程重启、滚动更新时在跑的任务);② 提示词与工具定义的版本管理:能对比、回滚、关联评测,出事才建;③ 人在环:审批、中断、接管的状态流转,比循环复杂。其余:并发限流、重试幂等、trace、成本核算 —— 没一样是 Agent 特有,后端越成熟自建成本越低
    信号给得出「后端成熟度决定自建成本」这个结论 → 想通了;只答「要自己实现重试和日志」→ 低估了工作量
  3. 抽象泄漏具体长什么样?举个你遇到过的例子

    期望框架往 system prompt 偷加内容;工具描述被重写或截断,选择准确率莫名下降;内置重试吞错误,日志里看不到真实原因;token 统计和账单对不上(内部有隐藏调用);流式与非流式行为不一致。共同点:问题都在你看不见的那一层,只能读源码;选型第一件事是打印最终请求体
    信号举得出至少两种具体形态 → 用过且踩过;只会说「抽象泄漏就是封装太深」→ 是名词不是经历
  4. 怎么避免被框架绑死?

    期望领域资产和框架隔离:工具实现、提示词、评测集、trace 四样必须能脱离框架单独跑和评估;接口层用自己的契约包一层,核心逻辑不 import 框架类型。工程手段:pin 版本、升级走灰度、升级前用评测集跑回归(升级引发行为漂移很常见且不报错)。检验标准:能不能一个下午换掉框架
    信号给出「评测集与 trace 必须独立于框架」和那条一下午的检验标准 → 吃过迁移的苦;只答「多写抽象层」→ 太笼统
  5. 团队用某框架半年,处处受限想推倒重写,评估要两个月,你怎么决策?

    期望先把「处处受限」落成三五条清单,逐条判是框架必然导致还是用法/需求问题 —— 不少是后者,重写后原样重现 → 前置:先有能跨新旧对比的评测集,没有就拦下 → 拒绝一次性重写,走绞杀者式渐进替换:先自建收益最大又最独立的上下文组装层与框架并存,再动 trace 或持久化 → 分阶段验收:成功率不降、成本不升,达不到就停。沉没成本不参与决策,只看未来六个月总成本
    信号要求把抱怨落成清单、走渐进替换、把「先有评测集」设为前置 → 主导过技术债偿还;直接支持重写或直接否决 → 都缺决策方法
一句「能不能一行代码拿到最终请求体」就把调包和掌控切开了。前三层考你有没有被框架坑过,第 4、5 层考你能不能带着评测集把框架换掉。

评分要点

  1. 先给选型判据(控制粒度、持久化、可观测、绑定风险),而不是先背框架名单
  2. 能对主流框架给出定位差异(截至 2026-08,并声明以官方文档为准)
  3. 提出可操作的硬指标:能否拿到最终请求体、能否只用一部分
  4. 说得清"自己写循环"的三条动因(核心逻辑短、抽象泄漏、上下文控制被挡)
  5. 同时说得清自建的代价(持久化、人在环、版本管理、trace 都要自己补)
  6. 结论平衡:框架价值随团队成熟度与场景特殊性递减
  7. 加分:折中做法——自己写循环 + 用库不用框架 + trace 对齐 OTel
  8. 加分:领域资产(工具、提示词、评测集、trace)独立于框架
  9. 加分:重写决策走渐进替换,且以评测集为前置条件

常见错误

只会罗列框架的功能列表,给不出任何选型判据。
「用 XX 框架就行,业界都在用」——没有需求映射。
认为框架决定了 Agent 的能力上限,看不到核心循环其实很短。
一边倒地说"自己写更可控",却算不出持久化、人在环、版本管理这些账。
说不出抽象泄漏的具体形态,只有名词。
领域逻辑和框架深度耦合,评测集也建在框架里,换框架等于全部重来。
主张推倒重写,但没有能跨新旧对比的评测集。
用沉没成本论证决策("都用半年了")。

关联学习