第四节 构建复杂多智能体系统选型对比
架构原理解析:图论 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)和可用的工具,然后把它们拉进一个群聊,让它们自己去讨论和解决问题。
实战对比:共同完成一个代码编写与测试任务
假设我们需要构建一个包含两个 Agent 的系统:
Coder: 负责根据需求编写 Python 代码。
Tester: 负责运行代码,并将错误反馈给 Coder,直到代码成功运行。
3.1 使用 LangGraph 实现
在 LangGraph 中,我们需要精确定义 State,以及 Coder 和 Tester 两个节点。
python
代码块
Python
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"])
3.2 使用 AutoGen 实现
在 AutoGen 中,代码会显得更加声明式(Declarative)。我们只需要定义好两个 Agent 即可。
python
代码块
Python
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}
)
如果你想对比这两种框架在复杂项目中的代码结构差异,可以使用 QubitTool 的 文本对比工具 来更直观地查看异同。
选型建议
在实际的企业级项目落地中,到底该选谁?
选择 LangGraph 如果:
•
你的业务流程(Workflow)非常明确且固定(如:客服接入 -> 意图识别 -> 知识库检索 -> 生成回复)。
•
你需要对执行过程进行精细的日志记录和状态回溯(Time Travel)。
•
你需要引入人工干预(Human-in-the-loop)来审批某个关键节点的输出。
•
你已经深度绑定了 LangChain 生态。
选择 AutoGen 如果:
•
你的任务具有高度的探索性和开放性(如:让多个 AI 共同探讨一个商业计划)。
•
你需要快速搭建原型(Prototype),不想编写冗长的状态管理代码。
•
你需要非常灵活的组网模式(如:多个子群聊嵌套、群聊动态选举发言人)。
常见问题 (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 时,不妨先梳理清楚:你的任务到底需要多大程度的“失控”?