我从去年开始密集接触Agent开发,当时团队正好要从零搭建一个智能客服系统。先是用手写循环调模型的方式跑Demo,前两个月还算顺利,等开始接生产数据、加人工复核、做多会话保存时,脚本就变成了一坨谁也动不了的意大利面。于是我把市面上主流的Agent框架挨个试了一遍,包括LangGraph、AutoGen、CrewAI、还有微软后来推出的Agent Framework,每个都在真实业务场景里写过代码、跑过部署、踩过坑。
这篇文章就围绕一个核心问题展开:这四个框架各自的建模方式和擅长边界是什么,回到你自己的项目里,到底该选谁。我不会替你做决定,但会把每个框架的底层思路、使用体验、容易翻车的点,以及我做选型时的判断标准,都摊开来讲清楚。
1. Agent框架到底在帮你解决什么问题——先别急着选型
很多刚接触Agent的朋友,对框架的第一个疑问是:我自己调大模型API,写个循环让模型决定下一步该干什么,不就是一个Agent吗?为什么要再学一套框架?
这个说法在Demo阶段成立。一个最简单的Agent确实就是“while循环里塞两个LLM调用”:先把用户需求交给模型,模型返回要不要调用工具,如果调用就执行工具把结果塞回上下文,再让模型继续决策,直到它说最终答案。我自己用纯Python写过一个能查数据库、画图表、生成邮件的脚本,不到两百行就能跑通。
但当你把这个东西往生产环境里推,立刻就会碰到以下几类问题。
第一,状态到底放在哪里。用户的多次对话、中间产生的临时数据、某个分支里模型已经生成的半成品,这些如果全塞在上下文窗口里,长度很快爆掉;如果自己设计存储,就要考虑持久化、一致性和恢复。第二,流程怎么编排才能被别人看懂。手写循环的控制流散落在代码各处,操作Agent的操作日志、每个分支的触发条件,别人接手时得从头读一遍代码才能懂。第三,可观测性从哪里来。Agent跑挂了,是模型胡说了、工具报错了、还是上下文爆了,没有一套统一机制很难定位。第四,并发和隔离怎么做。多个用户同时触发Agent,会不会互相污染状态。
这四类问题,其实就是LangGraph、AutoGen、CrewAI、Microsoft Agent Framework这些框架着力解决的东西。它们本质上是在提供一层“Agent基础设施”,帮你把生命周期管理、状态持久化、流程编排、可观测性这些事标准化。
所以你选框架之前,真正要想清楚的不是“哪个框架看着火”,而是“我的Agent流程复杂到什么程度”以及“我能不能接受持续手写基础设施”。如果项目只需要一个简单的问答机器人,任何框架对你都是多余的,直接用LangChain甚至裸调API反而更快。如果要做的是多步骤、多工具、可能有人工介入、需要长时间稳定运行的系统,那框架的价值就体现出来了。
另外我还想强调一点:没有人能通过看文档判断出框架的好坏。这四个东西的差异主要藏在“流程变复杂之后的行为”里,只有把真实业务场景放上去跑,才能看出来谁顺手谁别扭。所以我下面所有评价,都基于我实际写过的代码和踩过的坑,不纸上谈兵。
2. LangGraph:把Agent当一张可审计、可恢复的图来编排
2.1 图模型和State的核心设计
LangGraph是LangChain生态里长出来的Agent编排框架,它的核心思想非常直接:把一个Agent的执行过程建模成一张有向图。图上有节点(Node)和边(Edge),节点是一个个具体的处理函数,边决定从一个节点出来之后下一步去哪,节点之间通过一个叫State的共享对象传递数据。
我在做智能工单系统的时候,把流程画成了这样:接收用户问题 → 判断工单类型 → 检索知识库 → 生成回复草稿 → 高风险工单进入人工复核 → 发送回复。每个环节是一个节点,节点内部可以调用模型、调用工具、处理数据,节点结束之后把新的状态写回State,再由边路由到下一个节点。
这种建模方式最大的好处是流程一目了然。以前我在代码里藏了七八层if-else的决策逻辑,现在整条路径就摆在图里,谁都能看懂。更重要的是,State是显式的:每一步产生的关键信息都在一个定义好的数据结构里流转,不会散落在局部变量和全局变量中。
2.2 Checkpointer和条件路由解决了我最头疼的两件事
LangGraph里有三个能力是我在别的框架里一直找不到替代的。
第一个是任意节点的条件路由。LangGraph支持节点返回时带上路由指令,指向多个分支中的任意一个。我在知识库检索节点里,让模型同时计算一个置信度,低于0.6就走人工接管分支,否则走自动回复分支。这种分支逻辑用图来表达非常自然,后加的同事改起来也很快。
第二个是Checkpointer,也就是检查点机制。它会自动把执行到某一步的完整状态保存下来,支持回放、暂停、甚至从某个历史节点分叉重新执行。这个能力在调试和审计场景简直救命。有一次某个工单的Agent在该走A流程时走了B流程,我直接把那一次的状态检查点拉出来,发现是因为上下文里混入了一条其他用户的会话记录,导致模型判断错了。如果没有检查点,这个问题很难复现。
第三个是部署链路相对完整。LangGraph Platform提供托管服务,也可以用LangGraph CLI在本地起一个带历史记录的服务,还能和LangSmith接上做完整的链路追踪。对团队协作来说,这算是目前几个框架里比较成熟的一档。
2.3 LangGraph的坑和适用边界
必须诚实说,LangGraph的上手门槛是四者里偏高的。概念负担很重:State要定义成TypedDict,有些场景还要理解Reducer怎么合并状态,动态分支要用Send API。对一个只想快速做Demo验证的团队来说,这种学习成本确实不低。
还有一个我用下来发现的实际问题:State里存的数据量会直接影响性能。有次我把一整个PDF的解析文本直接塞进了State,结果每执行一个节点都要把这个大对象序列化一次,速度肉眼可见地变慢。后来我把State改成只存段落索引和摘要,速度才回来。这说明用LangGraph必须认真设计“什么该进State、什么不该进”。
另外,虽然图的表达力很强,但有些动态行为——比如循环体内动态生成并行任务、根据中间结果决定要不要再加一轮循环——用固定图结构表达起来并不那么顺手,往往需要在节点函数里写Python逻辑来补足。这不算致命伤,但会让你感受到“图模型也不是万能的”。
LangGraph适合的场景,总结起来就是三个词:流程复杂、需要精细控制、需要状态可恢复。比如企业内部工单系统、多步数据清洗流程、带人工审批节点的业务Agent。如果你的流程简单到一两个节点就能跑完,用它反而有点杀鸡用牛刀。
3. AutoGen:对话驱动的多Agent编排,灵动但未必适合所有人
3.1 对话抽象:让Agent自己聊出结果
AutoGen出自微软研究院,它的核心抽象跟LangGraph完全不同:不是图,而是对话。一个Agent的执行过程,被建模成多个Agent之间来回发送消息的聊天过程。你定义一个扮演程序员的Agent,再定义一个扮演代码审查者的Agent,它们之间可以互相发言,一轮一轮地提出方案、指出问题、修改方案,直到其中一个Agent认为任务完成,或者达到预设的终止条件。
我第一次在AutoGen里跑通多Agent协作时,确实有被惊艳到。当时我构造了一个“数据分析报告生成”任务:分析师Agent负责写代码查数据,审查者Agent负责看结论是否合理,两者来回几轮之后,最终报告的质量比我让单个Agent一次性生成要好很多。因为审查者真的会指出数字口径不一致、图表标题不准确这类问题,然后分析师Agent再去修正。这种“自我纠错”的行为是单Agent很难做到的。
AutoGen的GroupChatManager负责调度发言顺序,支持轮询发言、根据发言人指定下一个发言人等策略。这给了你一定的控制权,但整体上,AutoGen的哲学是“把控制权交给对话,而不是交给程序员”。
3.2 最惊艳和最尴尬的场景并存
用久了之后我发现,AutoGen最擅长的是那种“目标明确、但达成路径不明确”的任务。你只要给几个Agent设定好角色和工具,让它们聊,它自己会探索出一条路径来。比如我说“帮我整理一份行业竞品清单,并按融资阶段排序”,程序员Agent就会自己决定要搜索什么、用什么工具搜索、怎么整理格式。
但尴尬也随之而来:对话的不可预测性会放大。有一次GroupChat里有个Agent突然说了一句和任务完全无关的话,整个对话就顺着这个话题偏出去了,连续跑了十几轮才被终止条件掐断。这种失控在Demo里是效果秀,在客户现场就是事故了。
另外,AutoGen默认的代码执行器会让Agent生成的代码在本机直接运行。开发时确实很方便,但在生产环境这就是一个巨大的安全洞。你一定要把代码执行器替换成沙箱方案,比如Docker容器,否则任何一段模型生成的恶意代码(或者单纯写错的代码)都可能直接操作宿主机。这里没有任何商量的余地。
3.3 版本迭代带来的隐性成本
AutoGen还有一个很容易被低估的问题:版本演进非常剧烈。从0.2到0.4,它经历了一次接近重写的大变更,API全部换掉,事件驱动和异步成为主流。你在网上搜到的2024年中之前的教程,大部分示例代码拿到现在已经跑不起来了。
这意味着如果你用AutoGen做正式项目,团队的学习投资可能会快速贬值。你刚把一个业务逻辑用AutoGen写顺,下一个大版本一来,迁移成本相当可观。AutoGen的更新方向也侧面印证了这一点:它内部团队的重心明显在往微软Agent Framework迁移,AutoGen更多承担的是研究探索的角色。
所以我的判断是:AutoGen适合做“多Agent协作的可行性验证”,比如你想看看两个角色互怼能不能提升输出质量,用AutoGen快速验证,结论靠谱再考虑是否迁移到更工程化的框架。如果要直接在AutoGen上建设长期系统,你要做好持续跟进版本、不断迁移代码的心理准备。
4. CrewAI:轻量角色的快速出活体验
4.1 角色扮演式的声明式API
CrewAI是2024年快速蹿红的一个框架,它的设计灵感来自于“电影剧组”:每个Agent拥有明确的角色(Role)、目标(Goal)和背景故事(Backstory),多个Agent组成一个Crew,共同完成一系列Tasks。
我第一次写CrewAI代码的时候,最大的感受是“这代码怎么这么像需求文档”。定义一个市场调研Agent,大致长这样:
from crewai import Agent, Task, Crew, Process from langchain_openai import ChatOpenAI llm = ChatOpenAI(model="gpt-4o", temperature=0) researcher = Agent( role="市场研究员", goal="分析目标行业的市场规模与增长趋势", backstory="你是一名在咨询行业有十年经验的分析师,擅长从公开数据中发现机会", tools=[search_tool], llm=llm, verbose=True ) task1 = Task( description="收集目标行业最近一年的市场规模数据,并总结三个关键趋势", expected_output="一份包含数据来源、数据数值和趋势判断的简短报告", agent=researcher ) crew = Crew( agents=[researcher], tasks=[task1], process=Process.sequential )这种声明式API对团队非常友好,尤其是从非后端背景转过来的同事,几乎不用学太多概念就能开始干活。你不用关心Node、Edge、State,你只需要说清楚“谁负责什么、要产出什么”。
4.2 Sequential和Hierarchical两种流程基本够用
CrewAI内置了两种流程编排方式。SequentialProcess是线性推进,Task一个接一个执行,前一个的输出作为后一个的上下文;HierarchicalProcess则引入一个ManagerAgent来动态分配任务和协调多个子Agent。这两种模型覆盖了日常开发中绝大多数需求:内容生产流水线、客服工单分类、销售线索初筛、竞品调研报告,基本都是“串联几步或者由主管分配”的形态。
跟着CrewAI做出来的东西,交付速度确实快。我一次给客户做活动物料生成工具,从零到能跑到Demo,只花了一个下午。对比用LangGraph搭同样的流程,可能要花上两倍到三倍的时间,因为你要先设计State结构和节点划分。
4.3 天花板的代价:复杂编排力不从心
但我也要泼一盆冷水。CrewAI的简洁是拿流程表达能力换来的。你一旦需要循环重试、动态跳转、并行分支定制这类非常规控制流,它就会让你感觉“被框架困住了”。因为它不暴露底层图结构,你只能在Agent和Task的边界上做文章,很多想表达的控制逻辑都表达不出来。
另一个现实问题是生态厚度。CrewAI早期对LangChain有依赖,后面在逐步去化,但整体生态和LangChain/LangGraph的覆盖面还是差不少。你要是遇到一个冷门的工具集成问题,可能在GitHub issues里翻半天也找不到答案,只能自己去读源码。
所以CrewAI的定位非常清晰:在需求不复杂、目标明确、要快速交付的场景里,它性价比极高。但如果你能预判到流程会不断变复杂,那最好在一开始就不要选它——除非你愿意后续推倒重来。
5. Microsoft Agent Framework:从Copilot生态长出来的“企业级”答案
5.1 名词背景和定位差异
微软在2025年的Build大会上正式推出Microsoft Agent Framework,这个框架在社区里的简称是MAF。很多人第一次看到它的时候会觉得:微软是不是又出了一个新的框架来抢市场?其实不是,它是微软把AutoGen、Semantic Kernel以及早期Bot Framework的沉淀综合起来,整合升级成的一套面向企业级落地的新方案。
MAF跟前面三个框架有一个本质区别:它更像一套“平台规范+云服务”,而不是单纯的开发库。它的定位不是让你快速跑通一个Demo,而是告诉你——在企业环境里,Agent应该怎么被构建、部署、治理和运维。
5.2 Agent Core、Boundaries和云端托管
MAF提出了一个概念叫“Agent Core”,这是一个跨端统一的运行时核心,让同一个Agent逻辑可以在云端服务器、桌面应用、移动端、Web页面里一致地运行。它在设计上吸收了Bot Framework的通道经验,一套Agent逻辑可以对接多个端,不需要为每个端重写。
另一个很有特色的概念是“Boundaries”,翻译过来就是边界。它定义了Agent的执行边界,包括权限边界、数据可见边界、合规约束。你可以理解成,每个Agent身上别了一个工牌,上面写清楚它能访问哪些数据、能调用哪些操作、哪些动作必须上报审批。这个设计直击企业IT治理的痛点——企业内部Agent不是“越能越好”,而是要“在授权范围内把事情做对”。
在云服务层面,MAF提供了云端托管运行环境、语义记忆(Semantic Memory)、遥测和评估能力。这意味着你很多时候不需要自己搭数据库来存会话状态,不用自己设计监控和评估体系,平台帮你做了。对一个需要在企业内部落地的Agent来说,这些能力比“支持多少种工具调用”要重要得多。
5.3 选它的理由和劝退它的理由
先说要付出什么代价。MAF绝对不是最轻量、最灵活的框架。它的第一步就可能会劝退小团队和个人开发者:要体验完整的云端能力,通常需要一个Azure账号,还要做一连串的资源、权限、模型部署配置。对于只是想本地跑个实验的人来说,这个启动成本过于沉重。
但如果你所在的企业本来就已经在用微软生态,比如Azure AI Foundry、Copilot Studio、Microsoft 365,那么MAF是顺势而为的选择。它和你已有的身份认证、数据治理、运维体系天然打通。这种“和现有基础设施兼容”的价值,是小团队感受不到的,但在大企业里往往是决定性的。
还要说清楚MAF和AutoGen的关系。两者同源,但定位不同:AutoGen更偏研究和探索,适合你试验多Agent协作的潜力;MAF更偏工程落地,适合把它做成有SLA(服务等级协议)、有审计、有权限管控的生产系统。如果你直接把AutoGen的代码搬到MAF,会发现很多概念对不上,因为MAF的设计已经是另一套工程范式了。
适合MAF的场景:企业内部知识助理、跨部门流程自动化、需要长期跨会话运行的客服Agent,并且这些系统都必须纳入现有IT治理体系。不适合的场景:单机实验、快速原型、对多云和自建环境有强要求的项目。
6. 我的选型决策逻辑:别问哪个最好,问你的场景给了什么约束
6.1 一张表看四款框架的差异
把你已经看过的技术细节汇总成一张表,方便对应判断。
| 维度 | LangGraph | AutoGen | CrewAI | MAF |
|---|---|---|---|---|
| 核心抽象 | 图:节点+边+状态 | 多Agent对话 | 角色+任务 | Agent Core+云服务 |
| 上手门槛 | 中高,需理解State和Reducer | 中,概念直观但版本变化快 | 低,声明式API直观 | 中高,需理解平台概念和Azure |
| 流程控制力 | 强,支持复杂分支和循环 | 中,依赖对话走向 | 中,Sequential/Hierarchical | 中,但受平台边界约束 |
| 状态持久化 | Checkpointer,支持回放 | 对话记录,较松散 | 内置会话管理 | 云端托管,语义记忆 |
| 部署模式 | LangGraph Platform或自托管 | 自托管,需自己处理沙箱 | 自托管,部署简单 | Azure云端为主,可自托管 |
| 生态关联 | LangChain生态 | 微软研究生态 | 轻量独立生态 | Azure/Copilot生态 |
| 典型场景 | 复杂流程、生产级 | 多Agent研究探索 | 快速交付、流程简单 | 企业级、合规优先 |
6.2 选型前问自己五个问题
我每次面对一个真实的Agent项目,会先问自己这五个问题,顺序基本固定。
第一个问题:流程复杂度到底有多高?会不会出现循环、并行、动态分支、人工介入?如果你的答案是“会”,LangGraph的图模型最稳妥;如果答案是“基本是线性几步”,CrewAI的效率会高出很多。
第二个问题:团队现有技术栈和生态偏好是什么?如果团队本来就重度使用LangChain,选LangGraph的顺滑度远超其他;如果团队已经大量采用微软Azure OpenAI服务,那应该认真看看MAF,而不是硬搬一套自建体系回来。
第三个问题:这个Agent是要“验证想法”还是“系统上线”?验证想法,用CrewAI或AutoGen跑通即可,别纠结工程能力;系统上线,再去看LangGraph的部署链路或者MAF的平台能力。
第四个问题:你能否接受不可控性?多Agent对话协作越自由,出幺蛾子的概率就越高。如果你的业务场景容错率很低——比如涉及资金、客户合同、医疗建议——那还是把主动权攥在自己手里,选流程控制力强的框架。
第五个问题:企业内部有没有IT治理和合规诉求?有的话,MAF的边界模型和云端管理能力就是核心价值,越早介入越值。没有的话,MAF的约束只会让你觉得束手束脚。
6.3 框架会换,流程模型不会
这几年框架更迭的速度大家有目共睹。AutoGen换过一次大版本,LangGraph的API也在持续调整,CrewAI本身都在演进。这给我一个很重要的启示:架构层面,把业务流程模型定义清楚,比绑定某一个具体框架重要得多。
我在项目的设计阶段,会先画出一张“业务流程图”:哪些步骤必须串行、哪些可以并行、哪些需要人介入、哪些要保存中间状态。这张图不依赖任何框架。然后我再考虑用哪个框架去实现这张图最省力。即使将来框架换代了,这张流程图仍然是我们重构的蓝图,投资不会打水漂。
还有一个所有Agent项目都通用的建议:从一开始就把日志、评估、人工干预的接口留好。Agent应用的成功率和传统软件完全不是一个概念,你只有拿到运行日志和评估数据,才知道该调什么、不该调什么。我见过太多团队搭好了Agent流程,但没有任何观测手段,出了问题两眼一抹黑,只能反复猜测是不是prompt写得不好。这不是框架的问题,是工程习惯的问题。
落到我个人的实际选择上,目前的策略是:快速验证原型用CrewAI或AutoGen,跑通业务逻辑;正式生产项目里流程复杂的基本选LangGraph;甲方如果已经身在微软生态,我会直接建议MAF。这个组合是我踩了一整年坑之后沉淀下来的,未必适合所有人,但至少能帮你节省一些试错的时间。