考察点
面试官想确认你是真在项目里用过这些框架,而不是只看过 README。核心看两点:能否说清「链」和「图」两种抽象的本质差异,以及选型时有没有自己的权衡逻辑——什么时候框架是助力,什么时候是负担。追问通常往「你在项目里怎么用 checkpoint 的」「不用框架的话哪些东西要自己造」走。
参考答案
LangChain 和 LangGraph 的关系与区别
LangChain 本质是一个组件库加链式编排层:Prompt、Model、Parser、Retriever 这些组件抽象,加上 LCEL 的 pipe 语法把Runnable 串起来。它的基本范式是 DAG——数据从输入流到输出,一条路走到底。这对「检索→拼 prompt→生成」这类一次性流程很顺手,但 Agent 的核心是循环:模型决定调工具、拿到结果、再决定下一步,步数和路径事先都不知道,DAG 表达不了「环」。
LangGraph 就是 LangChain 团队为解决这个问题做的 Agent 编排层。它把 Agent 建模成图/状态机:节点是函数,边可以是条件跳转,允许环——一个 ReAct loop 就是 LLM 节点和 Tool 节点之间的来回跳转。更关键的是它带一个全局 State 和 reducer 机制(比如消息字段用 add_messages 做追加而不是覆盖),每跑完一个 super-step 可以把状态快照持久化。所以我的说法是:LangChain 管「一次调用链怎么组织」,LangGraph 管「一个多步、有状态、可中断的 Agent 进程怎么运行」,后者更接近一个运行时。
和 AutoGen、CrewAI 的对比
AutoGen 是微软做的多智能体框架,核心范式是「对话驱动」:多个 agent 互相发消息,靠 GroupChat 之类的机制推进任务,0.4 版本重构成了异步事件驱动的 actor 模型。它适合研究性质的多 agent 讨论、开放式任务,但对话驱动的控制流在生产环境里很难预测——你不知道第几轮对话会收敛。
CrewAI 走的是「角色-任务」范式:定义 agent 的 role、goal、backstory,再定义 task,由 crew 串起来执行,很多配置可以写 YAML。抽象层级高,上手极快,适合业务流程建模和 demo。代价是粒度粗,当你要精细控制某一步的上下文、异常分支时,会被它的高层抽象挡住。
LangGraph 的优势在生产特性:显式的控制流(每一步的走向是代码决定的,不是对话决定的)、checkpointer 持久化(MemorySaver / SqliteSaver / PostgresSaver)、interrupt 人机协同、time travel 恢复到任意历史步骤,再加上 streaming 和 LangSmith 的 trace 打通。我的选型逻辑是:单 agent 或少量 agent、控制流复杂、要上线——LangGraph;探索性多 agent 研究——AutoGen;业务方快速验证——CrewAI。
为什么不用手写状态机
手写并不可耻。流程短而固定的项目,一个 Python 循环加一个状态字典完全够用,不少团队就是这么干的,而且调试起来比框架透明。但你要想清楚哪些东西得自己造:checkpoint 与断点恢复、token 级流式输出、工具并行调用、人机协同的中断点、全链路 trace。框架的价值主要在这些横切能力上,而不是「画一张图」。
权衡点在「抽象税」:框架升级快、调试时调用栈深、社区 API 变动频繁。如果你的流程三天两头变、且横切需求(持久化、审批、观测)齐全,框架划算;如果流程稳定且简单,手写更省心。
工程实践细节
我在项目里的典型用法:用 SqliteSaver 按 thread_id 持久化会话,重启不丢;在风险操作节点前加 interrupt_before 做人工审批;用 Command(goto=...) 在节点内动态决定跳转,实现 supervisor 分派 worker 的模式;复杂系统拆成多个子图,各管一块状态。踩过的坑有两个值得说:一是 state schema 加了字段后,老 checkpoint 反序列化失败,需要写迁移或容忍缺省值;二是自定义 state 字段忘了配 reducer,并发分支写同一个列表字段时直接互相覆盖,排查了半天。
可能的追问
- LangGraph 的 checkpoint 机制具体怎么工作? 每个 super-step 结束后把 state 快照写进 checkpointer,按 thread_id 和 checkpoint_id 索引,可以恢复到任意一步继续跑,也是 interrupt 人机协同和 time travel 的基础。
- 什么情况下你会放弃框架直接手写? 流程短且固定、团队对第三方依赖敏感、或者性能敏感场景——当框架抽象带来的调试成本超过它省下的功夫时。
- 多 agent 协作你们用 supervisor 还是 swarm? 任务边界清晰用 supervisor 集中分派,worker 之间需要互相接力才考虑 swarm 式的 handoff;共享状态要谨慎,优先用消息传递。