标准回答
这不是「框架 vs 手搓」的非黑即白,而是根据阶段和要求做的工程权衡。
框架的价值
LangChain、LangGraph、CrewAI 这类框架把 prompt 模板、工具调用协议、记忆管理、多步编排都封装好了,能在几小时内搭出一个能跑的 Agent。对于做 demo、验证可行性、或需求标准化的场景,它们极大降低了起步成本,没有必要重复造轮子。
框架的代价
- 过度抽象导致黑盒:实际发给模型的 prompt 被层层包装,出问题时难以定位是哪一层注入了什么,调试链路长。
- 依赖与版本不稳定:这类库迭代快、破坏性更新多,升级一次可能牵连一连串行为变化,生产环境维护成本高。
- prompt 难精细控制:很多关键 prompt 藏在框架默认模板里,想逐字调优、做 A/B、或适配特定模型的最佳实践时很别扭。
- 性能与成本不透明:框架可能在背后多发几次调用或塞入冗余上下文,token 成本和延迟不好掌控。
- 定制困难:一旦需求超出框架预设的编排范式(特殊的控制流、自定义重试与降级),往往要和框架「对着干」。
手搓的优势
直接用模型 SDK 自己写循环、自己拼 prompt、自己管工具调用,意味着:prompt 与控制流完全可控、每一步都看得见因而易调试和可观测、依赖少所以更稳定、代码按需裁剪因而更轻量。代价是起步要写更多样板代码,且要自己实现记忆、重试等通用能力。
判断标准
倾向框架:早期原型、需求通用且标准、团队对 LLM 工程经验有限、要快速验证。
倾向手搓或薄封装:核心业务系统、对 prompt 质量/成本/延迟有严格要求、需要深度定制控制流、需要强可观测与可控的故障处理。常见折中是只借用框架里少数稳定的工具组件,编排和 prompt 自己掌控,即「薄封装」。
常见误区
⚠️ 常见踩坑
把「手搓」理解为否定一切框架、什么都从零写,或反过来认为「用了知名框架就等于工程做得好」。两者都是态度而非判断——成熟做法是按场景选型:能被框架良好覆盖的部分就复用,框架抽象妨碍了可控性和可观测性的核心环节才自研。
追问
追问 1:什么信号说明该从框架迁出、改为自研?
当出现这些信号时值得考虑:调试一个线上 bug 要花大量时间在框架内部源码里追踪 prompt 来源;每次框架升级都引发回归、团队疲于适配;token 成本或延迟明显高于预期但难以定位优化点;产品需求反复撞上框架的抽象边界,要靠 hack 绕过。本质是框架的维护与对抗成本已超过它带来的便利。
追问 2:手搓 Agent 通常需要自己实现哪些基础能力?
至少包括:与模型交互的调用循环(ReAct 或 plan-execute 式的多步循环)、工具的注册与调用结果解析、对话与中间状态的记忆管理、上下文的拼装与裁剪、错误重试与降级、以及可观测性(日志、trace、token/延迟统计)。这些正是框架替你做掉的部分,自研换来可控性的同时要承担其实现与维护。
追问 3:团队较小、经验不足时,你会怎么选?
多数情况下先用框架快速验证业务可行性和需求边界,避免一上来就在基础设施上耗时间。等核心链路稳定、瓶颈清晰后,再针对最关键、最需要精细控制的环节逐步替换为自研薄封装。这样既享受了框架的起步速度,又把自研成本投在最有价值的地方,而不是过早全盘手搓或长期被框架绑死。
🔗 相似问题
同一考点的不同问法,面试官可能换着问,一起刷更稳
- 中级AI 工程化
LangChain 的 Callback 回调机制是什么?有什么用?
- 中级AI 工程化
LangChain 与 LlamaIndex 有什么区别?各自适合什么场景?
- 中级AI Agent
如何为 LLM / Agent 应用做可观测性(Tracing 与评测)?
- 中级AI Agent
Agent 陷入死循环(反复调用同一工具/来回纠结)如何排查与解决?
- 中级AI Agent
Agent 调用工具返回超大结果(如代码搜索 50KB)会带来什么问题?怎么处理?
- 中级AI Agent
市面上主流 LLM Agent 框架(AutoGPT / CrewAI / LangGraph / AutoGen 等)各有什么特点?如何选型?
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习