2024年,Agent 赛道终于热起来了。从 OpenAI 的 GPT-4 Agents 到国内的通义千问、Kimi,各家都在抢 Agent 的定义权。但对于写代码的人来说,真正的问题是:到底用哪个框架来搭 Agent?
这篇文章会拆解目前几个主流框架,讲讲各自的设计思路、代码怎么写、工具生态怎么样,最后给点选型建议。文章不短,但废话不多。
一、为什么需要 Agent 框架
先搞清楚一件事:Agent 框架解决的是什么问题?
普通的 LLM 调用很简单,你给一段 prompt,模型返回一个答案。但 Agent 要做的事情不一样——模型要自主决策、调用工具、感知环境、持续行动。
这带来几个实际挑战:
1. 状态管理:多轮对话里怎么维护上下文和记忆 2. 工具调用:怎么定义、注册、调用外部工具 3. 规划推理:模型怎么决定下一步做什么 4. 错误恢复:工具调用失败后怎么处理 5. 多 Agent 协作:多个 Agent 之间怎么分工通信
这些问题,框架帮你抽象好了。没有框架当然也能用 API 拼,但大概率会重复造一堆轮子。
二、主流框架扫一遍
2.1 LangGraph —— 图计算范式
一句话:用图结构组织 Agent 工作流,适合复杂、有状态的场景。
LangGraph 是 LangChain 团队出的新一代框架,核心思路是把 Agent 的执行过程建模成有向图。每个节点是一个操作(LLM 调用、工具执行、状态更新),每条边是状态转移。
好处:
• 可视化好:工作流画出来一目了然 • 可控性强:执行顺序、分支逻辑自己定 • 状态持久化:天然支持 checkpointing,暂停/恢复不难 • 循环结构:Agent 和工具之间的来回交互原生支持
适合:需要复杂决策树、需要持久化状态、需要精细控制执行流程的企业级应用。
缺点:上手曲线不低,API 变化快,有些功能还在实验阶段。
2.2 AutoGen —— 多 Agent 对话
一句话:围绕多 Agent 协作设计,适合需要多个角色配合的系统。
AutoGen 是微软出的框架,核心理念是多 Agent 协作。每个 Agent 有自己的角色(User Proxy、Assistant),Agent 之间通过消息传递通信。
几个亮点:
• 多 Agent 原生支持:有群聊管理器,多 Agent 协作直接能用 • 代码执行:Agent 能直接跑 Python 代码,适合数据分析 • 人机协作:关键节点可以插入人工反馈 • 消息机制灵活:Agent 可以选择回复谁、不回复谁
代码示例 —— 简单多 Agent 对话:
from autogen import ConversableAgent, GroupChat, GroupChatManager# 助手 Agentassistant = ConversableAgent( name="assistant", system_message="你是一个专业的技术写作助手。", llm_config={"model": "gpt-4", "api_key": "your-api-key"},)# 用户代理 Agentuser_proxy = ConversableAgent( name="user_proxy", is_termination_msg=lambda msg: "完成" in msg.get("content", ""), human_input_mode="NEVER", system_message="代表用户执行任务的代理。",)# 启动对话chat_result = user_proxy.initiate_chat( assistant, message="帮我写一段关于 AI Agent 的介绍,字数 200 字以内。",)适合:需要多角色配合的研究探索、数据分析代码生成、需要人在环路的审批流程。
缺点:单 Agent 场景有点重,消息传递机制调试起来有时候摸不着头脑。
2.3 CrewAI —— 角色和任务
一句话:围绕角色和任务设计,适合业务流程自动化。
CrewAI 的设计思路很直接:让 Agent 像团队一样工作。引入了 Crew(团队)和 Task(任务)的概念,每个 Agent 有自己的 Role(角色)、Goal(目标)和 Backstory(背景故事)。
特色:
• 角色感:Agent 有身份、有目标,不是冷冰冰的工具 • 任务流水线:支持顺序和并行执行,自动处理依赖 • 工具复用:内置常用工具,扩展起来方便 • 中文友好:文档和社区都还行
代码示例 —— 任务协作流水线:
from crewai import Agent, Task, Crew# 研究员 Agentresearcher = Agent( role="高级研究员", goal="收集并整理 AI Agent 领域的最新发展趋势", backstory="你是一名在 AI 领域深耕多年的研究员,擅长从海量信息中提炼核心观点。", verbose=True)# 作家 Agentwriter = Agent( role="技术作家", goal="将研究成果转化为通俗易懂的技术文章", backstory="你是一名专业技术作家,能用生动的语言解释复杂的技术概念。", verbose=True)# 定义任务research_task = Task( description="调研 2024 年主流 Agent 框架的发展现状,包括 LangGraph、AutoGen、CrewAI 等。", agent=researcher, expected_output="一份结构化的研究报告,涵盖各框架的核心特性和优劣势。",)write_task = Task( description="基于研究报告,撰写一篇面向开发者的技术文章。", agent=writer, expected_output="一篇 2000 字左右的技术文章。", context=[research_task], # 依赖前一个任务)# 组建团队并执行crew = Crew(agents=[researcher, writer], tasks=[research_task, write_task])result = crew.kickoff()适合:内容创作流水线、市场调研报告、多步骤业务流程自动化。
缺点:深度定制能力一般,复杂决策逻辑实现起来有点费劲。
2.4 Semantic Kernel —— 微软技术栈首选
一句话:微软官方出品,适合 .NET/TypeScript 团队。
Semantic Kernel 是微软 Azure 团队维护的框架,定位明确:企业级 AI 应用。支持 C#、Python 和 TypeScript,.NET 团队迁移成本很低。
核心特性:
• Planner 机制:内置任务规划,Agent 能自动拆解复杂任务 • 内存抽象:短期记忆、长期记忆可以灵活配置 • 连接器模式:标准化的插件/技能注册机制 • 企业级支持:微软背书,稳定性有保障
适合:.NET 技术栈企业应用、已有 Azure/Microsoft 365 集成的项目。
缺点:Python 生态没有 LangGraph 成熟,社区资源相对少。
2.5 其他值得关注
| Dify | ||
| Coze | ||
| Flowise | ||
| LlamaIndex |
三、工具生态:框架之外的战场
框架只是骨架,Agent 能力上限看工具生态。一个框架能走多远,很大程度看它对工具的支持。
3.1 工具注册与调用
主流框架都差不多:让 LLM 输出结构化的"工具调用"指令,框架解析并执行。OpenAI 的 Function Calling 和 Anthropic 的 Tool Use 协议是现在的主流标准。
# LangGraph 风格的工具定义from langchain_core.tools import tool@tooldef search_database(query: str) -> str: """在知识库中搜索相关信息。""" # 实际会调用向量数据库 return f"根据 '{query}' 找到以下结果:..."@tooldef send_email(recipient: str, content: str) -> str: """发送邮件通知。""" return f"邮件已发送给 {recipient}"3.2 工具选择与路由
进阶问题:有多个可用工具时,Agent 怎么选?
几种策略:
1. LLM 原生判断:让模型自己选(灵活但贵) 2. 关键词匹配:基于工具描述的向量相似度(成本和效果平衡) 3. 硬编码路由:prompt 里规定好什么场景用什么(最可控但最死板)
好框架会把这几种策略的接口暴露出来,让你选,而不是替你选。
3.3 工具执行与错误处理
工具调用失败的场景很常见——API 超时、网络抖动、外部服务挂了。框架要提供:
• 超时控制:工具执行不能无限等 • 重试机制:自动重试失败的调用 • 降级策略:主工具挂了尝试备选 • 执行日志:方便定位问题在哪一步
这里有个很容易被忽视的坑:工具描述的质量直接决定调用准确率。很多团队花大把时间优化模型,却不愿意在工具描述上用心。实际上,一段模糊的工具描述比一个弱的模型更能毁掉一个 Agent。建议每个工具都写清楚:参数含义、返回值格式、使用限制、常见错误。
3.4 记忆与上下文管理
长对话或多轮任务需要记忆管理。几种方案:
• 短期记忆:靠大模型上下文窗口,单次任务内够用 • 语义记忆:关键信息存成 embedding,用向量数据库召回 • 结构化记忆:用 JSON 或数据库存实体关系,适合精确检索 • 程序化记忆:Agent 执行过程中主动把重要信息固化到外部存储
LangChain 和 LlamaIndex 在记忆抽象上做得比较完善,有现成的组件可以用。有特殊需求的话,建议基于 Milvus、Pinecone 这类向量数据库自建记忆层。框架自带的记忆组件简单场景够用,但往往撑不到生产级别。
四、代码对比:同一个任务,不同框架
用一个统一场景展示各框架的实现方式:让 Agent 完成"研究 + 写作"的流水线。
任务:先搜最新 AI Agent 资讯,再基于搜索结果写文章。
LangGraph 实现:
from langgraph.graph import StateGraph, ENDfrom langchain_openai import ChatOpenAIfrom typing import TypedDict, Annotatedimport operatorclass AgentState(TypedDict): query: str research: str article: strllm = ChatOpenAI(model="gpt-4")def research_node(state): query = state["query"] # 模拟搜索 research_result = f"关于 '{query}' 的研究资料..." return {"research": research_result}def write_node(state): prompt = f"基于以下研究资料写一篇短文:\n{state['research']}" response = llm.invoke(prompt) return {"article": response.content}def should_continue(state): return "write" if state.get("research") else ENDgraph = StateGraph(AgentState)graph.add_node("research", research_node)graph.add_node("write", write_node)graph.set_entry_point("research")graph.add_conditional_edges("research", should_continue)graph.add_edge("write", END)app = graph.compile()result = app.invoke({"query": "AI Agent 最新进展"})AutoGen 实现:
from autogen import ConversableAgentresearcher = ConversableAgent( name="researcher", system_message="你是研究员,负责收集 AI Agent 领域的最新资讯。", llm_config={"model": "gpt-4"},)writer = ConversableAgent( name="writer", system_message="你是作家,负责基于研究资料撰写文章。", llm_config={"model": "gpt-4"},)# 研究员先工作research_result = researcher.generate_reply( messages=[{"role": "user", "content": "请搜索 AI Agent 最新进展。"}])# 作家基于研究结果写作article = writer.generate_reply( messages=[{"role": "user", "content": f"请基于以下研究资料写一篇短文:\n{research_result}"}])三个框架的思路差别明显:
• LangGraph 关注流程编排,用图结构串联各环节 • AutoGen 关注 Agent 间通信,消息传递是核心 • CrewAI 关注角色协作,强调任务分配和流水线
没有绝对的好坏,关键是看场景。
五、选型建议
讲了这么多框架,到底怎么选?按这几个维度来:
5.1 团队技术栈
最实际的问题。.NET 团队优先 Semantic Kernel,Python 团队选择最多,JavaScript 团队看 Semantic Kernel 或自研。技术栈决定你能拿到多少社区支持和文档。
5.2 项目复杂度
• 简单场景(单 Agent、简单工具调用):直接用 LangChain LCEL 或简单 Function Calling 就够,框架反而增加复杂度 • 中等复杂度(多步骤流水线、状态管理):LangGraph 和 CrewAI 不出错 • 高复杂度(多 Agent 协作、持久化状态、需要精细控制):LangGraph 图模型或 AutoGen 消息机制更合适
5.3 生产环境需求
生产环境稳定运行要考虑:
• 监控可观测性:框架有没有执行追踪、指标采集 • 部署便利性:支不支持容器化、serverless • 升级维护成本:API 稳不稳,社区活不活跃
5.4 社区与生态
这个经常被忽视,但实际上很重要。见过太多团队选了个"看起来很美"的框架,遇上问题在 GitHub Issues 发帖没人理。
LangChain/LangGraph 社区最大,文档最全,但争议也大(有人爱用,有人嫌弃)。AutoGen 背靠微软,企业级场景有保障。CrewAI 虽然资历浅,但增长势头不错。
六、最后说几句
写这篇文章的时候,我一直在想一个问题:我们是不是太关注框架了?
真正重要的永远是你要解决什么问题。Agent 框架是工具,选框架是为了更高效地解决问题,不是为了追某个"最流行"的框架。
一个扎心的事实:很多团队花大量时间在框架选型和切换上,却忽略了真正核心的东西——Agent 的 Prompt 设计、工具的质量、评估体系的建立。
建议:先跑通最小闭环。用最简单的方式把 Agent 跑起来,验证它能不能解决你的问题。只有原型出现瓶颈了,再考虑引入更复杂的框架。
框架会变,但问题本身很少变。把精力放在理解问题和设计解法上,比追框架新版本更有价值。
六、Agent 评测:容易被低估的环节
很多人会在框架选型、Prompt 调优上投入大量精力,却忽略了一个问题:你的 Agent 到底有多好用?
没有评测体系的 Agent 开发,就像蒙着眼飞行。不知道改了个 Prompt 是变好还是变坏,不知道上线新版本后用户满意度上升还是下降。
目前行业里还没有像软件测试那样成熟的 Agent 评测标准,但有几个方向值得关注:
1. 任务完成率:给一组标准任务,看 Agent 成功完成多少。最直接的指标,但也最难定义"成功"——搜索结果对算成功?还是最终产出符合预期才算?
2. 工具调用准确率:需要调用工具时,Agent 选对了没有?传参对不对?这需要标注好的"标准答案"数据集。
3. 幻觉率:Agent 回答里出现错误信息的比例。这个指标重要,但开放式对话场景很难自动评测,往往需要人工抽检。
4. 成本效率:每次任务消耗多少 token。成本优化是企业级应用的核心,尤其 Agent 规模化部署后,每降低 10% token 消耗都是真金白银。
5. 延迟体验:从用户发请求到 Agent 给出最终响应的端到端延迟。这直接影响用户体验,等待时间太长会明显拉低满意度。
我在项目里摸索出来的一套评测流程:先建立基准数据集,50-100 个典型任务案例;然后用自动化评测跑通大部分场景,辅以人工抽检;最后设置回归测试,每次代码变更后自动跑基准集,防止引入新问题。不完美,但够用。
七、实战建议:从 0 到 1 搭 Agent 系统
说完框架和评测,最后给一些实操建议,帮你在真实项目里少走弯路。
建议一:从单 Agent 开始,别过度设计。
很多团队项目启动时就设计了复杂的多 Agent 架构,结果发现单 Agent 能解决 80% 的问题,复杂设计反而带来难以维护的调试成本。我的经验:先证明单 Agent 不够用了,再考虑多 Agent 扩展。很多场景下,优化 Prompt 和工具定义,单 Agent 的能力边界比想象中远得多。
建议二:工具设计优先于框架选型。
投入大量时间学某个框架之前,先想清楚你的 Agent 需要哪些工具。工具是 Agent 能力的边界,工具设计得好不好,直接决定 Agent 的表现上限。很多团队把大量时间花在框架学习上,却忽视了工具层的设计——这是本末倒置的。
建议三:建立反馈闭环,让 Agent 从错误中学习。
生产环境里的 Agent 一定会犯错,关键是让错误变成学习素材。我的做法:每次工具调用失败后,捕获错误信息并记录;定期分析错误日志,识别高频失败模式;针对性地优化 Prompt 或添加工具说明。持续迭代,Agent 表现会逐步提升。这种方式比单纯换模型、换框架有效得多。
建议四:保持 Prompt 和代码分离。
很多团队把 Prompt 直接写在代码里,小项目没问题,但很快会变得难以维护。建议一开始就使用独立的 Prompt 配置文件或数据库存储,这样可以在不修改代码的情况下调整 Agent 行为。配合 A/B 测试,你甚至可以同时跑多个版本的 Prompt,观察哪个表现更好。
建议五:监控一切,但告警要有优先级。
Agent 系统的监控比传统软件更复杂,因为 LLM 输出天然有随机性。需要监控:API 响应时间、工具调用成功率、Token 消耗速率、用户满意度评分。但不要被监控数据淹没,设定合理的告警阈值,只在核心指标异常时才触发告警。告警太多会让团队陷入"狼来了"的麻木。
八、未来展望:Agent 生态的下一个阶段
Agent 技术还在快速演进,如果让我预测接下来值得重点关注的几个方向:
多 Agent 原生协作协议:目前各框架的多 Agent 实现还是各自为战,缺乏统一标准。行业需要一个类似 HTTP 的"Agent 间通信协议",让不同框架开发的 Agent 能相互协作。这会催生大量跨框架的创新应用。
Agent 安全与权限体系:Agent 能力越来越强,安全问题会越来越突出。Agent 能不能自主执行敏感操作?外部怎么约束 Agent 的行为边界?这需要类似 RBAC(基于角色的访问控制)的 Agent 权限体系,也是企业级采纳的关键前提。
Agent 可解释性:为什么 Agent 选了这个工具而不是那个?为什么给出这个回答?这种"黑盒"问题会随着监管要求提高变得越来越重要。可解释的 Agent 不仅便于调试,也是赢得用户信任的基础。
垂直领域 Agent 深度优化:通用 Agent 在特定垂直领域的表现往往不如专为该领域优化的版本。未来会有大量专注金融、医疗、法律、制造等行业的 Agent 框架和工具链,这些垂直方案的深度优化会带来明显效果提升。
总结:
• LangGraph:复杂工作流首选,图结构可控性强 • AutoGen:多 Agent 协作场景的最佳拍档 • CrewAI:业务流程自动化、快速原型的好工具 • Semantic Kernel:微软生态企业的安心之选 • 其他工具:Dify/Coze 适合低代码场景,LlamaIndex 适合 RAG 密集型应用
Agent 框架是工具,选框架是为了更高效地解决问题,不是追某个"最流行"的框架。把精力放在理解业务需求、设计工具接口、建立评测体系上,比花大量时间研究框架 API 变更更有价值。
希望这篇文章能帮你在 Agent 框架的丛林里找到方向。有具体场景的选型困惑,欢迎评论区交流。
夜雨聆风