开源 AI Agent 框架
当你亲手搭过几个 agent 之后,同样的管道逻辑会反复出现:一个循环调用模型、运行模型要求的工具、把结果喂回去,并在任务完成时停止。Agent 框架把这套管道封装起来——外加状态、记忆和多 agent 协调——让你少写胶水代码。本页是一份持久、中立于厂商的地图,梳理主要的开源选项、它们实际提供什么,以及如何选择。它们几乎全都是模型无关的:既能配合 Claude、GPT、Gemini,也能配合本地开放权重模型。
- 了解 agent 框架相比手写循环给了你什么——以及没给什么
- 认识三种原型:有状态图、基于角色的团队,以及极简循环
- 使用一套可复用的流程来选择其一——用复杂度换取控制力
- 记住这些大多是模型无关的——框架很少把你锁定在某一个厂商上
agent 框架实际给了你什么
抛开品牌包装,一个框架无非是在向你提供四样东西中的某个子集:
- 编排(Orchestration)——控制循环。顺序步骤、分支、重试、循环到完成,以及(越来越常见的)能在崩溃后存活并从中断处恢复的持久执行。
- 工具(Tools)——一套标准方式来声明模型可调用的函数、校验其参数、运行它并返回结果。就是你在 工具使用 中已经熟悉的那套「描述→调用→执行→返回」循环。
- 记忆与状态(Memory & state)——一个跨轮次保存对话历史、草稿事实和检索到的文档的地方,让 agent 在各步骤之间不会失忆。
- 多 agent(Multi-agent)——让多个专门化 agent 相互交接工作的模式:一个主管把任务委派给工人,或者对等 agent 协作完成一项任务。(在概念上和 Claude Code 的 子 agent 是同一个思路。)
当你原本得亲手编写并维护这全部四样东西时,框架才值得用。而当你的任务是「调用模型、跑一两个工具、返回一个答案」时,它不值得——在那里,框架只是你要花时间与之搏斗的额外开销。
三种原型
框架之间的差别比它们的营销话术所暗示的要小。真正只有三种形态,大多数项目都是其中之一的变体:
- **有状态图 / 工作流(Stateful graph / workflow)。**你把 agent 建模为一张由节点和边(或步骤和转移)构成的显式图。控制力最大、状态可检查,适合长时运行和人在回路的流程。前期要学的东西更多。→ LangGraph、LlamaIndex Workflows。
- **基于角色的团队(Role-based crew)。**你按角色(「研究员」「写手」「审稿人」)描述 agent,让它们协作或跑一段流程。表达一个多 agent 团队很快;你用一些细粒度控制换取了高层抽象。→ CrewAI,以及 AutoGen 那种对话式多 agent 风格。
- 极简循环 / 少抽象(Minimal loop / few abstractions)。在模型原生工具调用之上薄薄一层,包含几个 agent 之间的交接,别的不多。从头到尾都好读、好丢弃。→ OpenAI Agents SDK(实验性项目 Swarm 的生产级继任者),以及你自己写的朴素循环。
- 从能用的最简单方案开始——朴素的工具调用循环往往胜过一个笨重的框架。
快速巡览(下注前请核实定位)
以下是值得了解的开源项目。之所以点名,是因为每个项目真实的仓库都经过核实;一切易变的信息都藏在上面的 VerifyNote 背后。
- LangGraph——一个面向有状态、长时运行 agent 的低层编排框架,把 agent 建模为图;持久执行和人在回路是一等公民。既可独立使用,也可与更广的 LangChain 生态一起用。模型无关。
- LlamaIndex——起初是一个数据/RAG 框架(连接器、索引、检索),如今也提供了一个事件驱动的 Workflows 层给 agent 用。当你的 agent 本质上是在你的文档之上做检索时,它很强。
- Microsoft AutoGen——一个面向对话式多 agent 系统的框架。截至 2026 年年中,它处于维护模式;微软把新项目导向一个统一的继任者(Microsoft Agent Framework,合并了 AutoGen + Semantic Kernel)。开工前请查看当前状态。
- CrewAI——一个基于角色的框架:按角色和目标定义 agent,把它们组织成 Crews(自主协作)或 Flows(事件驱动的控制)。是搭出一个多 agent 团队的快捷路径。
- OpenAI Agents SDK——一个刻意保持轻量、少抽象的框架,面向带交接的多 agent 工作流。尽管名字如此,它其实是厂商无关的(其文档指出支持 100+ 种 LLM),并且是实验性项目 Swarm 的生产级继任者。
- 朴素的 agent 循环——完全没有框架:你自己围绕模型原生工具调用写的
while循环。对简单 agent 而言这是正确的默认选择,也正是上面每个框架归根结底所包装的东西。
如何选一个框架
- 用一句话说明 agent 做什么,外加那些不可谈判的条件:延迟、成本上限、数据隐私、运行是否必须在崩溃后存活,以及是否必须有人来批准某些步骤。
- 如果只是一个 agent 调用一两个工具,写个朴素循环。许多生产级 agent 从不需要更多。只有当你原本得自己重新实现编排、记忆「和」多 agent 时,才采用框架。
- 长时运行 / 人在回路 / 状态可检查 → 有状态图(LangGraph、LlamaIndex Workflows)。一支专家团队 → 基于角色的团队(CrewAI)。几个 agent 互相交接、保持简单 → 极简循环(OpenAI Agents SDK,或你自己写的)。
- 确认仓库仍在积极维护(不是处于维护模式),并且它能干净地支持你实际使用的模型——Claude、GPT、Gemini,或本地模型。大多数是厂商中立的;去核实,别假设。
- 把那唯一最难的步骤——棘手的工具、那次交接、失败后恢复——在两个候选里各做一遍。让那一步变得可读的抽象,就是你的赢家。
- 把你的工具和提示词保持为朴素的函数和字符串,让框架包裹你的逻辑,而不是拥有它。切换框架应该意味着重接编排,而不是重写一切。
每个框架都在包装的那个东西
在伸手去拿任何库之前,先看看它们全都构建于其上的那个循环会很有帮助。这就是全部思路——模型决策,你执行,重复直到完成:
# Provider-neutral agent loop — the core every framework wraps.
# `model_call` and `run_tool` are yours; swap in Claude, GPT, Gemini, or a local model.
def agent_loop(task, tools, max_steps=10):
messages = [{"role": "user", "content": task}]
for _ in range(max_steps):
# 1. Ask the model what to do next (it sees the tool schemas).
response = model_call(messages, tools=tools)
# 2. No tool requested → the model is done. Return its answer.
if not response.tool_calls:
return response.text
# 3. Run each requested tool and feed results back in.
messages.append(response.as_message())
for call in response.tool_calls:
result = run_tool(call.name, call.arguments)
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": result,
})
return "Stopped: hit max_steps without finishing."
如果你能读懂这段,你就理解了本页每个框架在底层做的事。图为其加上显式状态和分支;团队为其加上角色和委派;极简 SDK 为其加上整洁的交接——但那个心跳始终是这个循环。
极简 agent 系统提示词(与上面的循环搭配)
You are a task-completing agent with access to tools.
Loop:
1. Think briefly about the next single step toward the goal.
2. If a tool would help, call exactly ONE tool with valid arguments.
3. When you have enough to answer, stop calling tools and give the final answer.
Rules:
- Prefer the fewest tool calls that get the job done.
- If a tool fails, read the error and adjust — do not repeat the same call.
- Never invent tool results; use only what tools actually returned.
- If the goal is impossible with the available tools, say so and stop.
Goal: {one-sentence task}关于炒作的一点说明
这里没有哪个框架是「最好的」——这个问题本身就是错的。图框架赢在控制力和持久性;团队框架赢在快速表达一支团队;极简框架赢在可读性和低锁定;而朴素循环获胜的频率,比框架的 README 所承认的要高。正确的选择,是那个能让你自己最难的一步变清晰的最小工具。就像挑模型一样,让你自己的任务——而不是 star 数——来决定。你在 评估 上会用的那套纪律,在这里同样适用:做原型、在真实用例上测量、留一条撤离通道。
自我检查
0/3- agent 框架把编排、工具、记忆和多 agent 协调打包起来——只有当你原本得自己构建这全部四样时才采用它。
- 三种原型覆盖了整个领域:有状态图(控制/持久性)、基于角色的团队(快速团队)、极简循环(可读性、低锁定)。
- 这些几乎全都是模型无关的——它们跑在 Claude、GPT、Gemini 和本地模型上;请按项目逐个核实,而不是假设。
- 没有哪个框架是普遍「最好」的;选那个能让「你」最难的一步变清晰的最小工具,并留一条撤离通道。
- 朴素的工具调用循环是诚实的默认选择——而它正是每个框架所包装的东西。
- 维护状态会变(例如 AutoGen → 一个继任者);在下注前,先到项目自己的仓库确认它仍在积极维护。
来源与延伸阅读
- LangGraph — GitHub — 面向有状态、长时运行 agent 的低层编排框架。
- LangGraph 概述 — LangChain 文档 — 概念、持久执行和人在回路。
- LangChain — GitHub — LangGraph 所集成的更广生态。
- LlamaIndex — GitHub — 带事件驱动 Workflows 层的数据/RAG 框架,供 agent 使用。
- LlamaIndex 文档 — RAG、查询引擎、agent 和 Workflows。
- Microsoft AutoGen — GitHub — 对话式多 agent 框架(查看维护状态)。
- Microsoft Agent Framework — GitHub — 用于构建和编排 agent 的统一继任者(AutoGen + Semantic Kernel)。
- CrewAI — GitHub — 带 Crews 和 Flows 的基于角色的多 agent 框架。
- CrewAI 文档 — agent、任务、团队、流程和工具。
- OpenAI Agents SDK — GitHub — 轻量、厂商无关、带交接的多 agent 框架。
- OpenAI Agents SDK 文档 — 那个极少抽象的 agent 模型。
- OpenAI Swarm — GitHub — Agents SDK 所取代的实验性前身(教学性质,现已被取代)。