随着 AI 应用从简单的“单轮问答(Chat)”向“复杂任务执行(Agentic Workflow)”演进,单一的大语言模型(LLM)往往力不从心。无论是处理需要多步规划的软件工程任务,还是进行深度市场调研,让多个专注于特定领域的 Agent 协同工作,已经成为业界的共识。
在目前的多智能体(Multi-Agent)框架中,LangChain 的 LangGraph 和 Microsoft 的 AutoGen 是最受开发者关注的两大明星项目。但它们的设计哲学截然不同,选错框架可能会让你的代码陷入无尽的调试泥潭。
本文将从架构原理出发,通过一个实战案例深度对比 LangGraph 与 AutoGen。
1. 为什么需要多智能体(Multi-Agent)协作?
想象一下你要开发一个新功能。如果你把所有任务(需求分析、编写代码、运行测试、代码审查)都扔给一个全能型 Agent,它很容易在长长的上下文(Context)中迷失,导致输出质量严重下降。
而在 Multi-Agent 系统中:
- 专职化: 程序员 Agent 只负责写代码,测试员 Agent 只负责写单测。
- 并行与容错: 如果测试失败,测试员可以将错误日志(Error Log)反馈给程序员,形成一个自动修复的闭环(Loop)。
2. 架构原理解析:图论 vs 对话
2.1 LangGraph 架构解析:基于图论的状态机
LangGraph 的核心思想是将多 Agent 的工作流抽象为一张有向图(Directed Graph)。
- 节点(Nodes): 每个节点代表一个具体的执行步骤(可以是一个 Agent、一个工具调用,或者一段 Python 函数)。
- 边(Edges): 定义了节点之间的流转逻辑(条件判断,例如“如果测试通过则结束,否则返回代码节点”)。
- 状态(State): 在整个图的执行过程中,有一个全局的
State对象在各个节点之间传递。每个节点都会读取当前状态,并返回一个更新后的状态。
设计哲学:高度可控、确定性强、状态管理透明。你就像在画一个精确的流程图,所有的流转都在你的掌控之中。
2.2 AutoGen 架构解析:基于对话的交互网络
AutoGen 的核心概念是 ConversableAgent(可对话智能体)。
- 所有的 Agent 都在一个“聊天室”里通过互相发送消息(Messages)来协作。
- 任务的推进不依赖预定义的流程图,而是依赖 Agent 之间的自然语言沟通和内置的终止条件(如接收到 "TERMINATE" 字符串)。
设计哲学:高度灵活、探索性强、代码编写极其简洁。你只需要定义好每个 Agent 的人设(System Prompt)和可用的工具,然后把它们拉进一个群聊,让它们自己去讨论和解决问题。
3. 实战对比:共同完成一个代码编写与测试任务
假设我们需要构建一个包含两个 Agent 的系统:
- Coder: 负责根据需求编写 Python 代码。
- Tester: 负责运行代码,并将错误反馈给 Coder,直到代码成功运行。
3.1 使用 LangGraph 实现
在 LangGraph 中,我们需要精确定义 State,以及 Coder 和 Tester 两个节点。
from typing import TypedDict, Annotated
from langgraph.graph import StateGraph, END
import operator
# 1. 定义全局状态
class AgentState(TypedDict):
messages: Annotated[list, operator.add]
code: str
test_result: str
iterations: int
# 2. 定义节点函数
def coder_node(state: AgentState):
# 调用 LLM 生成或修改代码
code = llm.invoke("编写或修改代码: " + str(state["messages"]))
return {"code": code, "iterations": state["iterations"] + 1}
def tester_node(state: AgentState):
# 模拟运行代码并返回结果
result = run_python_code(state["code"])
return {"test_result": result}
# 3. 定义条件边
def should_continue(state: AgentState):
if "SUCCESS" in state["test_result"]:
return END
if state["iterations"] > 3: # 防止死循环
return END
return "coder"
# 4. 构建工作流图
workflow = StateGraph(AgentState)
workflow.add_node("coder", coder_node)
workflow.add_node("tester", tester_node)
workflow.set_entry_point("coder")
workflow.add_edge("coder", "tester")
workflow.add_conditional_edges("tester", should_continue)
app = workflow.compile()
3.2 使用 AutoGen 实现
在 AutoGen 中,代码会显得更加声明式(Declarative)。我们只需要定义好两个 Agent 即可。
from autogen import AssistantAgent, UserProxyAgent
# 1. 定义 Coder Agent (负责写代码)
coder = AssistantAgent(
name="Coder",
llm_config={"config_list": config_list},
system_message="你是一个高级 Python 工程师。请根据需求编写代码。如果测试员报告了错误,请修复代码并重新输出。"
)
# 2. 定义 Tester Agent (作为代理执行代码)
tester = UserProxyAgent(
name="Tester",
human_input_mode="NEVER",
max_consecutive_auto_reply=3,
is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"),
code_execution_config={"work_dir": "coding", "use_docker": False}
)
# 3. 启动对话任务
tester.initiate_chat(
coder,
message="请编写一个函数来计算斐波那契数列,并包含断言测试。"
)
如果你想对比这两种框架在复杂项目中的代码结构差异,可以使用 QubitTool 的 文本对比工具 来更直观地查看异同。
4. 选型建议
在实际的企业级项目落地中,到底该选谁?
选择 LangGraph 如果:
- 你的业务流程(Workflow)非常明确且固定(如:客服接入 -> 意图识别 -> 知识库检索 -> 生成回复)。
- 你需要对执行过程进行精细的日志记录和状态回溯(Time Travel)。
- 你需要引入人工干预(Human-in-the-loop)来审批某个关键节点的输出。
- 你已经深度绑定了 LangChain 生态。
选择 AutoGen 如果:
- 你的任务具有高度的探索性和开放性(如:让多个 AI 共同探讨一个商业计划)。
- 你需要快速搭建原型(Prototype),不想编写冗长的状态管理代码。
- 你需要非常灵活的组网模式(如:多个子群聊嵌套、群聊动态选举发言人)。
5. 常见问题 (FAQ)
Q: 这两个框架处理死循环(Infinite Loops)的能力如何?
A: AutoGen 依赖配置 max_consecutive_auto_reply 来硬性切断无意义的相互推诿。而 LangGraph 则可以通过在全局 State 中记录迭代次数(Iterations),并在条件边(Conditional Edges)中编写更复杂的退出逻辑。
Q: 哪里可以找到更多 Multi-Agent 框架? A: 多智能体领域发展迅速,除了这两个巨头,还有 CrewAI、MetaGPT 等优秀框架。你可以访问 QubitTool 的 AI Agent 导航库 获取最新的框架评测和实战案例。
总结
LangGraph 就像是一条精密的流水线,强调控制和确定性;而 AutoGen 则像是一个高效的研讨会,强调涌现和灵活性。没有绝对的优劣,只有最适合业务场景的选型。在构建你自己的 Agentic Workflow 时,不妨先梳理清楚:你的任务到底需要多大程度的“失控”?