这是 Agent 工程里面一个很常见的架构选择问题。很多公司会问:
为什么不用 LangChain、AutoGen、CrewAI 这些成熟框架,而要自己实现 Agent?
答案不是“自己写一定更好”,而是业务需求、可控性、性能、复杂度决定是否手搓。
一 、什么叫“手搓 Agent”?
手搓 Agent 指:
不用完整 Agent 框架,而是自己实现核心循环:
用户输入
↓
任务理解
↓
状态管理
↓
LLM调用
↓
Tool选择
↓
工具执行
↓
结果反馈
↓
继续推理
↓
输出
例如自己写:
while steps < max_steps: response = llm.chat(messages) if response.need_tool: result = execute_tool(response.tool) memory.add(result) else: return response.answer也就是自己控制 Agent Loop。
二、为什么选择手搓 Agent?
原因1:需要极强的控制能力
成熟框架通常提供:
Agent
├── Memory
├── Tool
├── Planner
└── Executor
但是很多企业场景需要:
每一步都必须可控。
比如机器人:
用户:
去客厅拿水
机器人 Agent:
不能:
LLM:
我要先问天气
我要搜索地图
我要联网查询
而应该:
任务解析
↓
导航模块
↓
运动控制
↓
视觉确认
↓
抓取
机器人领域:
延迟要求高
安全要求高
行为必须确定
所以经常自己设计 Agent。
原因2:框架太重
比如 LangChain:
为了通用性,引入很多抽象:
Chain
AgentExecutor
Retriever
Memory
Callback
Runnable
一个简单流程:
调用LLM
↓
调用工具
↓
返回结果
可能需要很多层封装。
但是企业内部:
可能只需要:
LLM
+
Tool Router
+
Memory
+
Workflow Engine
自己写几百行即可。
原因3:性能优化
框架为了通用,会增加:
对象封装
状态转换
中间消息
Callback
导致:
一次Agent执行:
纯API调用:
100ms
框架:
200~500ms
对于:
实时机器人
自动驾驶
高频交易
延迟很重要。
原因4:数据和安全要求
企业经常不能把:
Prompt
用户数据
Tool调用记录
交给第三方框架。
原因5:框架设计理念不符合业务
例如:
LangChain默认:
Agent决定下一步
但是工业机器人可能:
任务规划Agent
|
↓
固定技能模块
导航Skill
抓取Skill
避障Skill
充电Skill
这里更像:
Agent + Workflow
而不是纯Agent。
三、那为什么不用手搓,直接用框架?
因为框架也有优势。
优势1:开发快
例如:
实现工具调用:
自己写:
Tool注册
参数解析
异常处理
消息管理
可能几天。
框架:
几十分钟。
优势2:生态成熟
例如:
LangChain已有:
RAG
Memory
Vector DB
Tool接口
Agent模板
不用重复造轮子。
优势3:快速验证想法
创业早期:
目标:
先证明Agent能不能工作
不是:
打造工业级Agent Runtime
所以:
框架优先。