Agent 框架全景
本节定位
到了 Agent 阶段,很多人很快就会掉进另一个坑:
“框架太多了,到底该学哪个?”
这节课不是为了站队,也不是为了背框架名字,而是为了先建立一张判断地图:
不同框架到底在帮你抽象什么、放弃什么、适合什么。
学习目标
- 理解为什么 Agent 项目常常会引入框架
- 分清不同框架在抽象层级上的差异
- 知道框架通常在替你省什么、又让你失去什么
- 建立初步的框架选型视角
一、为什么需要 Agent 框架?
1.1 没有框架时,自己写会遇到什么?
一个稍微复杂一点的 Agent 系统,通常要自己处理:
- 状态管理
- 工具调用
- 消息流转
- 失败重试
- trace
- 多 Agent 协作
你当然可以手写,但很快会遇到:
- 重复样板代码很多
- 每个项目结构都不一致
- 调试和扩展越来越难
1.2 框架真正解决什么?
可以先用一句话记住:
框架不是替你做产品,而是在帮你把高频结构先搭好。
例如:
- 图结构状态流
- 工具注册机制
- Agent 间协作抽象
- 运行与观测接口
二、框架最大的差别通常不在“能不能做”,而在“怎么做”
2.1 一个很重要的视角:抽象层
很多框架都能:
- 接工具
- 跑工作流
- 做多 Agent
但它们抽象的层级不同:
- 有的更接近“底层搭积木”
- 有的更接近“高层角色编排”
- 有的更偏检索与数据组织
2.2 一个类比
你可以把不同框架想成不同类型的厨房:
- 有的给你锅碗瓢盆,自己做菜
- 有的给你半成品套餐,按说明组合
- 有的专门擅长某类菜
所以框架差别很多时候不是“谁更强”,而是:
谁更适合你现在的任务和团队习惯。
三、先看一张粗粒度地图
下面这张图不 是精确排名,而是帮助你快速建立直觉:
| 框架方向 | 更擅长什么 | 常见感觉 |
|---|---|---|
| 图/工作流型 | 复杂状态流、明确控制 | 灵活但更工程化 |
| 检索/知识型 | 文档、索引、RAG | 数据导向更强 |
| 角色/团队型 | 多 Agent 角色协作 | 上手快但抽象更高 |
| 通用实验型 | 快速搭 demo | 灵活但需要自己补工程层 |
这张图最重要的作用是:
先不要问“哪个最好”,先问“我的问题更像哪一类”。
四、框架一般帮你省掉哪些工作?
4.1 状态流和节点管理
例如:
- 当前任务状态放哪
- 下一步流向哪里
- 出错如何回退
4.2 工具接入和消息结构
例如:
- 工具注册
- 调用结果包装
- 错误处理
4.3 运行和观察
例如:
- trace
- step 记录
- 中间状态可视化
所以框架最常见的价值并不是“模型更聪明”,而是:
系统组织得更清楚。
五、框架也会带来代价
5.1 抽象越高,越容易失去底层控制
框架帮你省事,但也会带来:
- 学习框架本身的成本
- 框架约束
- 调试时必须理解它的内部抽象
5.2 一个很常见的问题
很多新人不是不会做 Agent,而是:
- 还没把任务想清楚
- 就先学了很多框架接口
结果最后学到的是框架用法,不是 Agent 本质。
所以正确顺序通常是:
先懂系统,再借框架提速。
六、一个最小“框架感”示例
下面这个例子不是某个真实框架,而是一个“框架抽象味道”的极小示例。
class MiniWorkflow:
def __init__(self):
self.steps = []
def add_step(self, name, fn):
self.steps.append((name, fn))
def run(self, state):
for name, fn in self.steps:
state = fn(state)
print(name, "->", state)
return state
def retrieve(state):
state["docs"] = ["退款政策"]
return state
def answer(state):
state["answer"] = f"根据 {state['docs']} 生成回答"
return state
wf = MiniWorkflow()
wf.add_step("retrieve", retrieve)
wf.add_step("answer", answer)
wf.run({"query": "退款政策是什么"})