Skip to content

第八章 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
python
# ===== 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 的最终回复
python
# ===== 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具有特定角色和能力的智能体会议中的发言者
ConversationAgent 之间通过消息传递协作会议讨论过程
Team多个 Agent 组成的协作团队一个完整的项目组
Human-in-the-Loop人类可随时介入调整流程旁听的项目经理

2025 年进展:AutoGen 在多个 Agentic 基准测试中取得 SOTA(State-of-the-Art)性能,支持多种 LLM 后端(OpenAI、Anthropic 等),对 Azure 生态深度友好。

python
# ===== 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 管理界面,大幅降低了使用门槛。

python
# ===== 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 年新增),支持条件分支和循环

两者区别

维度DifyCoze
目标用户开发者、技术团队业务人员、非技术用户
部署方式可私有化部署云端 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 形成互补
python
# ===== 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语义记忆存储,支持向量搜索
Agent2024 年新增的 Agent 抽象层

独特优势

  • 深度集成 .NET 生态(同时支持 Python 和 Java)
  • 企业级安全与合规能力
  • 支持 Azure AI 服务一站式集成
  • 插件化架构天然适合微服务场景
python
# ===== 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/LangGraphAutoGenCrewAIDify/CozeLlamaIndexSemantic Kernel
上手难度中等中等极低中等中等
定制深度极高低–中
多 AgentLangGraph 支持原生支持原生支持有限有限插件支持
可视化LangSmithGUI全可视化
企业就绪极高
生态丰富度极高

选型口诀:快速验证选 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 框架的选型视角,通过"工具箱"类比建立了对框架价值的直观理解。核心要点如下:

  1. 框架的本质:Agent 框架是对工具调用、状态管理、流程编排等通用能力的工程化封装,是开发者的"工具箱"。

  2. 三大类别

    • 低代码平台(Dify、Coze):面向非技术用户,拖拽式搭建
    • 通用开发框架(LangChain、LlamaIndex、Semantic Kernel):面向开发者,模块化组装
    • 多 Agent 协作框架(AutoGen、CrewAI、LangGraph):面向复杂协作场景
  3. 六大框架定位

    • LangChain/LangGraph:通用 Agent 开发的标杆,1.0 版本标志着 API 稳定
    • AutoGen:对话驱动的多智能体协作,微软出品
    • CrewAI:角色化团队模拟,适合内容创作与业务流程
    • Dify/Coze:低代码可视化,快速原型与生产部署
    • LlamaIndex:以数据为中心,RAG 领域的专家
    • Semantic Kernel:企业级编排,微软技术栈的深度集成
  4. 选型原则:没有"最好"的框架,只有"最适合"你场景的框架。选型时应综合考虑上手难度、定制深度、多 Agent 需求、可视化需求、企业就绪度和生态丰富度。

  5. 常见误区:避免"多框架混用""忽视底层""盲目追求多 Agent"等陷阱。

在下一节 8.2 框架深度对比与选型指南 中,我们将从架构设计、协作模式、工具集成、性能基准等维度,对 LangChain/LangGraph、AutoGen、CrewAI 三大主流框架进行深度横向对比,并通过同一任务的多种框架实现来直观展现设计差异,帮助你在真实项目中做出最优选型决策。