为什么需要智能体框架?
大模型本身只是一个文本生成引擎。要构建能自主完成复杂任务的智能体,需要解决编排、状态管理、工具调用、多Agent协作等问题。智能体框架就是提供这些能力的"操作系统"。
LangGraph:图驱动的精细控制
设计哲学
LangGraph将Agent工作流建模为有向图:
- 节点:每个节点是一个处理步骤(LLM调用、工具执行、条件判断)
- 边:定义节点间的转移关系
- 状态:在图中流转的共享数据结构
核心概念
from langgraph.graph import StateGraph
# 定义状态
class AgentState(BaseModel):
messages: list = []
tool_results: dict = {}
# 创建图
graph = StateGraph(AgentState)
graph.add_node("think", think_node)
graph.add_node("act", act_node)
graph.add_node("observe", observe_node)
# 定义边
graph.add_edge("think", "act")
graph.add_conditional_edges("act", route_by_result, {
"continue": "observe",
"done": END
})
graph.add_edge("observe", "think")
优势
- 精细控制:图结构让你明确定义每一步逻辑
- 状态管理:支持checkpointer持久化状态,可恢复中断的运行
- 人机协作:内置human-in-the-loop中断点
- 可视化:图结构天然可可视化,便于调试
劣势
- 学习曲线较陡,概念抽象
- 简单任务用图建模略显笨重
- 与LangChain深度绑定,迁移成本高
适用场景
- 复杂多步工作流(审批流程、数据处理管道)
- 需要精确控制每一步的系统
- 需要状态持久化和恢复的场景
AutoGen:多Agent对话编排
设计哲学
AutoGen(微软出品)采用对话式编排——多个Agent通过对话协作完成任务。核心是将Agent视为对话参与者,而非图节点。
核心概念
from autogen import AssistantAgent, UserProxyAgent
coder = AssistantAgent(
name="coder",
system_prompt="你是一个Python开发者",
llm_config=llm_config
)
reviewer = AssistantAgent(
name="reviewer",
system_prompt="你是代码审查专家",
llm_config=llm_config
)
user = UserProxyAgent(
name="user",
human_input_mode="TERMINATE"
)
# 多Agent对话
user.initiate_chat(
coder,
message="实现一个排序算法",
reviewer作为审查者加入对话
)
优势
- 多Agent协作:天然支持多个Agent角色对话
- 灵活性高:Agent对话模式接近自然,不需要预定义流程
- 群聊模式:支持多个Agent在群聊中自主决定谁发言
- 人机混合:UserProxy支持真人参与
劣势
- 对话难以精细控制,可能进入无意义循环
- 调试困难,对话历史长
- Token消耗大(每个Agent都需完整上下文)
适用场景
- 需要多角色协作的复杂任务(开发、审查、测试)
- 创意生成(头脑风暴、方案探索)
- 模拟社会实验(多视角讨论)
CrewAI:角色驱动的团队模拟
设计哲学
CrewAI将Agent协作建模为一个组织/团队,每个Agent有明确的角色、目标和背景。强调"像真实团队一样协作"。
核心概念
from crewai import Agent, Task, Crew
researcher = Agent(
role="研究员",
goal="收集和分析市场数据",
backstory="拥有10年行业经验的资深分析师",
tools=[search_tool, scrape_tool]
)
writer = Agent(
role="撰稿人",
goal="将研究数据转化为可读报告",
backstory="知名科技博客作者"
)
research_task = Task(
description="研究AI芯片市场现状",
agent=researcher,
expected_output="市场分析数据"
)
write_task = Task(
description="撰写市场分析报告",
agent=writer,
expected_output="完整报告",
context=[research_task] # 依赖前置任务
)
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, write_task],
process=Process.sequential
)
优势
- 直观易用:角色+任务模型非常直观
- 快速上手:学习成本最低
- 任务依赖:支持任务间的依赖关系
- 人类经验融入:backstory让Agent角色更丰满
劣势
- 复杂流程控制能力不如LangGraph
- 底层依赖LangChain,灵活性受限
- 缺少状态持久化
适用场景
- 业务流程自动化(研究→撰写→审核)
- 团队协作模拟
- 快速原型开发
横向对比
| 维度 | LangGraph | AutoGen | CrewAI |
|---|---|---|---|
| 编程模型 | 有向图 | 多Agent对话 | 角色+任务 |
| 控制精度 | 最高 | 中 | 低 |
| 学习成本 | 高 | 中 | 低 |
| 多Agent协作 | 通过图实现 | 原生 | 原生 |
| 状态持久化 | ✓ | 有限 | ✗ |
| 人机协作 | ✓ | ✓ | 有限 |
| 生产就绪 | 较好 | 实验性 | 中等 |
选型建议
- 精确控制型任务:LangGraph。当你需要明确定义每一步逻辑、支持中断恢复
- 多视角协作型任务:AutoGen。当任务需要多个Agent讨论和协作
- 快速开发型任务:CrewAI。当你需要快速搭一个能跑的多Agent系统
- 生产部署:建议基于LangGraph做定制,控制力和可维护性最强
总结
智能体框架仍在快速演化,没有"最佳选择"。核心是理解各框架的设计哲学:LangGraph追求控制力,AutoGen追求协作自然性,CrewAI追求易用性。随着MCP等标准化协议的推广,未来的趋势是框架间的互操作性增强——你可以用LangGraph编排流程、AutoGen处理讨论环节、MCP统一工具接口。选型不是单选,而是组合。