第八章 Agent 框架
8.1 主流 Agent 框架概览
在第七章中,我们深入探讨了工具调用(Tool Calling)的底层机制——如何让大语言模型识别工具意图、生成结构化参数、执行函数并接收返回结果。我们已经掌握了从零开始构建一个具备工具调用能力的 Agent 所需的全部核心技能:函数签名设计、JSON Schema 描述、多轮对话中的工具状态追踪,以及错误处理与重试策略。
然而,当真正的项目需求摆在面前时,一个新的问题随之浮现:是否每次都要从零搭建? 答案通常是否定的。就像木匠不会每次都自己锻造锤子和锯子一样,Agent 开发者也需要一套现成的"工具箱"来加速开发。这就是 Agent 框架存在的意义——它们是封装了工具调用、状态管理、流程编排等通用能力的开发基础设施。
本节将带你纵览 2024–2025 年最主流的 Agent 框架生态,理解它们各自的定位、核心能力与适用场景,为后续的框架选型与深入实践打下认知基础。
8.1.1 为什么需要 Agent 框架?——"工具箱"类比
想象你要装修一间房子。你可以自己买木材、切割、打磨、组装,从零开始做每一件事——这完全可行,但效率极低。更聪明的做法是走进一家五金店,挑选合适的工具箱:电钻负责打孔,水平仪负责校准,卷尺负责测量。每件工具都针对特定场景做了优化,你只需组合使用即可。
Agent 框架就是 AI 开发者的"工具箱"。一个完整的 Agent 系统需要解决以下五类问题,而这些恰恰是框架已经帮你封装好的:
| 问题域 | 裸开发(第七章的方式) | 使用框架 |
|---|---|---|
| 工具调用 | 手写函数签名、手动解析 JSON | 框架提供装饰器/基类,一行注册 |
| 状态管理 | 自己维护对话历史字典 | 框架内置 Memory、Checkpoint 机制 |
| 流程编排 | 手写 if-else 控制流 | 框架提供图/管道/角色编排抽象 |
| 错误处理 | 手写 try-except + 重试逻辑 | 框架内置降级、超时、回退策略 |
| 可观测性 | 手写日志和追踪 | 框架集成 LangSmith 等监控工具 |
需要强调的是:理解了第七章的底层原理,你才能真正用好框架。 框架不是"黑箱",它只是在工具调用、状态管理等基础上做了工程化封装。掌握了原理,你才能在框架行为不符合预期时快速定位问题,甚至贡献代码修复 Bug。
8.1.2 框架分类全景图
当前 Agent 框架生态可以划分为三大类别,它们面向不同层次的开发者需求:
┌───────────────────────────────────────────────────────────┐
│ Agent 框架生态全景图(2024–2025) │
├───────────────────┬───────────────────┬───────────────────┤
│ 低代码 / 可视化平台 │ 通用开发框架 │ 多 Agent 协作框架 │
├───────────────────┼───────────────────┼───────────────────┤
│ Dify │ LangChain │ AutoGen │
│ Coze(字节跳动) │ LangGraph │ CrewAI │
│ n8n │ LlamaIndex │ LangGraph │
│ │ Semantic Kernel │ │
└───────────────────┴───────────────────┴───────────────────┘- 低代码平台(Dify、Coze):面向"不想写代码"的用户,通过拖拽和配置完成 Agent 搭建。就像宜家的家具——你可以根据说明书拼装,但定制空间有限。
- 通用开发框架(LangChain、LlamaIndex、Semantic Kernel):面向"想写代码但要快"的开发者,提供模块化的构建积木。就像乐高——标准化的零件可以自由组合。
- 多 Agent 协作框架(AutoGen、CrewAI、LangGraph):面向"需要多个 Agent 协同工作"的复杂场景。就像组建一个项目团队——每个成员有不同角色,通过分工协作完成任务。
接下来,我们逐一深入了解这些框架。
8.1.3 LangChain & LangGraph——通用开发框架的标杆
开发者:LangChain 公司(由 Harrison Chase 创立) 定位:LangChain 是构建单 Agent 的最快路径;LangGraph 是底层运行时,支持高度定制的多步骤 Agent。
"工具箱"类比:LangChain 像是一个全能工具箱,里面什么工具都有——模型接口、提示词模板、记忆模块、工具注册器、文档加载器。你打开工具箱,挑选需要的零件,快速组装出一个可运行的 Agent。LangGraph 则像是工具箱底层的电路板,它定义了电流(数据)如何在各个零件之间流动——从输入到输出,每一步的路径都由你精确控制。
2025 年里程碑:2025 年 10 月,LangChain 和 LangGraph 双双发布 1.0 版本,标志着 API 稳定化的关键一步。
LangChain 1.0 的核心变化:
- 聚焦核心 Agent 循环:观察 → 思考 → 行动,API 大幅简化
- 引入**中间件(Middleware)**概念:允许在 Agent 循环的各个阶段插入自定义逻辑
- 模型集成升级:支持最新的多模态内容类型(图片、音频、视频)
LangGraph 1.0 的核心能力:
- 基于有向图的状态机模型:节点(Node)执行操作,边(Edge)控制流转
- 内置持久化状态管理:支持检查点(Checkpoint)和时间旅行回溯
- 支持人机协作循环(Human-in-the-Loop):在关键节点暂停等待人类审批
- 底层运行时设计:适合生产环境的长运行 Agent
# ===== LangChain 1.0 风格:最简 Agent 创建 =====
from langchain.agents import create_agent # 导入 1.0 版本的 Agent 工厂函数
agent = create_agent( # 创建 Agent 实例
model="claude-sonnet-4-5-20250901", # 指定底层模型(支持模型名字符串)
tools=[search_tool, calculator_tool], # 传入工具列表(第七章定义的工具可直接复用)
system_prompt="你是一个有帮助的助手,可以使用搜索和计算工具。"
# 系统提示词定义 Agent 的人格和行为规范
)
# 调用 Agent,传入用户消息(格式与原生 OpenAI API 兼容)
result = agent.invoke({
"messages": [
{"role": "user", "content": "东京人口乘以3是多少?"}
]
})
# result["messages"][-1].content 即为 Agent 的最终回复# ===== LangGraph 风格:图结构 Agent =====
from langgraph.graph import StateGraph, MessagesState, START, END
# StateGraph: 图构建器
# MessagesState: 内置的消息列表状态
# START/END: 图的入口和出口标记
def chatbot(state: MessagesState): # 定义节点函数,接收当前状态
return {"messages": [llm.invoke(state["messages"])]}
# 调用 LLM 处理消息,返回更新后的状态
graph_builder = StateGraph(MessagesState) # 创建图构建器,以消息列表为状态
graph_builder.add_node("chatbot", chatbot) # 注册节点:名称为 "chatbot",绑定处理函数
graph_builder.add_edge(START, "chatbot") # 添加边:入口 → chatbot 节点
graph_builder.add_edge("chatbot", END) # 添加边:chatbot 节点 → 出口
graph = graph_builder.compile() # 编译为可执行的有向图典型场景:需要精细控制流程的企业级应用、RAG 系统、复杂决策链。
8.1.4 AutoGen——对话驱动的多智能体协作
开发者:微软研究院(Microsoft Research) 定位:以对话为核心抽象的多智能体协作框架,强调灵活交互与人类参与。
"工具箱"类比:如果 LangChain 是一个人的工具箱,AutoGen 则是一个会议室——多个 Agent 围坐桌前,通过对话来协商分工、交换信息、协同解决问题。人类(用户代理)也可以坐在桌旁,随时插话或做最终决策。
核心概念:
| 概念 | 说明 | 类比 |
|---|---|---|
| Agent | 具有特定角色和能力的智能体 | 会议中的发言者 |
| Conversation | Agent 之间通过消息传递协作 | 会议讨论过程 |
| Team | 多个 Agent 组成的协作团队 | 一个完整的项目组 |
| Human-in-the-Loop | 人类可随时介入调整流程 | 旁听的项目经理 |
2025 年进展:AutoGen 在多个 Agentic 基准测试中取得 SOTA(State-of-the-Art)性能,支持多种 LLM 后端(OpenAI、Anthropic 等),对 Azure 生态深度友好。
# ===== AutoGen 多智能体对话示例 =====
from autogen import AssistantAgent, UserProxyAgent
# AssistantAgent: AI 助手角色,可调用 LLM 生成回复
# UserProxyAgent: 用户代理角色,可执行代码并代表用户发言
assistant = AssistantAgent( # 创建 AI 助手 Agent
name="assistant", # Agent 名称(对话中显示的标识)
llm_config={ # LLM 配置字典
"config_list": [{
"model": "gpt-4o", # 指定模型
"api_key": "..." # API 密钥
}]
},
system_message="你是一个Python编程专家。"
# 系统消息定义角色人设
)
user_proxy = UserProxyAgent( # 创建用户代理 Agent
name="user_proxy", # Agent 名称
code_execution_config={ # 代码执行配置
"work_dir": "coding", # 代码执行的工作目录
"use_docker": False # 是否使用 Docker 隔离执行环境
},
human_input_mode="TERMINATE"
# 人类输入模式:仅在终止前请求人类确认
)
# 启动 Agent 之间的对话
user_proxy.initiate_chat( # 用户代理发起对话
assistant, # 对话对象:AI 助手
message="写一个Python函数计算斐波那契数列,并测试前10项。"
# 初始消息:提出任务需求
)
# AutoGen 会自动管理后续的多轮对话典型场景:需要多智能体协作的复杂任务、代码生成与自动执行、研究探索类开放任务。
8.1.5 CrewAI——角色化的多智能体团队
开发者:CrewAI(独立创业公司,2024 年成立) 定位:以团队角色为核心抽象的多智能体框架,模拟真实组织中的人员分工模式。
"工具箱"类比:CrewAI 更像是一个剧组——你先写好剧本(Task),再招募演员并分配角色(Agent),然后让导演按流程安排戏份(Process),最终拍出完整的作品。每个角色都有明确的职责和目标,彼此配合完成一部大戏。
核心概念:
| 概念 | 说明 | 类比 |
|---|---|---|
| Agent | 定义角色名称、职责、目标、背景故事 | 剧组中的演员 |
| Task | 明确的任务描述、预期输出、分配给哪个 Agent | 剧本中的戏份 |
| Crew | 将 Agent 和 Task 组合成协作团队 | 完整剧组 |
| Process | 执行流程:Sequential(顺序)或 Hierarchical(层级) | 导演的拍摄安排 |
2024–2025 年,CrewAI 推出了 CLI 项目生成器和 GUI 管理界面,大幅降低了使用门槛。
# ===== CrewAI 角色化团队示例 =====
from crewai import Agent, Task, Crew, Process
# Agent: 角色定义类
# Task: 任务定义类
# Crew: 团队组装类
# Process: 执行模式枚举
# --- 第一步:定义角色(Agent)---
researcher = Agent( # 创建市场研究员角色
role="市场研究员", # 角色名称
goal="收集并分析最新的市场趋势数据", # 角色目标
backstory="你是一位经验丰富的市场分析师,擅长从各种渠道提取关键信息。",
# 背景故事:帮助 LLM 理解角色的行为风格
verbose=True # 启用详细日志输出
)
writer = Agent( # 创建报告撰写人角色
role="报告撰写人", # 角色名称
goal="将研究结果整理成结构清晰的报告", # 角色目标
backstory="你是一位专业的商业报告撰写人,擅长将复杂信息转化为简洁的叙述。",
verbose=True
)
# --- 第二步:定义任务(Task)---
research_task = Task( # 创建研究任务
description="研究2024-2025年AI Agent框架的市场趋势",
agent=researcher, # 分配给市场研究员
expected_output="一份包含关键趋势、市场规模和主要参与者的分析报告"
# 预期输出格式
)
writing_task = Task( # 创建写作任务
description="根据研究结果撰写一份执行摘要",
agent=writer, # 分配给报告撰写人
expected_output="一份500字的执行摘要,包含关键发现和建议"
)
# --- 第三步:组建团队(Crew)并执行 ---
crew = Crew( # 组建团队
agents=[researcher, writer], # 注册所有角色
tasks=[research_task, writing_task], # 注册所有任务
process=Process.sequential # 顺序执行模式:先研究后写作
)
result = crew.kickoff() # 启动团队执行,返回最终结果典型场景:内容创作流水线、市场研究自动化、需要明确角色分工的业务流程。
8.1.6 Dify & Coze——低代码可视化平台
当目标用户不是程序员,而是产品经理、运营人员或业务专家时,低代码平台就成为了首选。它们把"写代码"变成了"拖连线"。
Dify(开源 LLM 应用开发平台):
- 定位:可视化的 AI 应用开发平台,支持从原型到生产的全流程
- 核心能力:
- 拖拽式工作流编排,无需编写代码即可串联多个节点
- 内置 RAG 引擎(文档解析、向量化、检索),开箱即用
- 插件热部署,可快速接入外部 API
- 完整的调试和监控工具,支持版本管理
- 支持多种 LLM(OpenAI、通义千问、文心一言等)
- 开源地址:https://github.com/langgenius/dify(35k+ Stars)
Coze(字节跳动):
- 定位:面向非技术用户的 Agent 构建平台,强调"零代码"
- 核心能力:
- 零代码 Bot 构建,通过自然语言描述即可创建 Agent
- 丰富的插件市场,覆盖搜索、绘图、数据库等场景
- 知识库管理,支持文档上传和自动索引
- 多渠道发布(飞书、微信、Discord 等),一键触达用户
- 工作流编排(2024 年新增),支持条件分支和循环
两者区别:
| 维度 | Dify | Coze |
|---|---|---|
| 目标用户 | 开发者、技术团队 | 业务人员、非技术用户 |
| 部署方式 | 可私有化部署 | 云端 SaaS 为主 |
| 开源情况 | 完全开源 | 闭源商业产品 |
| 生态集成 | 通用 API 生态 | 国内生态(飞书、微信等) |
| 定制深度 | 中–高 | 低–中 |
"工具箱"类比:Dify 和 Coze 像是预制家具套装——你不需要自己切割木板,只需按说明书组装。Dify 提供了更多"螺丝孔"供高级用户微调,Coze 则追求"开箱即用"的极致简洁。
典型场景:快速原型验证、内部知识库问答、面向非技术团队的 AI 应用搭建。
8.1.7 LlamaIndex——以数据为中心的框架
开发者:LlamaIndex Inc.(由 Jerry Liu 创立) 定位:以数据连接与索引为核心的 LLM 应用框架,在 RAG(检索增强生成)领域尤为突出。
"工具箱"类比:如果 LangChain 是通用工具箱,LlamaIndex 就是一套专业的档案管理系统——它最擅长的是把各种格式的数据(PDF、数据库、API、网页)整理、索引、检索,然后交给 LLM 使用。
核心特点:
- 数据连接器:支持 160+ 数据源(PDF、SQL、Notion、Slack、API 等),几乎覆盖所有常见数据格式
- 索引结构:多种索引类型可选——向量索引(语义检索)、树索引(层级摘要)、关键词索引(精确匹配)
- 查询引擎:支持复杂查询策略(子问题分解、多步推理、混合检索)
- Agent 能力:2024 年推出的
LlamaIndex Agent支持工具调用和多步推理,与 LangChain 的 Agent 形成互补
# ===== LlamaIndex Agent 示例 =====
from llama_index.core.agent import ReActAgent # 导入 ReAct 推理模式 Agent
from llama_index.core.tools import FunctionTool # 导入工具封装类
def multiply(a: int, b: int) -> int: # 定义一个乘法函数
"""Multiply two integers and return the result."""
# 文档字符串会被自动提取为工具描述
return a * b
multiply_tool = FunctionTool.from_defaults(fn=multiply)
# 将普通函数封装为 LlamaIndex 工具对象
# from_defaults 会自动推断参数类型和描述
agent = ReActAgent.from_tools( # 创建 ReAct 模式 Agent
[multiply_tool], # 注册工具列表
llm=llm, # 传入 LLM 实例
verbose=True # 启用详细输出(可观察推理过程)
)
# ReAct 模式:Reason(推理)→ Act(行动)→ Observe(观察)循环
response = agent.chat("15乘以23等于多少?")
# Agent 会自动:1) 推理需要调用乘法工具
# 2) 生成工具调用参数 a=15, b=23
# 3) 执行工具获得结果 345
# 4) 将结果组织为自然语言回复典型场景:企业知识库问答、数据分析 Agent、需要复杂数据检索的场景。
8.1.8 Semantic Kernel——微软的企业级编排框架
开发者:微软 定位:企业级 AI 编排框架,将 AI 能力无缝集成到现有应用系统中。
"工具箱"类比:Semantic Kernel 像是工厂里的中央控制系统(PLC)——它不关心工具长什么样,而是专注于如何把各个工具(Plugin)编排到一条生产线上,让它们按序执行、协同产出。它天然与微软的 Azure 云服务和 .NET 生态深度绑定。
核心概念:
| 概念 | 说明 |
|---|---|
| Plugin | 封装了特定功能的可复用模块(原生函数 + 语义函数) |
| Kernel | 编排中心,管理插件注册、服务选择、执行管道 |
| Memory | 语义记忆存储,支持向量搜索 |
| Agent | 2024 年新增的 Agent 抽象层 |
独特优势:
- 深度集成 .NET 生态(同时支持 Python 和 Java)
- 企业级安全与合规能力
- 支持 Azure AI 服务一站式集成
- 插件化架构天然适合微服务场景
# ===== Semantic Kernel Python 示例 =====
import semantic_kernel as sk # 导入 Semantic Kernel 核心包
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
# 导入 OpenAI 聊天补全服务连接器
kernel = sk.Kernel() # 创建 Kernel 实例(编排中心)
kernel.add_service(OpenAIChatCompletion( # 注册 AI 服务
service_id="gpt-4", # 服务标识符
api_key="..." # API 密钥
))
# 注册原生插件(使用装饰器将函数注册为插件)
@kernel.function(description="获取当前时间") # description 会作为工具描述传给 LLM
def get_current_time() -> str: # 定义获取时间的函数
from datetime import datetime
return datetime.now().isoformat() # 返回 ISO 格式的时间字符串
# 使用 Agent 抽象层
from semantic_kernel.agents import ChatCompletionAgent
agent = ChatCompletionAgent( # 创建聊天补全 Agent
kernel=kernel, # 绑定 Kernel 实例
name="助手", # Agent 名称
instructions="你是一个有帮助的助手,可以获取当前时间。"
# 指令定义 Agent 行为
)典型场景:微软技术栈的企业应用、需要与现有系统深度集成的场景。
8.1.9 框架选择速查表
下表从六个维度横向对比六大主流框架,帮助你在选型时快速定位:
| 维度 | LangChain/LangGraph | AutoGen | CrewAI | Dify/Coze | LlamaIndex | Semantic Kernel |
|---|---|---|---|---|---|---|
| 上手难度 | 中等 | 中等 | 低 | 极低 | 中等 | 中等 |
| 定制深度 | 极高 | 高 | 中 | 低–中 | 高 | 高 |
| 多 Agent | LangGraph 支持 | 原生支持 | 原生支持 | 有限 | 有限 | 插件支持 |
| 可视化 | LangSmith | 无 | GUI | 全可视化 | 无 | 无 |
| 企业就绪 | 高 | 高 | 中 | 中 | 中 | 极高 |
| 生态丰富度 | 极高 | 高 | 中 | 中 | 高 | 高 |
选型口诀:快速验证选 Dify/Coze,单 Agent 开发选 LangChain,数据检索选 LlamaIndex,多 Agent 协作选 AutoGen/CrewAI,微软技术栈选 Semantic Kernel。
8.1.10 常见误区
在实际开发和技术社区交流中,我们观察到以下几类常见误区,值得在此专门提醒:
误区一:"框架越多越好,全都用上"
有些团队在项目初期同时引入 LangChain、LlamaIndex、AutoGen 等多个框架,试图"取各家之长"。但实践表明,框架间的抽象差异会导致集成成本远高于预期——不同框架的 Memory 格式不兼容、工具注册方式各异、状态管理逻辑冲突。
建议:一个项目选择一个主框架,在必要时通过标准接口(如 OpenAI Function Calling 格式)桥接其他框架的能力。
误区二:"框架能解决一切问题,不需要理解底层"
第七章我们手动实现了工具调用的完整流程。有读者可能认为:"既然框架已经封装好了,为什么还要学底层原理?" 原因在于:框架的行为并非完全透明。当 Agent 在生产环境中出现"工具调用失败""状态丢失""死循环"等问题时,如果不理解底层机制,你将无法定位根因。
建议:先掌握第七章的底层原理,再使用框架。框架是"加速器"而非"替代品"。
误区三:"LangChain 就是 Agent 框架的全部"
LangChain 确实是知名度最高的框架,但它并非所有场景的最佳选择。对于需要多 Agent 对话协作的场景,AutoGen 的对话抽象更自然;对于数据密集型应用,LlamaIndex 的索引能力更强;对于企业级 .NET 应用,Semantic Kernel 的集成更顺畅。
建议:根据场景选型,而非根据知名度选型。8.2 节将提供更详细的对比分析。
误区四:"低代码平台不适合生产环境"
许多开发者认为 Dify、Coze 这类低代码平台只能做原型,无法用于生产。事实上,Dify 支持私有化部署、提供完整的监控和版本管理,已被大量企业用于生产环境。Coze 也在持续增强企业级能力。
建议:低代码平台同样可以上生产,关键在于评估其监控、扩展性和数据安全能力是否满足你的需求。
误区五:"多 Agent 一定比单 Agent 好"
多 Agent 架构在复杂任务中确实展现出优势,但也带来了更高的复杂度——协调成本增加、调试难度上升、Token 消耗翻倍。对于简单任务,一个设计良好的单 Agent 加上合适的工具集,往往比多 Agent 更高效可靠。
建议:先用单 Agent 验证可行性,仅在单 Agent 无法满足需求时才引入多 Agent 架构。
8.1.11 本节小结
本节我们从第七章的工具调用底层原理出发,过渡到 Agent 框架的选型视角,通过"工具箱"类比建立了对框架价值的直观理解。核心要点如下:
框架的本质:Agent 框架是对工具调用、状态管理、流程编排等通用能力的工程化封装,是开发者的"工具箱"。
三大类别:
- 低代码平台(Dify、Coze):面向非技术用户,拖拽式搭建
- 通用开发框架(LangChain、LlamaIndex、Semantic Kernel):面向开发者,模块化组装
- 多 Agent 协作框架(AutoGen、CrewAI、LangGraph):面向复杂协作场景
六大框架定位:
- LangChain/LangGraph:通用 Agent 开发的标杆,1.0 版本标志着 API 稳定
- AutoGen:对话驱动的多智能体协作,微软出品
- CrewAI:角色化团队模拟,适合内容创作与业务流程
- Dify/Coze:低代码可视化,快速原型与生产部署
- LlamaIndex:以数据为中心,RAG 领域的专家
- Semantic Kernel:企业级编排,微软技术栈的深度集成
选型原则:没有"最好"的框架,只有"最适合"你场景的框架。选型时应综合考虑上手难度、定制深度、多 Agent 需求、可视化需求、企业就绪度和生态丰富度。
常见误区:避免"多框架混用""忽视底层""盲目追求多 Agent"等陷阱。
在下一节 8.2 框架深度对比与选型指南 中,我们将从架构设计、协作模式、工具集成、性能基准等维度,对 LangChain/LangGraph、AutoGen、CrewAI 三大主流框架进行深度横向对比,并通过同一任务的多种框架实现来直观展现设计差异,帮助你在真实项目中做出最优选型决策。