摘要:2026年AI Agent工程已从概念验证进入生产部署阶段,主流框架形成状态机与对话协作两条技术路线。
两个底层分歧:状态机 vs 对话协作
在深入各框架之前,必须先理解AI Agent系统里最核心的设计分歧:你的Agent系统到底是通过确定性状态转移 来驱动流程,还是通过多Agent之间的对话协商 来协作完成任务。

这一问下去,缓存和队列都得一起背
这个分歧直接影响你如何设计Agent行为、如何处理异常、如何实现Human-in-the-loop、如何做生产级监控。

屏幕一红,心率先上去了

正文图解 1
状态机驱动 的代表是LangGraph:每个节点是一个纯函数,边定义条件路由,整个执行过程是可中断、可恢复、可checkpoint的。
适合金融审批、医疗诊断、合规检查这类高可靠性要求的场景。对话协作驱动 的代表是AutoGen和CrewAI:多个Agent通过消息传递协商分工,流程不是预设的而是涌现的。
适合研究型任务、内容创作、多角度分析这类需要「群智」的场景。
理解了这两个底层分歧,你就能理解为什么面试官会在你回答完「我们用LangGraph」之后追问「那如果让你们切换到CrewAI,架构上需要改多少」——他们想看你是否真的理解了自己框架的取舍,而不是只会用不会想。
LangGraph:图状态机驱动的高确定性路线
核心架构:StateGraph与显式状态管理
LangGraph是LangChain团队在2024年推出的新一代编排框架,核心理念是「确定性工作流优于灵活协商」——所有状态都是显式管理的,所有路由都是条件判断,所有节点都是纯函数无副作用。
在LangGraph里,你需要定义一个State类声明所有状态字段,用Annotated标记需要reducer的字段,然后为每个处理步骤编写纯函数节点。
图的边定义条件路由,决定在当前状态下下一步该走哪个节点还是结束。
from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated
from langchain_core.messages import AnyMessage, add_messagesclass AgentState(TypedDict):messages: Annotated[list[AnyMessage], add_messages]current_step: strcontext: dictdef research_node(state: AgentState) -> dict:query = extract_research_query(state["messages"])results = search_knowledge_base(query)return {"messages": [HumanMessage(content=results)],"current_step": "research_done"}def analysis_node(state: AgentState) -> dict:analysis = llm.invoke(state["messages"])return {"messages": [analysis]}workflow = StateGraph(AgentState)
workflow.add_node("research", research_node)
workflow.add_node("analysis", analysis_node)
workflow.set_entry_point("research")
workflow.add_conditional_edges("research",lambda state: "analysis" if state["current_step"] == "research_done" else END
)
workflow.add_edge("analysis", END)app = workflow.compile()
result = app.invoke({"messages": [], "current_step": "start", "context": {}})
关键优势是checkpoint和恢复 :你可以在任意节点暂停,序列化当前状态,然后在另一个进程里恢复执行。这对于需要人工审批的长流程、分布式执行、故障恢复至关重要。
典型追问:Human-in-the-loop与checkpoint代价
Human-in-the-loop 在LangGraph里是通过「打断节点」实现的:在条件边里插入人工确认步骤,让流程在某个节点暂停,等人工审批后再继续。
这个机制适合审批流程、合规检查、质量控制场景,但面试官会追问「如果人工确认超时了怎么处理」「你怎么设计超时后的降级策略」。
checkpoint的代价 是另一个常被问到的问题:每个状态快照都会占用内存,频繁checkpoint会显著增加内存使用和序列化开销。
好的回答需要说明「不是所有节点都需要checkpoint,只有在关键决策点才checkpoint」,或者「用异步checkpoint避免阻塞主流程」。
易错边界:LangChain vs LangGraph的根本差异
很多候选人把LangChain和LangGraph混为一谈,认为「LangGraph是LangChain的升级版」。这个理解是错的。
LangChain的核心抽象是Chain——线性顺序调用;LangGraph的核心抽象是Graph——节点和边的网络,支持条件分支、循环、并行。
真正的差异在于:LangChain处理的是「怎么做」,LangGraph处理的是「什么情况下做什么」 。
当你需要处理「如果A结果就做B,如果C结果就做D」这类条件分支时,LangChain需要嵌套多个Chain,代码会变得嵌套爆炸;LangGraph只需要加一条条件边。
项目里怎么回答:「我们之前用LangChain处理多步骤对话,但遇到条件分支时发现Chain嵌套太深,改用LangGraph之后,条件路由逻辑清晰了很多,状态管理也更直观」。
AutoGen:微软系多Agent对话协作模型
Agent定义与群组管理器
AutoGen是微软推出的多Agent对话协作框架,核心设计理念是「Agent通过对话协商来完成任务,而不是被预先编程好行为」。
每个AutoGen Agent由名字、系统消息(定义Agent角色)、LLM配置、以及可选的工具定义组成。
GroupChat机制允许多个Agent自主协商对话顺序,每个Agent收到消息后决定是否回复、何时回复、回复什么内容。
from autogen import ConversableAgent, GroupChat, GroupChatManagerresearcher = ConversableAgent(name="researcher",system_message="你是一个专业的研究员,负责从多个信息源收集数据并进行综合分析。",llm_config={"model": "gpt-4o", "temperature": 0.7},human_input_mode="NEVER"
)analyst = ConversableAgent(name="analyst",system_message="你是一个专业的数据分析师,负责基于研究结果提出洞察和建议。",llm_config={"model": "gpt-4o", "temperature": 0.3},human_input_mode="NEVER"
)group_chat = GroupChat(agents=[researcher, analyst],messages=[],max_round=10
)manager = GroupChatManager(groupchat=group_chat)
researcher.initiate_chat(manager,message="请分析2026年AI Agent框架的发展趋势。"
)
这种设计让Agent行为具有涌现性,但也带来了调试难度——你很难预测Agent之间的对话会走向哪里。
典型追问:消息顺序与超时处理
消息顺序 在AutoGen里不是严格保证的:因为每个Agent是独立运行的,消息到达顺序可能受网络延迟、模型响应时间等因素影响。
如果你需要保证「分析师必须在研究员完成报告后才能开始分析」,你需要显式地在代码里处理这个依赖关系,而不是依赖AutoGen的隐式顺序。
超时处理 是另一个关键点:当某个Agent长时间不响应时,系统应该怎么处理。
AutoGen支持通过termination_notice来定义终止条件,但你需要主动设计超时兜底策略——是重试、降级、还是人工介入。
CrewAI:Role+Task+Crew的抽象层设计
Agents / Tasks / Crews 三件套
CrewAI的设计理念是「让复杂任务分解变得更直观」。它的核心抽象是三个概念:Agent定义角色和工具、Task定义具体工作单元和期望输出、Crew定义Agent编排和执行流程。
相对AutoGen的对话涌现模式,CrewAI更强调结构化的任务分配和角色预定义。Process有两种模式:sequential(顺序执行)和hierarchical(层级协作)。
顺序模式下,Task按定义顺序执行;层级模式下,定义了Manager Agent来协调其他Agent的工作分配。
from crewai import Agent, Task, Crew, Processresearcher = Agent(role="高级研究员",goal="收集并整理行业最新动态",backstory="10年行业研究经验,擅长数据挖掘和趋势分析",tools=[search_tool, browse_tool],verbose=True
)analyst = Agent(role="战略分析师",goal="基于研究结果提出可执行的战略建议",backstory="前麦肯锡顾问,专注于科技行业战略咨询",tools=[analysis_tool]
)research_task = Task(description="收集2026年Q1全球AI Agent框架市场数据",agent=researcher,expected_output="一份结构化的市场分析报告"
)analysis_task = Task(description="基于研究报告,输出针对企业AI Agent选型的战略建议",agent=analyst,expected_output="一份包含3-5个核心建议的战略报告"
)crew = Crew(agents=[researcher, analyst],tasks=[research_task, analysis_task],process=Process.sequential
)result = crew.kickoff()
Role-Based与能力体的核心差异
CrewAI和AutoGen的本质差异在于「谁来决定Agent做什么」:CrewAI是Role-Based的预定义分配,AutoGen是对话涌现的自主协商。
CrewAI更容易预测但灵活性较低,AutoGen更灵活但更难调试。 当你知道任务的结构和输出格式时,CrewAI的预定义角色能快速搭建高效团队;
当你不知道最优解、需要Agent自主探索时,AutoGen的涌现模式更有优势。
面试时的经典问题是「如果CrewAI里的Agent给出的结论互相矛盾怎么办」,这需要你在设计时考虑Crew内部的决策机制——是让Manager决定、还是让Agent投票、还是按优先级顺序覆盖。
Dify:低代码可视化工作流平台
平台定位与能力边界
Dify代表了AI Agent领域的另一条路线——低代码可视化编排 。它的用户不是工程师,而是产品经理、业务人员和独立开发者。
Dify的核心是「节点+连线」的可视化工作流:每个节点代表一个LLM调用、一个API请求、或者一个条件判断;节点之间的连线定义了执行顺序和分支逻辑。
这种设计的优势是所见即所得 ,你可以在界面上直接看到整个流程的拓扑结构。
Dify还内置了RAG引擎、算子市场、版本管理和日志系统,这些功能对于快速原型验证来说非常实用。但这也意味着它的能力边界是明确的:当你的需求超出可视化编排的表达能力时,你需要退回到代码层。
从Dify迁移到LangGraph的判断条件
很多团队的经历是这样的:先用Dify快速验证了AI应用的价值,验证成功后业务需求开始复杂化,这时候Dify的可视化编排开始遇到瓶颈。具体触发迁移的典型信号包括:
-
分支逻辑复杂度超过可视化表达能力 :当条件分支嵌套超过3层、或者需要动态计算分支条件时,拖拽界面开始变得笨拙。
-
状态管理需求超出Dify设计范围 :如果需要在多个节点之间共享状态、或者需要checkpoint机制来支持人工干预,LangGraph的显式状态管理更合适。
-
需要自定义工具调用逻辑 :Dify的工具市场覆盖了常见场景,但当你需要深度定制工具调用、或者需要自己在工具调用失败时做降级处理时,代码层的灵活性是必要的。
迁移路径通常是这样的:先用Dify搭建核心流程,确认业务价值,然后逐步把性能敏感的节点替换成LangGraph实现,同时保留Dify作为配置和管理界面。
Semantic Kernel:微软企业级Agent框架
Plugin与Planner的核心设计
Semantic Kernel是微软推出的企业级Agent框架,设计理念和前面几个框架有显著差异:它不强调Agent的自主协作,而是强调与微软生态的深度集成 。
Semantic Kernel的核心抽象是Plugin和Planner:
-
Plugin 是技能的封装单元,支持SK Core原生格式,也支持Azure Functions、OpenAPI规范、以及Power Platform的各种连接器。
-
Planner 是任务分解引擎,能根据用户目标自动规划执行步骤。与LangGraph的显式条件路由不同,Planner是目标驱动的——你告诉它「我要完成X」,它自动拆解成多个步骤并执行。这种设计的优势是降低了使用门槛 ,业务人员不需要设计流程,只需要描述目标。但代价是控制力减弱,你很难精确控制Planner的执行路径,这在需要高确定性的场景里是个问题。
与Azure OpenAI Service的生态集成
Semantic Kernel的另一个核心优势是与Azure生态的深度绑定 。
如果你在使用Azure OpenAI Service、Azure Cognitive Services、或者Microsoft 365,Semantic Kernel提供了开箱即用的集成能力。
但对于非Azure环境来说,Semantic Kernel的价值就大打折扣了。
追问方向:Planner vs 条件路由的本质差异
核心区别在于控制权归属 :条件路由是确定性的,你定义了「如果A则走B,否则走C」,Planner是目标驱动的,你定义了目标,它自己决定走哪条路。这个差异带来的实际影响是:
-
可预测性 :条件路由的执行路径可以提前验证,Planner的执行路径是运行时决定的。
-
调试难度 :条件路由出问题可以直接定位到哪条规则,Planner出问题需要追踪它的推理过程。
-
适用场景 :条件路由适合「流程已经明确」的稳定场景,Planner适合「流程需要动态探索」的探索性场景。
MetaGPT:角色分工模拟软件工程团队
SOP驱动的多Agent模拟
MetaGPT的核心设计理念是用多Agent模拟真实软件工程团队的工作方式 。
与CrewAI的Role-Based抽象类似,MetaGPT也强调角色定义,但它的角色定义更细致——每个角色不仅有名称和目标,还有一个完整的SOP(标准操作流程)。
MetaGPT的典型场景是「模拟一个软件团队来完成任务」:Architect负责系统设计、Engineer负责代码实现、Reviewer负责代码审查、ScrumMaster负责任务协调。
每个角色有自己的输入输出规范,有明确的交接流程。
from metagpt.software_company import SoftwareCompany
from metagpt.roles import Architect, Engineer, ProductManagercompany = SoftwareCompany()
company.add_roles([ProductManager(), # 产品经理:收集需求、写PRDArchitect(), # 架构师:设计系统架构Engineer(), # 工程师:实现代码
])idea = "我需要一个能够自动整理会议纪要的AI工具"
company.run(idea)
适用场景与工程局限性
MetaGPT的优势在于对复杂协作场景的模拟能力 。但局限性也很明显:
-
场景依赖性 :MetaGPT最适合「本来就是团队协作」的场景,比如软件开发、内容生产、项目管理。对于单Agent任务,MetaGPT的额外抽象反而增加了复杂度。
-
调试困难 :MetaGPT的输出很大程度上取决于各角色的SOP设计是否合理。如果结果不符合预期,你需要检查是角色定义的问题还是SOP设计的问题。
-
资源消耗 :MetaGPT需要同时运行多个Agent,每个Agent都有独立的LLM调用,成本比单Agent方案高出不少。
六维度横向对比:选型决策树
| 维度 | LangGraph | AutoGen | CrewAI | Dify | Semantic Kernel | MetaGPT |
|---|---|---|---|---|---|---|
| 架构模型 | 图状态机 | 对话涌现 | Role预分配 | 可视化工作流 | Plugin+Planner | SOP驱动 |
| 状态管理 | 显式状态 | 对话历史 | Task输出 | 流程上下文 | Kernel内存 | 角色SOP |
| 多Agent模式 | 条件路由 | GroupChat | Crew编排 | 节点串联 | Planner分解 | SOP协同 |
| 学习曲线 | 中高 | 中 | 低 | 低 | 中 | 高 |
| 生产级成熟度 | 高 | 高(微软维护) | 中高 | 中 | 中(Azure生态) | 中 |
| 典型适用场景 | 金融审批、合规检查 | 研究任务、多角度分析 | 任务分解、内容生成 | 快速原型验证 | 微软生态企业应用 | 软件开发团队模拟 |
选型决策树的核心逻辑:
-
如果你是非技术角色 :Dify是最佳选择,可视化界面和非技术友好度是所有框架里最高的。
-
如果你是工程师,且需要高确定性 :LangGraph的图状态机提供了最强的流程控制和可追溯性。
-
如果你的场景需要多Agent协作,且输出结构未知 :AutoGen的对话涌现模式更灵活。
-
如果你的场景需要清晰的任务分解,但协作复杂度不高 :CrewAI的Role+Task+Crew足够且学习成本低。
-
如果你在微软生态里,需要快速集成 :Semantic Kernel与Azure的深度集成是最大优势。
-
如果你需要模拟真实团队的协作流程 :MetaGPT的SOP驱动设计最适合,但学习成本也最高。
面试应答模板:从框架描述到项目落地
30秒开口版
当面试官问「请介绍一下你熟悉的Agent框架」时,30秒的回答结构应该是:框架名称 + 核心设计理念 + 一句话适用场景 + 一个关键词记忆点。
以LangGraph为例:「我们团队主要用LangGraph,它的核心设计是图状态机,所有流程都是显式状态转移,适合需要高确定性和可追溯性的场景,比如金融审批和合规检查。
它的记忆点是checkpoint机制,支持任意节点暂停恢复」。
以AutoGen为例:「我们用AutoGen做多Agent研究任务,它的核心设计是对话涌现,Agent之间自主协商分工,适合需要多角度分析但输出结构未知的场景。
它的记忆点是GroupChat机制,Agent对话顺序不是预设而是涌现的」。
三个典型追问的标准答法
追问一:「你们为什么选这个框架而不是另一个?」
好的回答需要包含:场景特点、候选框架对比、选择理由、以及潜在风险。例如:「我们选LangGraph是因为我们的场景需要高可靠性——每次决策都要有完整的审计日志。
AutoGen的对话涌现模式灵活性高,但调试困难,不适合我们的合规要求。代价是LangGraph的开发成本更高,条件分支逻辑需要仔细设计」。
追问二:「这个框架的瓶颈在哪里,你们怎么应对?」
好的回答不要只说「没什么大问题」,而是主动说出一个真实挑战和应对方案。例如:「LangGraph的checkpoint会显著增加内存开销,特别是在长流程里。
我们通过只在关键节点checkpoint、异步checkpoint避免阻塞、以及状态压缩来优化」。
追问三:「如果要切换到另一个框架,架构上需要改多少?」
好的回答需要说清楚「什么变了、什么没变」,以及迁移的工程量。例如:「从LangGraph切到CrewAI,主要是把状态机改成Role-Based抽象。
好处是任务分解更直观,坏处是失去了checkpoint能力,如果需要人工审批就要重新设计。
我们目前的方案是保持LangGraph为主,只在需要多Agent对话的场景里引入AutoGen」。
数据来源 :公开社区、公司页面、公开案例或公开分享汇总整理;涉及个人经历的内容已做脱敏处理,仅供参考。参考文献
-
AI Agent框架之争:盘点8大AI Agent开发框架的核心技术与工业级应用
-
开发者工具 & Agent框架深度调研
-
AI Agent开发框架怎么选:CrewAI vs AutoGen vs LangGraph vs OpenAI Agents SDK
参考文献
-
AI Agent框架之争:盘点8大AI Agent开发框架的核心技术与工业级应用
-
开发者工具 & Agent框架深度调研
-
AI Agent开发框架怎么选:CrewAI vs AutoGen vs LangGraph vs OpenAI Agents SDK
延伸入口
- 原文归档:https://tobemagic.github.io/ai-magician-blog/posts/2026/05/10/ai面试八股文-vol15-主流agent框架选型不是站队langgraphautogencrewaidifysemantic-kernelmetagpt-到底怎么选/
- 公众号:计算机魔术师
