随着开源智能体框架的不断涌现,从 CrewAI 到 AutoGen,再到近期崛起的 LangGraph、Agno、SmolAgents 等,每个框架都承载着独特的设计理念与适用场景。本教程将带你深入剖析这些框架的核心特性、差异以及最佳实践路径,帮助你在实际项目中精准选出最趁手的工具。
什么是 Agentic AI?
Agentic AI 本质上是以大语言模型(LLMs)为核心构建的系统,旨在赋予其准确的知识、访问数据的能力以及执行操作的能力。你可以将其理解为用自然语言自动化流程与任务。在自动化中应用自然语言处理(NLP)并非新鲜事——多年来我们一直借助 NLP 提取和处理数据。真正的变革在于,如今我们可以为语言模型提供更大的自由度,使其能够处理模糊性并动态做出决策。
尽管语言模型能够理解自然语言,但这并不意味着它们天然具备“智能体能力”(agency)——甚至未必理解你希望自动化的任务。因此,构建可靠的系统仍需投入大量工程设计与调试工作。
框架的作用是什么?
从本质上讲,Agentic 框架的核心作用是辅助你进行提示词工程(prompt engineering),并在 LLM 与外部系统之间实现数据的路由传递——但不仅如此,它们还提供了额外的抽象层,让上手更加便捷。
假如你打算从零构建一个系统,让大语言模型调用不同的 API(即“工具”),你需要在系统提示词中定义这一逻辑。随后,你还要让 LLM 在返回结果中指明它希望调用的工具,系统才能解析并执行相应的 API 请求。
框架通常会在两个方面提供帮助:一是规范提示词的结构,确保 LLM 返回格式正确的响应;二是将响应正确路由到对应的工具、API、文档等目标资源。当我们设置知识库时,框架可能会提供机制,始终将其作为上下文内容注入到提示中,这类似于构建传统的 RAG(检索增强生成)系统。此外,框架还能帮你处理错误、生成结构化输出、进行结果验证、实现可观测性、完成部署——更重要的是,它有助于组织代码,从而构建更复杂的系统,例如多智能体协作系统。
不过,很多人认为使用完整框架有时会“杀鸡用牛刀”。问题在于:如果 LLM 工具调用出错或系统出现故障,框架的抽象层反而可能成为障碍,因为调试变得困难。再比如,切换到另一种模型时,原本为某个模型量身定制的系统提示词可能并不适用于新模型。这也是为什么一些开发者会选择重写框架的部分功能——比如 LangGraph 中的 create_react_agent——以获得更精细的控制能力。
不同框架的抽象程度和功能支持各有差异,但它们通常都拥有社区支持,能帮助你快速起步。一旦你掌握了一个框架(尤其是理解了其底层工作机制),学习其他框架也会变得更加顺畅。
热门开源智能体框架一览
我们通常会参考社区反馈,了解某个框架在真实场景中的实际表现。不过,最受欢迎的框架并不一定是最佳选择。我们最常听到的框架是 CrewAI 和 AutoGen。
- CrewAI:一个高抽象层的框架,能够隐藏底层细节,帮助你快速搭建智能体系统。
- AutoGen:专注于构建自治、异步的智能体协作系统,智能体可根据需要自由协作——这使其更适合用于测试和研究场景。
LangGraph 也是一个知名度较高的系统,值得作为主要开发框架之一重点介绍。它采用图结构的方式,你可以通过构建节点并用智能体连接这些节点来实现流程控制。与 CrewAI 和 AutoGen 相比,它提供了更严格的工程控制,并不假设智能体应拥有过多自主能力。不过需要注意的是,很多人认为 LangGraph 的抽象层过于复杂,调试困难。它的学习曲线较陡,但一旦掌握了基础,便会变得容易许多。
接下来还有一些较新的框架,也值得关注:
- Agno(前身是 Phi-Data):强调良好的开发体验,拥有我见过最清晰的文档之一。它非常“即插即用”,内置了大量功能,结构清晰、抽象合理,非常适合快速上手。
- SmolAgents:一个极简的框架,引入了一个叫
CodingAgent的智能体,用代码而非 JSON 进行数据路由。它还允许你直接使用 Hugging Face 的完整模型库,开箱即用。
还有一些不太被提及的开源框架:
- PydanticAI:建立在 Pydantic 之上,抽象层极少,框架非常透明,适合需要严格类型安全、可预测且经过验证的输出场景,便于精细控制和调试。
- Atomic Agents:由一位独立开发者打造,采用基于 schema 的构建模块(像乐高积木一样拼接),强调结构性和可控性。其初衷是为了解决现有框架在实际应用中表现不佳的问题。PydanticAI 和 Atomic Agents 的共同目标是摆脱“黑盒式 AI”,拒绝不可控的自治行为。
- Mastra:由 Gatsby 背后的团队开发,是一个 JavaScript 框架,专为前端开发者打造,方便他们在自己的生态系统中轻松构建智能体。
各框架的共通点
大多数智能体框架都具备一些共同的核心构件:对不同模型的支持、工具系统、记忆机制以及 RAG(检索增强生成)。大多数开源框架基本上都是 模型无关 的,即它们被设计为支持多种模型服务商。但正如前面提到的,每个框架的系统提示词结构各不相同,这种结构可能对某些模型更友好,对其他模型则未必合适。这也是为什么你 最好能访问和修改系统提示词,以便根据实际需要进行调整。
所有智能体框架都支持工具系统,因为“工具”是构建具备行动能力的系统的关键。框架通常也会通过简洁的抽象方式,让你轻松自定义自己的工具。目前,大多数框架都支持 MCP(Multi-Component Prompting),无论是官方支持还是通过社区方案。
需要注意的是,并非所有模型都支持函数调用(function calling),而函数调用是工具使用的前提。想了解哪些模型适合作为基础 LLM,你可以参考 Hugging Face 的 Agent 排行榜。为了让智能体在多轮调用 LLM 时保有 短期记忆,所有框架都会使用 状态管理(state)。状态可以帮助 LLM 记住之前对话中说过的话或已完成的步骤。大多数框架也都提供了 便捷的方式集成 RAG,你可以用不同的数据库为智能体提供外部知识。
最后,几乎所有框架都支持:
- 异步调用
- 结构化输出
- 流式输出
- 可观测性(日志、追踪、监控等)
提示: 如果你刚开始接触智能体框架,建议先选择一个社区活跃、文档清晰的框架(如 Agno 或 CrewAI)来体验核心概念,再逐步探索其他框架。
一些框架没有的功能
框架在某些方面的支持存在差异,例如对多模态输入、记忆机制和多智能体系统的支持。有些框架内建了解决方案,而有些则需要你自己动手“接线”。首先,有些框架自带对 多模态输入(即文本、图像、语音等)的支持。只要基础模型支持,你也可以自己实现这一功能,但内建支持会让开发更加方便。正如前面提到的,短期记忆(state) 几乎是所有框架都包含的——因为没有它你就无法构建带工具调用的系统。但 长期记忆 的实现就没那么简单了,这方面各框架的能力差异很大。有的框架内建了支持,有的则需要你接入第三方记忆系统(如数据库或外部向量库)。
框架在处理 多智能体系统 方面也存在差异。多智能体系统可以让你构建协作型或层级型结构的“智能体团队”,通过“监督者”连接多个智能体。大多数框架都建议将单个智能体职责范围 控制得较窄,即只赋予其有限的目标和工具集。这意味着你往往需要构建“智能体团队”来完成更复杂的流程。虽然所有框架都能让你构建一个团队,但当你尝试扩展成“多层级、多团队”的系统时,有些框架就会变得难以管理。
这正是 LangGraph 的优势所在——你可以创建节点,把它们连接到不同的监督者,并可视化各个团队之间的交互过程。要构建大规模的多智能体系统,LangGraph 是目前最灵活的框架之一。Agno 最近也加入了对“团队”的支持,支持协作型和层级型团队结构,但目前还缺乏复杂多层级结构的示例。SmolAgents 允许你将智能体连接到一个监督者,但随着系统变大,会变得复杂。它在团队结构方面的设计有点像 CrewAI。Mastra 也类似。对于 PydanticAI 和 Atomic Agents,你则需要 手动串联智能体团队,所有的流程编排都需要你自己处理。
它们的不同之处
框架之间的差异主要体现在它们的抽象程度、赋予智能体的控制权以及你需要编写多少代码才能使系统正常工作。
首先,有些框架故意包含了大量的内建功能,使得你可以快速开始使用。我认为 Mastra、CrewAI 和在某种程度上 Agno 是为即插即用而设计的。LangGraph 也有相当高的抽象级别,但它使用基于图形的系统,需要手动连接节点。虽然这给予了你更多控制权,但也意味着你必须自己设置并管理每个连接,这带来了更陡峭的学习曲线。
接下来是低抽象级别的框架,比如 PydanticAI、SmolAgents 和 Atomic Agents。这些框架力求保持透明,但你通常需要自己搭建和编排流程。这提供了完全的控制权,有助于调试,但也增加了构建时间。
另一个区别是框架假设智能体应该拥有多少自主性。有些框架认为 LLM(大语言模型)应该足够智能,能够自己完成任务,而其他框架则偏向于更紧密的控制——给智能体一个明确的任务,并一步步引导它完成。AutoGen 和 SmolAgents 属于前者,其他框架则更倾向于控制。
在这一点上有一个需要考虑的问题:当开发者构建一个侧重紧密控制的框架时,通常是因为他们尚未找到可靠的方式让智能体独立工作——至少在现有技术下无法做到这一点。这个领域正在越来越像工程学。如果你打算构建这些系统,确实需要理解编程。真正的问题是,框架在技术要求上有多少差异。如果你经验较少,使用 CrewAI、Agno 或 Mastra 可能是个不错的选择。SmolAgents 也适合简单的用例。至于 PydanticAI、Atomic Agents 和 LangGraph——你将需要自己编写更多的逻辑代码。诚然,你仍然可以构建一个智能体来帮助你正确组织代码。如果你完全不懂编程,可以试试 Flowise 或 dify。
最后,值得一提的是这些框架在开发者体验上的差异。从我的观察来看,大多数开发者认为 CrewAI 和 AutoGen 很难调试。SmolAgents 的 CodeAgent 引入了一种新颖的方式,让智能体通过代码来路由数据——这是一个很酷的想法,但并不总是按预期工作。LangGraph,尤其是与 LangChain 配合使用时,学习曲线非常陡峭,而且有些抽象可能让你感到困惑,最终可能需要拆解并重构。PydanticAI 和 Atomic Agents 通常受到开发者的好评,但它们要求你自己编排流程。Agno 和 Mastra 是很不错的选择,但你可能会遇到一些如循环调用等问题,调试起来会比较困难。
常见问题与解答
1. 我是初学者,应该选哪个框架?
推荐从 CrewAI 或 Agno 开始。它们有完善的文档和社区支持,抽象层较高,能让你快速看到效果。如果想用 JavaScript,Mastra 是前端开发者的好选择。
2. 我需要构建复杂的多智能体协作系统,哪个框架最合适?
LangGraph 是目前最灵活的选择,支持图形化节点连接和多层级监督者机制。不过学习曲线较陡,需要一定编程基础。
3. 这些框架能用在生产环境吗?
部分框架(如 LangGraph、Agno、CrewAI)已有企业级应用案例,但你需要关注可扩展性、错误处理和可观测性。建议先在原型验证后再投入生产。
4. 我不想被框架束缚,想要完全控制底层逻辑,该选哪个?
PydanticAI 和 Atomic Agents 提供了极低的抽象层,让你能精细控制每个步骤,非常适合需要严格类型安全和可预测输出的场景。
5. 框架对模型的支持如何?如果我换模型会有问题吗?
大多数框架是模型无关的,但系统提示词结构可能针对特定模型优化。建议选择允许你直接修改系统提示词的框架(如 LangGraph、PydanticAI),这样切换模型时更容易调整。
总结
开始的最佳方式就是直接跳进去试试。不过我希望这篇文章能为你提供一个关于当前开源框架的全面概述——以及哪些可能适合你的需求。当然,这只是对每个框架的浅层介绍,我并未深入探讨企业级可扩展性或操作可靠性等深度话题。如果你的目标是构建生产级系统,你可能需要单独进行调研。一些开发者认为,AI 智能体框架是最糟糕的抽象形式之一——它们常常使事情变得比直接使用官方 LLM 提供商的 SDK 更加复杂。我将这个问题留给你自己判断。
记得你可以在这里找到每个框架的完整功能列表,以及可以在这里找到包含所有智能体框架的仓库。
